Skip to content

Commit 5a4d5e6

Browse files
committed
recursive configuration merge
1 parent 593bd50 commit 5a4d5e6

13 files changed

+175
-95
lines changed

.yardoc/checksums

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
lib/iqeo/configuration.rb df8997f10c38ea8ba74a6ccef3341c9126de3521
2-
lib/iqeo/configuration/version.rb ad9da77d4fb2220b3374e15340f7e014e0d7ee80
1+
lib/iqeo/configuration.rb fb776784916e7a38f6424d31f66a5da06b446532
2+
lib/iqeo/configuration/version.rb c2a9c241b633aea27196848bec6b5e9069315361

.yardoc/objects/root.dat

-438 Bytes
Binary file not shown.

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ conf.collect { |key,value| value } # => [ 1, 2.0, :three, 'four' ]
119119
* read from string, at creation, or after - merged & nested
120120
* load from filename, at creation, or after - merged & nested
121121
* defaults
122-
* merge configurations
122+
* merge configurations recursively
123123
* blank slate for DSL
124124

125125
## Fancy usage

doc/Iqeo.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ <h2>Constant Summary</h2>
115115
<dt id="CONFIGURATION_VERSION-constant" class="">CONFIGURATION_VERSION =
116116

117117
</dt>
118-
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>0.0.13</span><span class='tstring_end'>&quot;</span></span></pre></dd>
118+
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>1.0.1</span><span class='tstring_end'>&quot;</span></span></pre></dd>
119119

120120
</dl>
121121

@@ -131,7 +131,7 @@ <h2>Constant Summary</h2>
131131
</div>
132132

133133
<div id="footer">
134-
Generated on Tue May 15 23:15:18 2012 by
134+
Generated on Mon May 21 15:18:24 2012 by
135135
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
136136
0.8.1 (ruby-1.9.3).
137137
</div>

doc/Iqeo/BlankSlate.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ <h2>Direct Known Subclasses</h2>
115115
</div>
116116

117117
<div id="footer">
118-
Generated on Tue May 15 23:15:18 2012 by
118+
Generated on Mon May 21 15:18:24 2012 by
119119
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
120120
0.8.1 (ruby-1.9.3).
121121
</div>

doc/Iqeo/Configuration.html

+44-42
Original file line numberDiff line numberDiff line change
@@ -454,27 +454,19 @@ <h3 class="signature first" id="initialize-instance_method">
454454
98
455455
99
456456
100
457-
101
458-
102
459-
103
460-
104
461-
105</pre>
457+
101</pre>
462458
</td>
463459
<td>
464460
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 87</span>
465461

466462
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span> <span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span>
467-
<span class='comment'># todo: default immediate child Configurations should have _parent updated
468-
</span> <span class='ivar'>@_items</span> <span class='op'>=</span> <span class='kw'>case</span>
469-
<span class='kw'>when</span> <span class='id identifier rubyid_default'>default</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span> <span class='const'>HashWithIndifferentAccess</span> <span class='rparen'>)</span> <span class='kw'>then</span> <span class='id identifier rubyid_default'>default</span>
470-
<span class='kw'>when</span> <span class='id identifier rubyid_default'>default</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span> <span class='const'>Configuration</span> <span class='rparen'>)</span> <span class='kw'>then</span> <span class='id identifier rubyid_default'>default</span><span class='period'>.</span><span class='id identifier rubyid__items'>_items</span>
471-
<span class='kw'>else</span> <span class='const'>HashWithIndifferentAccess</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
472-
<span class='kw'>end</span>
463+
<span class='ivar'>@_items</span> <span class='op'>=</span> <span class='const'>HashWithIndifferentAccess</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
473464
<span class='ivar'>@_parent</span> <span class='op'>=</span> <span class='kw'>nil</span>
465+
<span class='id identifier rubyid__merge!'>_merge!</span> <span class='id identifier rubyid_default'>default</span> <span class='kw'>if</span> <span class='id identifier rubyid_default'>default</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span> <span class='const'>Configuration</span> <span class='rparen'>)</span>
474466
<span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
475-
<span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_arity'>arity</span> <span class='op'>&gt;</span> <span class='int'>0</span> <span class='comment'># cannot set parent for yield blocks here as self is wrong !?
476-
</span> <span class='kw'>yield</span> <span class='kw'>self</span>
477-
<span class='kw'>else</span>
467+
<span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_arity'>arity</span> <span class='op'>&gt;</span> <span class='int'>0</span> <span class='comment'># cannot set parent for yield block here as context is unknowable
468+
</span> <span class='kw'>yield</span> <span class='kw'>self</span> <span class='comment'># parent is being set in new_defer_block_for_parent
469+
</span> <span class='kw'>else</span>
478470
<span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_binding'>binding</span><span class='period'>.</span><span class='id identifier rubyid_eval'>eval</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>self</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span> <span class='const'>Configuration</span> <span class='rparen'>)</span> <span class='comment'># for eval block if nested configuration
479471
</span> <span class='ivar'>@_parent</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_binding'>binding</span><span class='period'>.</span><span class='id identifier rubyid_eval'>eval</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>self</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'># set parent to make inherited values available
480472
</span> <span class='kw'>end</span> <span class='comment'># during block execution
@@ -510,6 +502,10 @@ <h3 class="signature first" id="method_missing-instance_method">
510502
<pre class="lines">
511503

