Revision 653031316238 () - Diff

Link to this snippet: https://friendpaste.com/5TdtGPZaEK0DbDBa2DCUyB
Embed:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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!"