lib/everything/piece/metadata.rb
require 'fileutils'
require 'yaml'
module Everything
class Piece
class Metadata
extend Forwardable
# TODO: Need to add some ways in here to save the metadata file once it's
# been edited.
# TODO: Also add a #to_s or #inspect methods to render the raw_yaml
# TODO: Also add a #[]= here that delegates to raw_yaml as well.
def initialize(piece_path)
@piece_path = piece_path
end
def absolute_dir
@absolute_dir ||= Everything.path.join(dir)
end
def absolute_path
@absolute_path ||= absolute_dir.join(file_name)
end
def dir
@dir ||= calculated_dir
end
def file_path
# TODO: Could try a deprecation approach like http://seejohncode.com/2012/01/09/deprecating-methods-in-ruby/
deprecation_message = "Piece Metadata's #file_path is deprecated and will be removed soon. Use #absolute_path instead."
warn deprecation_message
@file_path ||= File.join(piece_path, file_name)
end
def path
@path ||= dir.join(file_name)
end
def raw_yaml
@raw_yaml ||= YAML.load_file(absolute_path)
end
def raw_yaml=(value)
@raw_yaml = value
end
def save
FileUtils.mkdir_p(piece_path)
absolute_path.write(@raw_yaml)
end
def_delegators :raw_yaml, :[]
private
attr_reader :piece_path
def file_name
'index.yaml'
end
def calculated_dir
full_pathname = Pathname.new(piece_path)
_relative_pathname = full_pathname.relative_path_from(Everything.path)
end
end
end
end