512504

505+
103
506+
104
507+
105
508+
106
513509
107
514510
108
515511
109
@@ -522,14 +518,10 @@ <h3 class="signature first" id="method_missing-instance_method">
522518
116
523519
117
524520
118
525-
119
526-
120
527-
121
528-
122
529-
123</pre>
521+
119</pre>
530522
</td>
531523
<td>
532-
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 107</span>
524+
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 103</span>
533525

534526
<span class='kw'>def</span> <span class='id identifier rubyid_method_missing'>method_missing</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_values'>values</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span>
535527
<span class='kw'>return</span> <span class='ivar'>@_items</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_values'>values</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@_items</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span> <span class='id identifier rubyid_name'>name</span> <span class='comment'># @_items methods are highest priority
@@ -821,12 +813,12 @@ <h3 class="signature first" id="_load-instance_method">
821813
<pre class="lines">
822814

823815

824-
152
825-
153
826-
154</pre>
816+
144
817+
145
818+
146</pre>
827819
</td>
828820
<td>
829-
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 152</span>
821+
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 144</span>
830822

831823
<span class='kw'>def</span> <span class='id identifier rubyid__load'>_load</span> <span class='id identifier rubyid_file'>file</span>
832824
<span class='id identifier rubyid__read'>_read</span> <span class='id identifier rubyid_file'>file</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:read</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_file'>file</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span> <span class='op'>:</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_file'>file</span><span class='rparen'>)</span>
@@ -851,17 +843,15 @@ <h3 class="signature " id="_merge-instance_method">
851843
<pre class="lines">
852844

853845

854-
162
855-
163
856-
164
857-
165</pre>
846+
160
847+
161
848+
162</pre>
858849
</td>
859850
<td>
860-
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 162</span>
851+
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 160</span>
861852

862853
<span class='kw'>def</span> <span class='id identifier rubyid__merge'>_merge</span> <span class='id identifier rubyid_other'>other</span>
863-
<span class='comment'># todo: merges should update _parent of any immediate child Configurations
864-
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span><span class='period'>.</span><span class='id identifier rubyid__merge!'>_merge!</span> <span class='id identifier rubyid_other'>other</span>
854+
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span><span class='period'>.</span><span class='id identifier rubyid__merge!'>_merge!</span> <span class='id identifier rubyid_other'>other</span>
865855
<span class='kw'>end</span></pre>
866856
</td>
867857
</tr>
@@ -883,18 +873,30 @@ <h3 class="signature " id="_merge!-instance_method">
883873
<pre class="lines">
884874

885875

876+
148
877+
149
878+
150
879+
151
880+
152
881+
153
882+
154
883+
155
886884
156
887885
157
888-
158
889-
159
890-
160</pre>
886+
158</pre>
891887
</td>
892888
<td>
893-
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 156</span>
889+
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 148</span>
894890

895891
<span class='kw'>def</span> <span class='id identifier rubyid__merge!'>_merge!</span> <span class='id identifier rubyid_other'>other</span>
896-
<span class='comment'># todo: merges should update _parent of any immediate child Configurations
897-
</span> <span class='ivar'>@_items</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid__items'>_items</span>
892+
<span class='ivar'>@_items</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span><span class='lparen'>(</span><span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid__items'>_items</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span><span class='id identifier rubyid_this'>this</span><span class='comma'>,</span><span class='id identifier rubyid_other'>other</span><span class='op'>|</span>
893+
<span class='kw'>if</span> <span class='id identifier rubyid_this'>this</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span> <span class='const'>Configuration</span> <span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span> <span class='const'>Configuration</span> <span class='rparen'>)</span>
894+
<span class='id identifier rubyid_this'>this</span><span class='period'>.</span><span class='id identifier rubyid__merge!'>_merge!</span> <span class='id identifier rubyid_other'>other</span>
895+
<span class='kw'>else</span>
896+
<span class='id identifier rubyid_other'>other</span>
897+
<span class='kw'>end</span>
898+
<span class='kw'>end</span>
899+
<span class='ivar'>@_items</span><span class='period'>.</span><span class='id identifier rubyid_values'>values</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid__parent'>_parent</span> <span class='op'>=</span> <span class='kw'>self</span> <span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span> <span class='const'>Configuration</span> <span class='rparen'>)</span> <span class='rbrace'>}</span>
898900
<span class='kw'>self</span>
899901
<span class='kw'>end</span></pre>
900902
</td>
@@ -917,12 +919,12 @@ <h3 class="signature " id="_read-instance_method">
917919
<pre class="lines">
918920

