configatron 1.1.0 → 1.2.0

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.
data/README CHANGED
@@ -31,6 +31,21 @@ becomes:
31
31
 
32
32
  Notice how our other configuration parameters haven't changed? Cool, eh?
33
33
 
34
+ ===Hash/YAML
35
+ You can configure configatron from a hash as well:
36
+
37
+ configatron.configure_from_hash({:email => {:pop => {:address => 'pop.example.com', :port => 110}}, :smtp => {:address => 'smtp.example.com'}})
38
+
39
+ configatron.email.pop.address # => 'pop.example.com'
40
+ configatron.email.pop.port # => 110
41
+ # and so on...
42
+
43
+ Notice how they're all namespaced for your as well. The same holds true for YAML files:
44
+
45
+ configuration.configure_from_yaml('/path/to/file.yml')
46
+
47
+ When the 'reload' method is called on configatron then the YAML file will be re-read in case changes have been made.
48
+
34
49
  ===Namespaces
35
50
 
36
51
  The question that should be on your lips is what I need to have namespaced configuration parameters. It's easy! Configatron allows you to create namespaces.
@@ -60,6 +75,19 @@ becomes:
60
75
 
61
76
  Configatron allows you to nest namespaces to your hearts content! Just keep going, it's that easy.
62
77
 
78
+ Of course you can update a single parameter n levels deep as well:
79
+
80
+ configatron do |config|
81
+ config.namespace(:email) do |email|
82
+ email.namespace(:pop) do |pop|
83
+ pop.address = "pop2.example.com"
84
+ end
85
+ end
86
+ end
87
+
88
+ configatron.email.pop.address # => "pop2.example.com"
89
+ configatron.email.smtp.address # => "smtp.example.com"
90
+
63
91
  Enjoy!
64
92
 
65
93
  ==Contact
@@ -55,8 +55,8 @@
55
55
  <tr class="top-aligned-row">
56
56
  <td><strong>In:</strong></td>
57
57
  <td>
58
- <a href="../../files/lib/configuration_rb.html">
59
- lib/configuration.rb
58
+ <a href="../../files/lib/configatron/configuration_rb.html">
59
+ lib/configatron/configuration.rb
60
60
  </a>
61
61
  <br />
62
62
  </td>
@@ -163,7 +163,7 @@ Yields a new <a href="Store.html">Configatron::Store</a> class.
163
163
  onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
164
164
  <div class="method-source-code" id="M000010-source">
165
165
  <pre>
166
- <span class="ruby-comment cmt"># File lib/configuration.rb, line 18</span>
166
+ <span class="ruby-comment cmt"># File lib/configatron/configuration.rb, line 18</span>
167
167
  18: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">configure</span>
168
168
  19: <span class="ruby-identifier">storage</span> = <span class="ruby-constant">Configatron</span><span class="ruby-operator">::</span><span class="ruby-constant">Store</span>.<span class="ruby-identifier">new</span>
169
169
  20: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">storage</span>
@@ -194,7 +194,7 @@ Used to load configuration settings from a Hash.
194
194
  onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
195
195
  <div class="method-source-code" id="M000011-source">
196
196
  <pre>
197
- <span class="ruby-comment cmt"># File lib/configuration.rb, line 28</span>
197
+ <span class="ruby-comment cmt"># File lib/configatron/configuration.rb, line 28</span>
198
198
  28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">configure_from_hash</span>(<span class="ruby-identifier">parameters</span>)
199
199
  29: <span class="ruby-identifier">storage</span> = <span class="ruby-constant">Configatron</span><span class="ruby-operator">::</span><span class="ruby-constant">Store</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">parameters</span>)
200
200
  30: <span class="ruby-ivar">@_storage_list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">storage</span>
@@ -222,7 +222,7 @@ Used to load configuration settings from a YAML file.
222
222
  onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
223
223
  <div class="method-source-code" id="M000012-source">
224
224
  <pre>
225
- <span class="ruby-comment cmt"># File lib/configuration.rb, line 35</span>
225
+ <span class="ruby-comment cmt"># File lib/configatron/configuration.rb, line 35</span>
226
226
  35: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">configure_from_yaml</span>(<span class="ruby-identifier">path</span>)
