5TdtGPZaEK0DbDBa2DCUyB changeset

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