919921

920-
148
921-
149
922-
150</pre>
922+
140
923+
141
924+
142</pre>
923925
</td>
924926
<td>
925-
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 148</span>
927+
<pre class="code"><span class="info file"># File 'lib/iqeo/configuration.rb', line 140</span>
926928

927929
<span class='kw'>def</span> <span class='id identifier rubyid__read'>_read</span> <span class='id identifier rubyid_string'>string</span>
928930
<span class='id identifier rubyid_instance_eval'>instance_eval</span> <span class='id identifier rubyid_string'>string</span>
@@ -937,7 +939,7 @@ <h3 class="signature " id="_read-instance_method">
937939
</div>
938940

939941
<div id="footer">
940-
Generated on Tue May 15 23:15:18 2012 by
942+
Generated on Mon May 21 15:18:24 2012 by
941943
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
942944
0.8.1 (ruby-1.9.3).
943945
</div>

doc/_index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ <h2>Namespace Listing A-Z</h2>
131131
</div>
132132

133133
<div id="footer">
134-
Generated on Tue May 15 23:15:17 2012 by
134+
Generated on Mon May 21 15:18:24 2012 by
135135
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
136136
0.8.1 (ruby-1.9.3).
137137
</div>

doc/file.README.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ <h2>Features</h2>
176176
<li>read from string, at creation, or after - merged &amp; nested</li>
177177
<li>load from filename, at creation, or after - merged &amp; nested</li>
178178
<li>defaults</li>
179-
<li>merge configurations</li>
179+
<li>merge configurations recursively</li>
180180
<li>blank slate for DSL</li>
181181
</ul>
182182

@@ -197,7 +197,7 @@ <h2>License</h2>
197197
</div></div>
198198

199199
<div id="footer">
200-
Generated on Tue May 15 23:15:17 2012 by
200+
Generated on Mon May 21 15:18:24 2012 by
201201
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
202202
0.8.1 (ruby-1.9.3).
203203
</div>

doc/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ <h2>Features</h2>
176176
<li>read from string, at creation, or after - merged &amp; nested</li>
177177
<li>load from filename, at creation, or after - merged &amp; nested</li>
178178
<li>defaults</li>
179-
<li>merge configurations</li>
179+
<li>merge configurations recursively</li>
180180
<li>blank slate for DSL</li>
181181
</ul>
182182

@@ -197,7 +197,7 @@ <h2>License</h2>
197197
</div></div>
198198

199199
<div id="footer">
200-
Generated on Tue May 15 23:15:17 2012 by
200+
Generated on Mon May 21 15:18:24 2012 by
201201
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
202202
0.8.1 (ruby-1.9.3).
203203
</div>

doc/top-level-namespace.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ <h2>Defined Under Namespace</h2>
103103
</div>
104104

105105
<div id="footer">
106-
Generated on Tue May 15 23:15:18 2012 by
106+
Generated on Mon May 21 15:18:24 2012 by
107107
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
108108
0.8.1 (ruby-1.9.3).
109109
</div>

lib/iqeo/configuration.rb

+7-3
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,14 @@ def _load file
146146
end
147147

148148
def _merge! other
149-
@_items.merge! other._items
150-
@_items.values.each do |value|
151-
value._parent = self if value.kind_of?( Configuration )
149+
@_items.merge!(other._items) do |key,this,other|
150+
if this.kind_of?( Configuration ) && other.kind_of?( Configuration )
151+
this._merge! other
152+
else
153+
other
154+
end
152155
end
156+
@_items.values.each { |value| value._parent = self if value.kind_of?( Configuration ) }
153157
self
154158
end
155159

lib/iqeo/configuration/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module Iqeo
2-
CONFIGURATION_VERSION = "1.1.0"
2+
CONFIGURATION_VERSION = "1.0.1"
33
end

0 commit comments

Comments
 (0)