227
227
  36: <span class="ruby-keyword kw">begin</span>
228
228
  37: <span class="ruby-identifier">storage</span> = <span class="ruby-constant">Configatron</span><span class="ruby-operator">::</span><span class="ruby-constant">YamlStore</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">path</span>)
@@ -255,7 +255,7 @@ Replays the history of configurations.
255
255
  onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
256
256
  <div class="method-source-code" id="M000013-source">
257
257
  <pre>
258
- <span class="ruby-comment cmt"># File lib/configuration.rb, line 47</span>
258
+ <span class="ruby-comment cmt"># File lib/configatron/configuration.rb, line 47</span>
259
259
  47: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reload</span>
260
260
  48: <span class="ruby-ivar">@_storage_list</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">storage</span><span class="ruby-operator">|</span>
261
261
  49: <span class="ruby-identifier">storage</span>.<span class="ruby-identifier">reload</span>
@@ -284,7 +284,7 @@ All methods are undefined.
284
284
  onclick="toggleCode('M000015-source');return false;">[Source]</a></p>
285
285
  <div class="method-source-code" id="M000015-source">
286
286
  <pre>
287
- <span class="ruby-comment cmt"># File lib/configuration.rb, line 64</span>
287
+ <span class="ruby-comment cmt"># File lib/configatron/configuration.rb, line 64</span>
288
288
  64: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reset</span>
289
289
  65: <span class="ruby-ivar">@_storage_list</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">storage</span><span class="ruby-operator">|</span>
290
290
  66: <span class="ruby-identifier">storage</span>.<span class="ruby-identifier">parameters</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
@@ -323,7 +323,7 @@ to false.
323
323
  onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
324
324
  <div class="method-source-code" id="M000014-source">
325
325
  <pre>
326
- <span class="ruby-comment cmt"># File lib/configuration.rb, line 57</span>
326
+ <span class="ruby-comment cmt"># File lib/configatron/configuration.rb, line 57</span>
327
327
  57: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reset!</span>
328
328
  58: <span class="ruby-identifier">reset</span>
329
329
  59: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">nil_for_missing</span> = <span class="ruby-keyword kw">false</span>
@@ -351,7 +351,7 @@ Peels back n number of configuration parameters.
351
351
  onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
352
352
  <div class="method-source-code" id="M000016-source">
353
353
  <pre>
354
- <span class="ruby-comment cmt"># File lib/configuration.rb, line 78</span>
354
+ <span class="ruby-comment cmt"># File lib/configatron/configuration.rb, line 78</span>
355
355
  78: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">revert</span>(<span class="ruby-identifier">step</span> = <span class="ruby-value">1</span>)
356
356
  79: <span class="ruby-identifier">reset</span>
357
357
  80: <span class="ruby-identifier">step</span>.<span class="ruby-identifier">times</span> {<span class="ruby-ivar">@_storage_list</span>.<span class="ruby-identifier">pop</span>}
@@ -55,8 +55,8 @@
55
55
  <tr class="top-aligned-row">
56
56
  <td><strong>In:</strong></td>
57
57
  <td>
58
- <a href="../../files/lib/helpers_rb.html">
59
- lib/helpers.rb
58
+ <a href="../../files/lib/configatron/helpers_rb.html">
59
+ lib/configatron/helpers.rb
60
60
  </a>
61
61
  <br />
62
62
  </td>
@@ -120,7 +120,7 @@ Checks whether or not configuration parameter exists.
120
120
  onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
121
121
  <div class="method-source-code" id="M000001-source">
122
122
  <pre>
123
- <span class="ruby-comment cmt"># File lib/helpers.rb, line 5</span>
123
+ <span class="ruby-comment cmt"># File lib/configatron/helpers.rb, line 5</span>
124
124
  5: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">name</span>)
125
125
  6: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">name</span>)
126
126
  7: <span class="ruby-keyword kw">end</span>
@@ -148,7 +148,7 @@ exist.
148
148
  onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
149
149
  <div class="method-source-code" id="M000002-source">
150
150
  <pre>
