document_hash 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/document_hash/callbacks.rb +4 -0
- data/lib/document_hash/core.rb +14 -4
- data/lib/document_hash/version.rb +1 -1
- data/spec/lib/document_spec.rb +30 -6
- metadata +1 -1
data/lib/document_hash/core.rb
CHANGED
@@ -31,8 +31,9 @@ module DocumentHash
|
|
31
31
|
val.__send__ :parent_key=, key;
|
32
32
|
end
|
33
33
|
|
34
|
+
val = execute_before_change_callback key,val
|
34
35
|
super key, val
|
35
|
-
changed_key key
|
36
|
+
changed_key key, val
|
36
37
|
end
|
37
38
|
|
38
39
|
def reset!
|
@@ -55,12 +56,21 @@ module DocumentHash
|
|
55
56
|
|
56
57
|
attr_accessor :parent, :parent_key
|
57
58
|
|
58
|
-
def changed_key key
|
59
|
+
def changed_key key, value
|
59
60
|
path = Array(key)
|
60
61
|
|
61
|
-
@after_change.call path if @after_change
|
62
|
+
@after_change.call path, value if @after_change
|
62
63
|
changed_attributes << path.first
|
63
|
-
parent.__send__ :changed_key, path.unshift(parent_key) if parent
|
64
|
+
parent.__send__ :changed_key, path.unshift(parent_key), value if parent
|
65
|
+
end
|
66
|
+
|
67
|
+
def execute_before_change_callback key, value
|
68
|
+
path = Array(key)
|
69
|
+
|
70
|
+
value = @before_change.call path, value if @before_change
|
71
|
+
value = parent.__send__ :execute_before_change_callback, path.unshift(parent_key), value if parent
|
72
|
+
|
73
|
+
value
|
64
74
|
end
|
65
75
|
|
66
76
|
def changed_attributes
|
data/spec/lib/document_spec.rb
CHANGED
@@ -91,10 +91,10 @@ describe DocumentHash::Core do
|
|
91
91
|
it "triggers the after change block" do
|
92
92
|
subject = DocumentHash::Core.new
|
93
93
|
test_mock = mock("test")
|
94
|
-
test_mock.should_receive(:callback_mock).with([:test])
|
94
|
+
test_mock.should_receive(:callback_mock).with([:test], "value")
|
95
95
|
|
96
|
-
subject.after_change do |path|
|
97
|
-
test_mock.callback_mock path
|
96
|
+
subject.after_change do |path, value|
|
97
|
+
test_mock.callback_mock path, value
|
98
98
|
end
|
99
99
|
|
100
100
|
subject["test"] = "value"
|
@@ -103,12 +103,36 @@ describe DocumentHash::Core do
|
|
103
103
|
it "receives the right path when multilevel" do
|
104
104
|
subject = DocumentHash::Core[ { inner: { attribute: "value" } } ]
|
105
105
|
test_mock = mock("test")
|
106
|
-
test_mock.should_receive(:callback_mock).with([:inner, :attribute])
|
106
|
+
test_mock.should_receive(:callback_mock).with([:inner, :attribute], "hello")
|
107
107
|
|
108
|
-
subject.after_change do |path|
|
109
|
-
test_mock.callback_mock path
|
108
|
+
subject.after_change do |path, value|
|
109
|
+
test_mock.callback_mock path, value
|
110
110
|
end
|
111
111
|
|
112
112
|
subject[:inner][:attribute] = "hello"
|
113
113
|
end
|
114
|
+
|
115
|
+
it "triggers a callback before change" do
|
116
|
+
subject = DocumentHash::Core[ { inner: { attribute: "value" } } ]
|
117
|
+
test_mock = mock("test")
|
118
|
+
test_mock.should_receive(:callback_mock).with([:inner, :attribute], "hello")
|
119
|
+
|
120
|
+
subject.before_change do |path, value|
|
121
|
+
test_mock.callback_mock path, value
|
122
|
+
end
|
123
|
+
|
124
|
+
subject[:inner][:attribute] = "hello"
|
125
|
+
end
|
126
|
+
|
127
|
+
it "overrides the value being written by the before_change callback" do
|
128
|
+
subject = DocumentHash::Core[ { inner: { attribute: "value" } } ]
|
129
|
+
|
130
|
+
subject.before_change do |path, value|
|
131
|
+
"hola"
|
132
|
+
end
|
133
|
+
|
134
|
+
subject[:inner][:attribute] = "hello"
|
135
|
+
subject[:inner][:attribute].should == "hola"
|
136
|
+
end
|
137
|
+
|
114
138
|
end
|