symbolmatrix 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,7 +69,7 @@ class SymbolMatrix < Hash
|
|
69
69
|
end
|
70
70
|
|
71
71
|
# Merges this SymbolMatrix with another SymbolMatrix recursively
|
72
|
-
def recursive_merge hash
|
72
|
+
def recursive_merge hash, override = false
|
73
73
|
result = SymbolMatrix.new
|
74
74
|
self.keys.each do |key|
|
75
75
|
result[key] = self[key]
|
@@ -77,7 +77,15 @@ class SymbolMatrix < Hash
|
|
77
77
|
|
78
78
|
hash.keys.each do |key|
|
79
79
|
if result.has_key? key
|
80
|
-
|
80
|
+
if result[key].respond_to? :recursive_merge
|
81
|
+
result[key] = result[key].recursive_merge hash[key], override
|
82
|
+
else
|
83
|
+
if override
|
84
|
+
result[key] = hash[key]
|
85
|
+
else
|
86
|
+
raise MergeError, "The value of the :#{key} key is already defined. Run recursive merge with flag true if you want it to override"
|
87
|
+
end
|
88
|
+
end
|
81
89
|
else
|
82
90
|
result[key] = hash[key]
|
83
91
|
end
|
@@ -86,10 +94,18 @@ class SymbolMatrix < Hash
|
|
86
94
|
end
|
87
95
|
|
88
96
|
# Merges recursively the passed SymbolMatrix into self
|
89
|
-
def recursive_merge! symbolmatrix
|
97
|
+
def recursive_merge! symbolmatrix, override = false
|
90
98
|
symbolmatrix.each do |key, value|
|
91
99
|
if self.has_key? key
|
92
|
-
self[key].recursive_merge!
|
100
|
+
if self[key].respond_to? :recursive_merge!
|
101
|
+
self[key].recursive_merge! value, override
|
102
|
+
else
|
103
|
+
if override
|
104
|
+
self[key] = value
|
105
|
+
else
|
106
|
+
raise MergeError, "The value of the :#{key} key is already defined. Run recursive merge with flag true if you want it to override"
|
107
|
+
end
|
108
|
+
end
|
93
109
|
else
|
94
110
|
self[key] = value
|
95
111
|
end
|
@@ -98,6 +114,7 @@ class SymbolMatrix < Hash
|
|
98
114
|
|
99
115
|
class KeyNotDefinedException < RuntimeError; end
|
100
116
|
class InvalidKeyException < RuntimeError; end
|
117
|
+
class MergeError < RuntimeError; end
|
101
118
|
end
|
102
119
|
|
103
120
|
def SymbolMatrix *args
|
data/lib/symbolmatrix/version.rb
CHANGED
@@ -120,6 +120,25 @@ describe SymbolMatrix do
|
|
120
120
|
end
|
121
121
|
|
122
122
|
describe "#recursive_merge" do
|
123
|
+
it 'should raise a relevant error when the two matrices collide' do
|
124
|
+
sm = SymbolMatrix a: "hola"
|
125
|
+
expect { sm.recursive_merge SymbolMatrix a: "hey"
|
126
|
+
}.to raise_error SymbolMatrix::MergeError,
|
127
|
+
"The value of the :a key is already defined. Run recursive merge with flag true if you want it to override"
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should override on collide if the override flag is on' do
|
131
|
+
sm = SymbolMatrix a: "hola"
|
132
|
+
result = sm.recursive_merge SymbolMatrix(a: "hey"), true
|
133
|
+
result.a.should == "hey"
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'should send the override directive into the recursion' do
|
137
|
+
sm = SymbolMatrix a: { b: "hola" }
|
138
|
+
result = sm.recursive_merge SymbolMatrix( a: { b: "hey" } ), true
|
139
|
+
result.a.b.should == "hey"
|
140
|
+
end
|
141
|
+
|
123
142
|
it 'should merge two symbolmatrices' do
|
124
143
|
sm = SymbolMatrix.new a: "hola"
|
125
144
|
result = sm.recursive_merge SymbolMatrix.new b: "chau"
|
@@ -171,6 +190,25 @@ describe SymbolMatrix do
|
|
171
190
|
end
|
172
191
|
|
173
192
|
describe '#recursive_merge!' do
|
193
|
+
it 'should raise a relevant error when the two matrices collide' do
|
194
|
+
sm = SymbolMatrix a: "hola"
|
195
|
+
expect { sm.recursive_merge! SymbolMatrix a: "hey"
|
196
|
+
}.to raise_error SymbolMatrix::MergeError,
|
197
|
+
"The value of the :a key is already defined. Run recursive merge with flag true if you want it to override"
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'should override on collide if the override flag is on' do
|
201
|
+
sm = SymbolMatrix a: "hola"
|
202
|
+
sm.recursive_merge! SymbolMatrix(a: "hey"), true
|
203
|
+
sm.a.should == "hey"
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'should send the override directive into the recursion' do
|
207
|
+
sm = SymbolMatrix a: { b: "hola" }
|
208
|
+
sm.recursive_merge! SymbolMatrix( a: { b: "hey" } ), true
|
209
|
+
sm.a.b.should == "hey"
|
210
|
+
end
|
211
|
+
|
174
212
|
it 'should merge a symbolmatrix into this' do
|
175
213
|
sm = SymbolMatrix.new a: "hola"
|
176
214
|
sm.recursive_merge! SymbolMatrix.new b: "chau"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: symbolmatrix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: discoverer
|