151
- <span class="ruby-comment cmt"># File lib/helpers.rb, line 20</span>
151
+ <span class="ruby-comment cmt"># File lib/configatron/helpers.rb, line 20</span>
152
152
  20: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">retrieve</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">default_value</span> = <span class="ruby-constant">ArgumentError</span>)
153
153
  21: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">name</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">name</span>)
154
154
  22: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">default_value</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">default_value</span> <span class="ruby-operator">==</span> <span class="ruby-constant">ArgumentError</span>
@@ -55,8 +55,8 @@
55
55
  <tr class="top-aligned-row">
56
56
  <td><strong>In:</strong></td>
57
57
  <td>
58
- <a href="../../files/lib/store_rb.html">
59
- lib/store.rb
58
+ <a href="../../files/lib/configatron/store_rb.html">
59
+ lib/configatron/store.rb
60
60
  </a>
61
61
  <br />
62
62
  </td>
@@ -158,10 +158,14 @@ Takes an optional Hash to configure parameters.
158
158
  onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
159
159
  <div class="method-source-code" id="M000003-source">
160
160
  <pre>
161
- <span class="ruby-comment cmt"># File lib/store.rb, line 10</span>
161
+ <span class="ruby-comment cmt"># File lib/configatron/store.rb, line 10</span>
162
162
  10: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">parameters</span> = {})
163
- 11: <span class="ruby-ivar">@parameters</span> = <span class="ruby-identifier">parameters</span>
164
- 12: <span class="ruby-keyword kw">end</span>
163
+ 11: <span class="ruby-ivar">@parameters</span> = <span class="ruby-identifier">parameters</span>.<span class="ruby-identifier">inject</span>({}) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">m</span>,<span class="ruby-identifier">pair</span><span class="ruby-operator">|</span>
164
+ 12: <span class="ruby-identifier">sym</span> = <span class="ruby-identifier">pair</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Symbol</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">pair</span>.<span class="ruby-identifier">first</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pair</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">intern</span>
165
+ 13: <span class="ruby-identifier">m</span>[<span class="ruby-identifier">sym</span>] = <span class="ruby-identifier">pair</span>.<span class="ruby-identifier">last</span>
166
+ 14: <span class="ruby-identifier">m</span>
167
+ 15: <span class="ruby-keyword kw">end</span>
168
+ 16: <span class="ruby-keyword kw">end</span>
165
169
  </pre>
166
170
  </div>
167
171
  </div>
@@ -186,11 +190,11 @@ Checks whether or not configuration parameter exists.
186
190
  onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
187
191
  <div class="method-source-code" id="M000005-source">
188
192
  <pre>
189
- <span class="ruby-comment cmt"># File lib/store.rb, line 30</span>
190
- 30: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">name</span>)
191
- 31: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>].<span class="ruby-identifier">nil?</span>
192
- 32: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">name</span>)
193
- 33: <span class="ruby-keyword kw">end</span>
193
+ <span class="ruby-comment cmt"># File lib/configatron/store.rb, line 37</span>
194
+ 37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">name</span>)
195
+ 38: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>].<span class="ruby-identifier">nil?</span>
196
+ 39: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">name</span>)
197
+ 40: <span class="ruby-keyword kw">end</span>
194
198
  </pre>
195
199
  </div>
196
200
  </div>
@@ -217,16 +221,19 @@ from the parameters hash is returned, if it exists.
217
221
  onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
218
222
  <div class="method-source-code" id="M000004-source">
219
223
  <pre>
