--- Revision None +++ Revision 653031316238 @@ -0,0 +1,52 @@ +['pp', 'yaml'].each{ |lib| require lib } + +module YAML + def save_file(filename, obj) + File.open(filename, "w+"){ |file| file.puts(obj.to_yaml) } + obj + end + module_function :save_file +end + +class Hash + def rename(old_key, new_key) + new_hash = self.dup + new_hash[new_key] = new_hash.delete(old_key) + new_hash + end + def rename!(old_key, new_key) + self[new_key] = self.delete(old_key) + self + end +end + +class YAMLOptions + attr_accessor :filename + alias set instance_eval # Like Object.tap, but evals the block rather than passing self to it + + def initialize(filename, &blk) + @filename = filename + @hash = load + set(&blk) if block_given? + end + + def method_missing(method, *args, &block) + p method + end + def save + YAML.save_file(@filename, @hash) + end + def load + YAML.load_file(@filename) rescue YAML.save_file(@filename, {}) + end +end + +options = YAMLOptions.new("./options.yaml") + +options.set do + foo + foo = "It aint easy being cheesy!" +end +puts "#===---" +options.foo +options.foo = "It aint easy being cheesy!"