220
- <span class="ruby-comment cmt"># File lib/store.rb, line 19</span>
221
- 19: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">method_missing</span>(<span class="ruby-identifier">sym</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
222
- 20: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sym</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/(.+)=$/</span>)
223
- 21: <span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">sym</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">&quot;=&quot;</span>, <span class="ruby-value str">''</span>).<span class="ruby-identifier">to_sym</span>] = <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>
224
- 22: <span class="ruby-keyword kw">else</span>
225
- 23: <span class="ruby-identifier">val</span> = <span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">sym</span>]
226
- 24: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">val</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">nil?</span>
227
- 25: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">handle_missing_parameter</span>(<span class="ruby-identifier">sym</span>)
228
- 26: <span class="ruby-keyword kw">end</span>
229
- 27: <span class="ruby-keyword kw">end</span>
224
+ <span class="ruby-comment cmt"># File lib/configatron/store.rb, line 23</span>
225
+ 23: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">method_missing</span>(<span class="ruby-identifier">sym</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
226
+ 24: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sym</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/(.+)=$/</span>)
227
+ 25: <span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">sym</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">&quot;=&quot;</span>, <span class="ruby-value str">''</span>).<span class="ruby-identifier">to_sym</span>] = <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>
228
+ 26: <span class="ruby-keyword kw">else</span>
229
+ 27: <span class="ruby-identifier">val</span> = <span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">sym</span>]
230
+ 28: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Hash</span>
231
+ 29: <span class="ruby-identifier">val</span> = (<span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">sym</span>] = <span class="ruby-constant">Configatron</span><span class="ruby-operator">::</span><span class="ruby-constant">Store</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">val</span>))
232
+ 30: <span class="ruby-keyword kw">end</span>
233
+ 31: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">val</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">nil?</span>
234
+ 32: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">handle_missing_parameter</span>(<span class="ruby-identifier">sym</span>)
235
+ 33: <span class="ruby-keyword kw">end</span>
236
+ 34: <span class="ruby-keyword kw">end</span>
230
237
  </pre>
231
238
  </div>
232
239
  </div>
@@ -250,18 +257,18 @@ parameters.
250
257
  onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
251
258
  <div class="method-source-code" id="M000006-source">
252
259
  <pre>
253
- <span class="ruby-comment cmt"># File lib/store.rb, line 36</span>
254
- 36: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">namespace</span>(<span class="ruby-identifier">name</span>)
255
- 37: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">name</span>)
256
- 38: <span class="ruby-keyword kw">yield</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>)
257
- 39: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">configatron</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">name</span>)
258
- 40: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">configatron</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>)
259
- 41: <span class="ruby-keyword kw">else</span>
260
- 42: <span class="ruby-identifier">ns</span> = <span class="ruby-constant">Configatron</span><span class="ruby-operator">::</span><span class="ruby-constant">Store</span>.<span class="ruby-identifier">new</span>
261
- 43: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">ns</span>
262
- 44: <span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>] = <span class="ruby-identifier">ns</span>
263
- 45: <span class="ruby-keyword kw">end</span>
264
- 46: <span class="ruby-keyword kw">end</span>
260
+ <span class="ruby-comment cmt"># File lib/configatron/store.rb, line 43</span>
261
+ 43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">namespace</span>(<span class="ruby-identifier">name</span>)
262
+ 44: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">name</span>)
263
+ 45: <span class="ruby-keyword kw">yield</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>)
264
+ 46: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">configatron</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">name</span>)
265
+ 47: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">configatron</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>)
266
+ 48: <span class="ruby-keyword kw">else</span>
267
+ 49: <span class="ruby-identifier">ns</span> = <span class="ruby-constant">Configatron</span><span class="ruby-operator">::</span><span class="ruby-constant">Store</span>.<span class="ruby-identifier">new</span>
268
+ 50: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">ns</span>
269
+ 51: <span class="ruby-ivar">@parameters</span>[<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>] = <span class="ruby-identifier">ns</span>
270
+ 52: <span class="ruby-keyword kw">end</span>
271
+ 53: <span class="ruby-keyword kw">end</span>
265
272
  </pre>
266
273
  </div>
267
274
  </div>
@@ -286,9 +293,9 @@ etc&#8230;
286
293
  onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
287
294
  <div class="method-source-code" id="M000007-source">
288
295
  <pre>
289
- <span class="ruby-comment cmt"># File lib/store.rb, line 50</span>
290
- 50: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reload</span>
291
- 51: <span class="ruby-keyword kw">end</span>
296
+ <span class="ruby-comment cmt"># File lib/configatron/store.rb, line 57</span>
297
+ 57: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reload</span>
298
+ 58: <span class="ruby-keyword kw">end</span>
292
299
  </pre>
293
300
  </div>
294
301
  </div>
@@ -55,8 +55,8 @@
55
55
  <tr class="top-aligned-row">
56
56
  <td><strong>In:</strong></td>
57
57
  <td>
58
- <a href="../../files/lib/yaml_store_rb.html">
59
- lib/yaml_store.rb
58
+ <a href="../../files/lib/configatron/yaml_store_rb.html">
59
+ lib/configatron/yaml_store.rb
60
60
  </a>
61
61
  <br />
62
62
  </td>
@@ -148,7 +148,7 @@ Takes the full path to the YAML file.
148
148
  onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
149
149
  <div class="method-source-code" id="M000008-source">
150
150
  <pre>
151
- <span class="ruby-comment cmt"># File lib/yaml_store.rb, line 9</span>
151
+ <span class="ruby-comment cmt"># File lib/configatron/yaml_store.rb, line 9</span>
152
152
  9: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">file_location</span>)
153
153
  10: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">params_from_yaml</span>(<span class="ruby-identifier">file_location</span>))
154
154
  11: <span class="ruby-ivar">@file_location</span> = <span class="ruby-identifier">file_location</span>
@@ -177,7 +177,7 @@ Re-reads the YAML file.
177
177
  onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
178
178
  <div class="method-source-code" id="M000009-source">
179
179
  <pre>
180
- <span class="ruby-comment cmt"># File lib/yaml_store.rb, line 15</span>
180
+ <span class="ruby-comment cmt"># File lib/configatron/yaml_store.rb, line 15</span>
181
181
  15: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reload</span>
182
182
  16: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">file_location</span>
183
183
  17: <span class="ruby-identifier">params_from_yaml</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">file_location</span>)
@@ -55,8 +55,8 @@
55
55
  <tr class="top-aligned-row">
56
56
  <td><strong>In:</strong></td>
57
57
  <td>
58
- <a href="../files/lib/kernel_rb.html">
59
- lib/kernel.rb
58
+ <a href="../files/lib/configatron/kernel_rb.html">
59
+ lib/configatron/kernel.rb
60
60
  </a>
61
61
  <br />
62
62
  </td>
@@ -123,7 +123,7 @@ href="Configatron/Store.html">Configatron::Store</a> object.
123
123
  onclick="toggleCode('M000017-source');return false;">[Source]</a></p>
124
124
  <div class="method-source-code" id="M000017-source">
125
125
  <pre>
126
- <span class="ruby-comment cmt"># File lib/kernel.rb, line 6</span>
126
+ <span class="ruby-comment cmt"># File lib/configatron/kernel.rb, line 6</span>
127
127
  6: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">configatron</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
128
128
  7: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
129
129
  8: <span class="ruby-constant">Configatron</span><span class="ruby-operator">::</span><span class="ruby-constant">Configuration</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">configure</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
data/doc/created.rid CHANGED
@@ -1 +1 @@
1
- Thu, 04 Sep 2008 13:46:36 -0400
1
+ Mon, 08 Sep 2008 15:54:51 -0400
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Aug 29 12:07:47 -0400 2008</td>
59
+ <td>Mon Sep 08 15:54:42 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -120,6 +120,28 @@ becomes:
120
120
  Notice how our other configuration parameters haven&#8216;t changed? Cool,
121
121
  eh?
122
122
  </p>
123
+ <h3>Hash/YAML</h3>
124
+ <p>
125
+ You can configure configatron from a hash as well:
126
+ </p>
127
+ <pre>
128
+ configatron.configure_from_hash({:email =&gt; {:pop =&gt; {:address =&gt; 'pop.example.com', :port =&gt; 110}}, :smtp =&gt; {:address =&gt; 'smtp.example.com'}})
129
+
130
+ configatron.email.pop.address # =&gt; 'pop.example.com'
131
+ configatron.email.pop.port # =&gt; 110
132
+ # and so on...
133
+ </pre>
134
+ <p>
135
+ Notice how they&#8216;re all namespaced for your as well. The same holds
136
+ true for YAML files:
137
+ </p>
138
+ <pre>
139
+ configuration.configure_from_yaml('/path/to/file.yml')
140
+ </pre>
141
+ <p>
142
+ When the &#8216;reload&#8217; method is called on configatron then the YAML
143
+ file will be re-read in case changes have been made.
144
+ </p>
123
145
  <h3>Namespaces</h3>
124
146
  <p>
125
147
  The question that should be on your lips is what I need to have namespaced
@@ -157,6 +179,21 @@ Configatron allows you to nest namespaces to your hearts content! Just keep
157
179
  going, it&#8216;s that easy.
158
180
  </p>
159
181
  <p>
182
+ Of course you can update a single parameter n levels deep as well:
183
+ </p>
184
+ <pre>
185
+ configatron do |config|
186
+ config.namespace(:email) do |email|
187
+ email.namespace(:pop) do |pop|
188
+ pop.address = &quot;pop2.example.com&quot;
189
+ end
190
+ end
191
+ end
192
+
193
+ configatron.email.pop.address # =&gt; &quot;pop2.example.com&quot;
194
+ configatron.email.smtp.address # =&gt; &quot;smtp.example.com&quot;
195
+ </pre>
196
+ <p>
160
197
  Enjoy!
161
198
  </p>
162
199
  <h2>Contact</h2>
@@ -8,7 +8,7 @@
8
8
  <title>File: configuration.rb</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
12
  <script type="text/javascript">
13
13
  // <![CDATA[
14
14
 
@@ -51,12 +51,12 @@
51
51
  <table class="header-table">
52
52
  <tr class="top-aligned-row">
53
53
  <td><strong>Path:</strong></td>
54
- <td>lib/configuration.rb
54
+ <td>lib/configatron/configuration.rb
55
55
  </td>
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Thu Sep 04 11:12:56 -0400 2008</td>
59
+ <td>Mon Sep 08 15:47:41 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -8,7 +8,7 @@
8
8
  <title>File: helpers.rb</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
12
  <script type="text/javascript">
13
13
  // <![CDATA[
14
14
 
@@ -51,12 +51,12 @@
51
51
  <table class="header-table">
52
52
  <tr class="top-aligned-row">
53
53
  <td><strong>Path:</strong></td>
54
- <td>lib/helpers.rb
54
+ <td>lib/configatron/helpers.rb
55
55
  </td>
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Aug 29 12:12:51 -0400 2008</td>
59
+ <td>Mon Sep 08 14:47:48 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -8,7 +8,7 @@
8
8
  <title>File: kernel.rb</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
12
  <script type="text/javascript">
13
13
  // <![CDATA[
14
14
 
@@ -51,12 +51,12 @@
51
51
  <table class="header-table">
52
52
  <tr class="top-aligned-row">
53
53
  <td><strong>Path:</strong></td>
54
- <td>lib/kernel.rb
54
+ <td>lib/configatron/kernel.rb
55
55
  </td>
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Thu Jun 12 11:49:05 -0400 2008</td>
59
+ <td>Mon Sep 08 14:47:48 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -8,7 +8,7 @@
8
8
  <title>File: store.rb</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
12
  <script type="text/javascript">
13
13
  // <![CDATA[
14
14
 
@@ -51,12 +51,12 @@
51
51
  <table class="header-table">
52
52
  <tr class="top-aligned-row">
53
53
  <td><strong>Path:</strong></td>
54
- <td>lib/store.rb
54
+ <td>lib/configatron/store.rb
55
55
  </td>
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Thu Sep 04 11:16:41 -0400 2008</td>
59
+ <td>Mon Sep 08 15:47:41 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -8,7 +8,7 @@
8
8
  <title>File: yaml_store.rb</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
12
  <script type="text/javascript">
13
13
  // <![CDATA[
14
14
 
@@ -51,12 +51,12 @@
51
51
  <table class="header-table">
52
52
  <tr class="top-aligned-row">
53
53
  <td><strong>Path:</strong></td>
54
- <td>lib/yaml_store.rb
54
+ <td>lib/configatron/yaml_store.rb
55
55
  </td>
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Thu Sep 04 11:17:28 -0400 2008</td>
59
+ <td>Mon Sep 08 14:47:48 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Thu Sep 04 11:15:39 -0400 2008</td>
59
+ <td>Mon Sep 08 14:47:47 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -22,11 +22,11 @@
22
22
  <div id="index-entries">
23
23
  <a href="files/README.html">README</a><br />
24
24
  <a href="files/lib/configatron_rb.html">lib/configatron.rb</a><br />
25
- <a href="files/lib/configuration_rb.html">lib/configuration.rb</a><br />
26
- <a href="files/lib/helpers_rb.html">lib/helpers.rb</a><br />
27
- <a href="files/lib/kernel_rb.html">lib/kernel.rb</a><br />
28
- <a href="files/lib/store_rb.html">lib/store.rb</a><br />
29
- <a href="files/lib/yaml_store_rb.html">lib/yaml_store.rb</a><br />
25
+ <a href="files/lib/configatron/configuration_rb.html">lib/configatron/configuration.rb</a><br />
26
+ <a href="files/lib/configatron/helpers_rb.html">lib/configatron/helpers.rb</a><br />
27
+ <a href="files/lib/configatron/kernel_rb.html">lib/configatron/kernel.rb</a><br />
28
+ <a href="files/lib/configatron/store_rb.html">lib/configatron/store.rb</a><br />
29
+ <a href="files/lib/configatron/yaml_store_rb.html">lib/configatron/yaml_store.rb</a><br />
30
30
  </div>
31
31
  </div>
32
32
  </body>
@@ -91,6 +91,9 @@ module Configatron
91
91
  if k.is_a?(Configatron::Store)
92
92
  load_methods(k)
93
93
  else
94
+ if v.is_a?(Hash)
95
+ v = (store.parameters[k] = Configatron::Store.new(v))
96
+ end
94
97
  Configatron::Configuration.instance_eval do
95
98
  define_method(k) do
96
99
  v
File without changes
File without changes
@@ -8,7 +8,11 @@ module Configatron
8
8
 
9
9
  # Takes an optional Hash to configure parameters.
10
10
  def initialize(parameters = {})
11
- @parameters = parameters
11
+ @parameters = parameters.inject({}) do |m,pair|
12
+ sym = pair.first.is_a?(Symbol) ? pair.first : pair.first.intern
13
+ m[sym] = pair.last
14
+ m
15
+ end
12
16
  end
13
17
 
14
18
  # If a method is called with an = at the end, then that method name, minus
@@ -21,6 +25,9 @@ module Configatron
21
25
  @parameters[sym.to_s.gsub("=", '').to_sym] = *args
22
26
  else
23
27
  val = @parameters[sym]
28
+ if val.is_a? Hash
29
+ val = (@parameters[sym] = Configatron::Store.new(val))
30
+ end
24
31
  return val unless val.nil?
25
32
  return handle_missing_parameter(sym)
26
33
  end
File without changes
data/lib/configatron.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  require 'singleton'
2
2
  require 'yaml'
3
- require File.join(File.dirname(__FILE__), 'helpers')
4
- require File.join(File.dirname(__FILE__), 'kernel')
5
- require File.join(File.dirname(__FILE__), 'configuration')
6
- require File.join(File.dirname(__FILE__), 'store')
7
- require File.join(File.dirname(__FILE__), 'yaml_store')
3
+
4
+ require File.join(File.dirname(__FILE__), 'configatron', 'helpers')
5
+ require File.join(File.dirname(__FILE__), 'configatron', 'kernel')
6
+ require File.join(File.dirname(__FILE__), 'configatron', 'configuration')
7
+ require File.join(File.dirname(__FILE__), 'configatron', 'store')
8
+ require File.join(File.dirname(__FILE__), 'configatron', 'yaml_store')
8
9
 
9
10
  module Configatron # :nodoc:
10
11
  end
@@ -30,6 +30,62 @@ describe Configatron::Configuration do
30
30
 
31
31
  end
32
32
 
33
+ describe "hashes to namespace" do
34
+
35
+ before :each do
36
+ configatron.reset!
37
+ @futurama = File.join(File.dirname(__FILE__), 'futurama.yml')
38
+ FileUtils.rm_f(@futurama)
39
+ end
40
+
41
+ after :each do
42
+ FileUtils.rm_f(@futurama)
43
+ end
44
+
45
+ it "should namespace hashes from yaml" do
46
+
47
+ configatron.should_not respond_to(:cartoon)
48
+
49
+ File.open(@futurama, 'w') do |f|
50
+ f.puts %{
51
+ cartoon:
52
+ characters:
53
+ fry: human
54
+ leela: mutant
55
+ bender: robot
56
+ transportation: space ship
57
+ fans:
58
+ one: Mark Bates
59
+ two: Dylan Bates
60
+ }
61
+ end
62
+
63
+ configatron.configure_from_yaml(@futurama)
64
+
65
+ configatron.should respond_to(:cartoon)
66
+ configatron.cartoon.should be_an_instance_of(Configatron::Store)
67
+
68
+ configatron.cartoon.characters.fry.should == 'human'
69
+ configatron.cartoon.transportation.should == 'space ship'
70
+
71
+ end
72
+
73
+ it "should namespace hashes" do
74
+
75
+ configatron.should_not respond_to(:cartoon)
76
+
77
+ configatron.configure_from_hash({:cartoon => {:characters => {:fry => 'human', :leela => 'mutant', :bender => 'robot'}, :transportation => 'space ship'}, :fans => {:one => 'Mark Bates', :two => 'Dylan Bates'}})
78
+
79
+ configatron.should respond_to(:cartoon)
80
+ configatron.cartoon.should be_an_instance_of(Configatron::Store)
81
+
82
+ configatron.cartoon.characters.fry.should == 'human'
83
+ configatron.cartoon.transportation.should == 'space ship'
84
+
85
+ end
86
+
87
+ end
88
+
33
89
  describe "configure_from_yaml" do
34
90
 
35
91
  before :each do
@@ -55,7 +111,7 @@ describe Configatron::Configuration do
55
111
  configatron.lois.should == "Lois Griffin"
56
112
  end
57
113
 
58
- it "should silently file if the file doesn't exist" do
114
+ it "should silently fail if the file doesn't exist" do
59
115
  lambda {configatron.configure_from_yaml(File.join(File.dirname(__FILE__), 'i_dont_exist.yml'))}.should_not raise_error(Errno::ENOENT)
60
116
  end
61
117
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configatron
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - markbates
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-04 00:00:00 -04:00
12
+ date: 2008-09-08 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -22,12 +22,12 @@ extensions: []
22
22
  extra_rdoc_files:
23
23
  - README
24
24
  files:
25
+ - lib/configatron/configuration.rb
26
+ - lib/configatron/helpers.rb
27
+ - lib/configatron/kernel.rb
28
+ - lib/configatron/store.rb
29
+ - lib/configatron/yaml_store.rb
25
30
  - lib/configatron.rb
26
- - lib/configuration.rb
27
- - lib/helpers.rb
28
- - lib/kernel.rb
29
- - lib/store.rb
30
- - lib/yaml_store.rb
31
31
  - README
32
32
  - doc/classes/Configatron/Configuration.html
33
33
  - doc/classes/Configatron/Helpers.html
@@ -35,12 +35,12 @@ files:
35
35
  - doc/classes/Configatron/YamlStore.html
36
36
  - doc/classes/Kernel.html
37
37
  - doc/created.rid
38
+ - doc/files/lib/configatron/configuration_rb.html
39
+ - doc/files/lib/configatron/helpers_rb.html
40
+ - doc/files/lib/configatron/kernel_rb.html
41
+ - doc/files/lib/configatron/store_rb.html
42
+ - doc/files/lib/configatron/yaml_store_rb.html
38
43
  - doc/files/lib/configatron_rb.html
39
- - doc/files/lib/configuration_rb.html
40
- - doc/files/lib/helpers_rb.html
41
- - doc/files/lib/kernel_rb.html
42
- - doc/files/lib/store_rb.html
43
- - doc/files/lib/yaml_store_rb.html
44
44
  - doc/files/README.html
45
45
  - doc/fr_class_index.html
46
46
  - doc/fr_file_index.html