rconfig 0.3.3 → 0.4.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.
Files changed (74) hide show
  1. data/.gitignore +17 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +1 -0
  4. data/ChangeLog +50 -0
  5. data/Credits +13 -0
  6. data/Gemfile +9 -0
  7. data/Gemfile.lock +30 -0
  8. data/LICENSE.txt +20 -0
  9. data/README.rdoc +0 -0
  10. data/Rakefile +11 -0
  11. data/demo/application.conf +3 -0
  12. data/demo/demo.conf +13 -0
  13. data/demo/demo.rb +14 -0
  14. data/demo/demo.xml +13 -0
  15. data/demo/demo.yml +12 -0
  16. data/doc/classes/ClassVariables.html +111 -0
  17. data/doc/classes/ConfigError.html +120 -0
  18. data/doc/classes/ConfigHash.html +354 -0
  19. data/doc/classes/Constants.html +226 -0
  20. data/doc/classes/Hash.html +269 -0
  21. data/doc/classes/InvalidConfigPathError.html +119 -0
  22. data/doc/classes/Object.html +220 -0
  23. data/doc/classes/PropertiesFileParser.html +282 -0
  24. data/doc/classes/RConfig.html +1745 -0
  25. data/doc/created.rid +1 -0
  26. data/doc/files/README_rdoc.html +271 -0
  27. data/doc/files/lib/rconfig/class_variables_rb.html +107 -0
  28. data/doc/files/lib/rconfig/config_hash_rb.html +114 -0
  29. data/doc/files/lib/rconfig/constants_rb.html +101 -0
  30. data/doc/files/lib/rconfig/core_ext/hash_rb.html +114 -0
  31. data/doc/files/lib/rconfig/core_ext/object_rb.html +101 -0
  32. data/doc/files/lib/rconfig/core_ext_rb.html +114 -0
  33. data/doc/files/lib/rconfig/exceptions_rb.html +110 -0
  34. data/doc/files/lib/rconfig/properties_file_parser_rb.html +146 -0
  35. data/doc/files/lib/rconfig/rconfig_rb.html +186 -0
  36. data/doc/files/lib/rconfig_rb.html +117 -0
  37. data/doc/fr_class_index.html +35 -0
  38. data/doc/fr_file_index.html +37 -0
  39. data/doc/fr_method_index.html +75 -0
  40. data/doc/index.html +24 -0
  41. data/doc/rdoc-style.css +208 -0
  42. data/lib/generators/rconfig/install_generator.rb +13 -0
  43. data/lib/generators/rconfig/templates/rconfig.rb +82 -0
  44. data/lib/rconfig.rb +98 -32
  45. data/lib/rconfig/callbacks.rb +46 -0
  46. data/lib/rconfig/cascade.rb +56 -0
  47. data/lib/rconfig/config.rb +78 -0
  48. data/lib/rconfig/constants.rb +58 -0
  49. data/lib/rconfig/core_ext/array.rb +3 -0
  50. data/lib/rconfig/core_ext/hash.rb +56 -57
  51. data/lib/rconfig/core_ext/nil.rb +5 -0
  52. data/lib/rconfig/core_ext/string.rb +3 -0
  53. data/lib/rconfig/core_methods.rb +276 -0
  54. data/lib/rconfig/exceptions.rb +21 -8
  55. data/lib/rconfig/load_paths.rb +55 -0
  56. data/lib/rconfig/logger.rb +86 -0
  57. data/lib/rconfig/properties_file.rb +138 -0
  58. data/lib/rconfig/reload.rb +75 -0
  59. data/lib/rconfig/settings.rb +93 -0
  60. data/lib/rconfig/utils.rb +175 -0
  61. data/lib/tasks/gem.rake +14 -0
  62. data/lib/tasks/rdoc.rake +11 -0
  63. data/lib/tasks/spec.rake +25 -0
  64. data/rconfig.gemspec +33 -0
  65. data/spec/core_ext/object_spec.rb +44 -0
  66. data/spec/rconfig_spec.rb +7 -0
  67. data/spec/spec.opts +4 -0
  68. data/spec/spec_helper.rb +16 -0
  69. metadata +128 -32
  70. data/lib/rconfig/config_hash.rb +0 -105
  71. data/lib/rconfig/core_ext.rb +0 -6
  72. data/lib/rconfig/properties_file_parser.rb +0 -80
  73. data/lib/rconfig/rconfig.rb +0 -871
  74. data/test/rconfig_test.rb +0 -381
@@ -0,0 +1,282 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: PropertiesFileParser</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">PropertiesFileParser</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/rconfig/properties_file_parser_rb.html">
59
+ lib/rconfig/properties_file_parser.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Object.html">
69
+ Object
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+ <div id="description">
84
+ <p>
85
+ Copyright (c) 2009 Rahmal Conda &lt;rahmal@gmail.com&gt;
86
+ </p>
87
+ <p>
88
+ This class parses key/value based properties files used for configuration.
89
+ It is used by rconfig to import configuration files of the aforementioned
90
+ format. Unlike yaml, and xml files it can only support three levels. First,
91
+ it can have root level properties:
92
+ </p>
93
+ <pre>
94
+ server_url=host.domain.com
95
+ server_port=8080
96
+ </pre>
97
+ <p>
98
+ Secondly, it can have properties grouped into catagories. The group names
99
+ must be specified within brackets like [ &#8230; ]
100
+ </p>
101
+ <pre>
102
+ [server]
103
+ url=host.domain.com
104
+ port=8080
105
+ </pre>
106
+ <p>
107
+ Finally, groups can also be qualified with namespaces, similar to git
108
+ config files. Group names are same as before, but with namespace in within
109
+ the brackets like [ &lt;group&gt; &quot;&lt;name&gt;&quot; ]
110
+ </p>
111
+ <pre>
112
+ [host &quot;dev&quot;]
113
+ domain=dev.server.com
114
+
115
+ [host &quot;prod&quot;]
116
+ domain=www.server.com
117
+ </pre>
118
+ <p>
119
+ These can be retrieved using dot-notation or variable to do it dynamically.
120
+ </p>
121
+ <pre>
122
+ RConfig.props.host.dev.domain
123
+ - or -
124
+ RConfig.props.host[env].domain (where env is 'dev' or 'prod')
125
+ </pre>
126
+
127
+ </div>
128
+
129
+
130
+ </div>
131
+
132
+ <div id="method-list">
133
+ <h3 class="section-bar">Methods</h3>
134
+
135
+ <div class="name-list">
136
+ <a href="#M000003">parse</a>&nbsp;&nbsp;
137
+ </div>
138
+ </div>
139
+
140
+ </div>
141
+
142
+
143
+ <!-- if includes -->
144
+ <div id="includes">
145
+ <h3 class="section-bar">Included Modules</h3>
146
+
147
+ <div id="includes-list">
148
+ <span class="include-name">Singleton</span>
149
+ </div>
150
+ </div>
151
+
152
+ <div id="section">
153
+
154
+
155
+ <div id="constants-list">
156
+ <h3 class="section-bar">Constants</h3>
157
+
158
+ <div class="name-list">
159
+ <table summary="Constants">
160
+ <tr class="top-aligned-row context-row">
161
+ <td class="context-item-name">COMMENT</td>
162
+ <td>=</td>
163
+ <td class="context-item-value">/^\#/</td>
164
+ </tr>
165
+ <tr class="top-aligned-row context-row">
166
+ <td class="context-item-name">KEYVAL</td>
167
+ <td>=</td>
168
+ <td class="context-item-value">/\s*=\s*/</td>
169
+ </tr>
170
+ <tr class="top-aligned-row context-row">
171
+ <td class="context-item-name">QUOTES</td>
172
+ <td>=</td>
173
+ <td class="context-item-value">/^['&quot;](.*)['&quot;]$/</td>
174
+ </tr>
175
+ <tr class="top-aligned-row context-row">
176
+ <td class="context-item-name">GROUP</td>
177
+ <td>=</td>
178
+ <td class="context-item-value">/^\[(.+)\]$/</td>
179
+ </tr>
180
+ <tr class="top-aligned-row context-row">
181
+ <td class="context-item-name">NAMEGRP</td>
182
+ <td>=</td>
183
+ <td class="context-item-value">/^\[(.+) \&quot;(.+)\&quot;\]$/</td>
184
+ </tr>
185
+ </table>
186
+ </div>
187
+ </div>
188
+
189
+
190
+
191
+
192
+
193
+
194
+ <!-- if method_list -->
195
+ <div id="methods">
196
+ <h3 class="section-bar">Public Class methods</h3>
197
+
198
+ <div id="method-M000003" class="method-detail">
199
+ <a name="M000003"></a>
200
+
201
+ <div class="method-heading">
202
+ <a href="#M000003" class="method-signature">
203
+ <span class="method-name">parse</span><span class="method-args">(config_file)</span>
204
+ </a>
205
+ </div>
206
+
207
+ <div class="method-description">
208
+ <p>
209
+ Parse config file and import data into hash to be stored in config.
210
+ </p>
211
+ <p><a class="source-toggle" href="#"
212
+ onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
213
+ <div class="method-source-code" id="M000003-source">
214
+ <pre>
215
+ <span class="ruby-comment cmt"># File lib/rconfig/properties_file_parser.rb, line 47</span>
216
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse</span> <span class="ruby-identifier">config_file</span>
217
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'Invalid config file name.'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">config_file</span>
218
+
219
+ <span class="ruby-identifier">config</span> = {}
220
+
221
+ <span class="ruby-comment cmt"># The config is top down.. anything after a [group] gets added as part</span>
222
+ <span class="ruby-comment cmt"># of that group until a new [group] is found. </span>
223
+ <span class="ruby-identifier">group</span>, <span class="ruby-identifier">topgrp</span> = <span class="ruby-keyword kw">nil</span>
224
+ <span class="ruby-identifier">config_file</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> <span class="ruby-comment cmt"># for each line in the config file</span>
225
+ <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip!</span>
226
+ <span class="ruby-keyword kw">unless</span> (<span class="ruby-constant">COMMENT</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>)) <span class="ruby-comment cmt"># skip comments (lines that state with '#')</span>
227
+ <span class="ruby-keyword kw">if</span>(<span class="ruby-constant">KEYVAL</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>)) <span class="ruby-comment cmt"># if this line is a config property</span>
228
+ <span class="ruby-identifier">key</span>, <span class="ruby-identifier">val</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">split</span>(<span class="ruby-constant">KEYVAL</span>, <span class="ruby-value">2</span>) <span class="ruby-comment cmt"># parse key and value from line</span>
229
+ <span class="ruby-identifier">key</span> = <span class="ruby-identifier">key</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">strip</span>
230
+ <span class="ruby-identifier">val</span> = <span class="ruby-identifier">val</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">strip</span>
231
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">val</span>)
232
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">val</span> <span class="ruby-operator">=~</span> <span class="ruby-constant">QUOTES</span> <span class="ruby-comment cmt"># if the value is in quotes</span>
233
+ <span class="ruby-identifier">value</span> = <span class="ruby-identifier">$1</span> <span class="ruby-comment cmt"># strip out value from quotes</span>
234
+ <span class="ruby-keyword kw">else</span>
235
+ <span class="ruby-identifier">value</span> = <span class="ruby-identifier">val</span> <span class="ruby-comment cmt"># otherwise, leave as-is</span>
236
+ <span class="ruby-keyword kw">end</span>
237
+ <span class="ruby-keyword kw">else</span>
238
+ <span class="ruby-identifier">value</span> = <span class="ruby-value str">''</span> <span class="ruby-comment cmt"># if value was nil, set it to empty string</span>
239
+ <span class="ruby-keyword kw">end</span>
240
+
241
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">topgrp</span> <span class="ruby-comment cmt"># If there was a top-level named group</span>
242
+ <span class="ruby-identifier">config</span>[<span class="ruby-identifier">topgrp</span>][<span class="ruby-identifier">group</span>][<span class="ruby-identifier">key</span>] = <span class="ruby-comment cmt"># then there must be a group.</span>
243
+ <span class="ruby-identifier">value</span> <span class="ruby-comment cmt"># add the prop to the named group</span>
244
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">group</span> <span class="ruby-comment cmt"># if this property is part of a group</span>
245
+ <span class="ruby-identifier">config</span>[<span class="ruby-identifier">group</span>][<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">value</span> <span class="ruby-comment cmt"># then add it to the group</span>
246
+ <span class="ruby-keyword kw">else</span>
247
+ <span class="ruby-identifier">config</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">value</span> <span class="ruby-comment cmt"># otherwise, add it to top-level config</span>
248
+ <span class="ruby-keyword kw">end</span>
249
+
250
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">match</span> = <span class="ruby-constant">NAMEGRP</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>) <span class="ruby-comment cmt"># This line is a named group (i.e. [env &quot;test&quot;], [env &quot;qa&quot;], [env &quot;production&quot;])</span>
251
+ <span class="ruby-identifier">topgrp</span>, <span class="ruby-identifier">group</span> = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">to_a</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>] <span class="ruby-comment cmt"># There can be multiple groups within a single top-level group</span>
252
+ <span class="ruby-identifier">config</span>[<span class="ruby-identifier">topgrp</span>] <span class="ruby-operator">||=</span> {} <span class="ruby-comment cmt"># add group to top-level group</span>
253
+ <span class="ruby-identifier">config</span>[<span class="ruby-identifier">topgrp</span>][<span class="ruby-identifier">group</span>] <span class="ruby-operator">||=</span> {} <span class="ruby-comment cmt"># add name of group as subgroup (properties are added to subgroup)</span>
254
+
255
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">match</span> = <span class="ruby-constant">GROUP</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>) <span class="ruby-comment cmt"># if this line is a config group</span>
256
+ <span class="ruby-identifier">group</span> = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">to_a</span>[<span class="ruby-value">1</span>] <span class="ruby-comment cmt"># parse the group name from line</span>
257
+ <span class="ruby-identifier">topgrp</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-comment cmt"># we got a new group with no namespace, so reset topgrp</span>
258
+ <span class="ruby-identifier">config</span>[<span class="ruby-identifier">group</span>] <span class="ruby-operator">||=</span> {} <span class="ruby-comment cmt"># add group to top-level config</span>
259
+ <span class="ruby-keyword kw">end</span>
260
+ <span class="ruby-keyword kw">end</span>
261
+ <span class="ruby-keyword kw">end</span>
262
+
263
+ <span class="ruby-identifier">config</span> <span class="ruby-comment cmt"># return config hash</span>
264
+ <span class="ruby-keyword kw">end</span>
265
+ </pre>
266
+ </div>
267
+ </div>
268
+ </div>
269
+
270
+
271
+ </div>
272
+
273
+
274
+ </div>
275
+
276
+
277
+ <div id="validator-badges">
278
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
279
+ </div>
280
+
281
+ </body>
282
+ </html>
@@ -0,0 +1,1745 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: RConfig</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">RConfig</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/rconfig/rconfig_rb.html">
59
+ lib/rconfig/rconfig.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Object.html">
69
+ Object
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+ <div id="description">
84
+ <p>
85
+ Copyright (c) 2009 Rahmal Conda &lt;rahmal@gmail.com&gt;
86
+ </p>
87
+ <hr size="10"></hr><p>
88
+ The complete solution for Ruby Configuration Management. <a
89
+ href="RConfig.html">RConfig</a> is a Ruby library that manages
90
+ configuration within Ruby applications. It bridges the gap between yaml,
91
+ xml, and key/value based properties files, by providing a centralized
92
+ solution to handle application configuration from one location. It provides
93
+ the simplicity of hash-based access, that Rubyists have come to know and
94
+ love, supporting your configuration style of choice, while providing many
95
+ new features, and an elegant API.
96
+ </p>
97
+ <hr size="10"></hr><ul>
98
+ <li>Simple, easy to install and use.
99
+
100
+ </li>
101
+ <li>Supports yaml, xml, and properties files.
102
+
103
+ </li>
104
+ <li>Yaml and xml files supprt infinite level of configuration grouping.
105
+
106
+ </li>
107
+ <li>Intuitive dot-notation &#8216;key chaining&#8217; argument access.
108
+
109
+ </li>
110
+ <li>Simple well-known hash/array based argument access.
111
+
112
+ </li>
113
+ <li>Implements multilevel caching to reduce disk access.
114
+
115
+ </li>
116
+ <li>Short-hand access to &#8216;global&#8217; application configuration, and
117
+ shell environment.
118
+
119
+ </li>
120
+ <li>Overlays multiple configuration files to support environment, host, and
121
+ even locale-specific configuration.
122
+
123
+ </li>
124
+ </ul>
125
+ <hr size="10"></hr><pre>
126
+ The overlay order of the config files is defined by SUFFIXES:
127
+ * nil
128
+ * _local
129
+ * _config
130
+ * _local_config
131
+ * _{environment} (.i.e _development)
132
+ * _{environment}_local (.i.e _development_local)
133
+ * _{hostname} (.i.e _whiskey)
134
+ * _{hostname}_config_local (.i.e _whiskey_config_local)
135
+ </pre>
136
+ <hr size="10"></hr><p>
137
+ Example:
138
+ </p>
139
+ <pre>
140
+ shell/console =&gt;
141
+ export LANG=en
142
+
143
+ demo.yml =&gt;
144
+ server:
145
+ address: host.domain.com
146
+ port: 81
147
+ ...
148
+
149
+ application.properties =&gt;
150
+ debug_level = verbose
151
+ ...
152
+ </pre>
153
+ <p>
154
+ demo.rb =&gt;
155
+ </p>
156
+ <pre>
157
+ require 'rconfig'
158
+ RConfig.config_paths = ['$HOME/config', '#{APP_ROOT}/config', '/demo/conf']
159
+ RConfig.demo[:server][:port] =&gt; 81
160
+ RConfig.demo.server.address =&gt; 'host.domain.com'
161
+
162
+ RConfig[:debug_level] =&gt; 'verbose'
163
+ RConfig[:lang] =&gt; 'en'
164
+ ...
165
+ </pre>
166
+
167
+ </div>
168
+
169
+
170
+ </div>
171
+
172
+ <div id="method-list">
173
+ <h3 class="section-bar">Methods</h3>
174
+
175
+ <div class="name-list">
176
+ <a href="#M000030">[]</a>&nbsp;&nbsp;
177
+ <a href="#M000042">[]</a>&nbsp;&nbsp;
178
+ <a href="#M000034">allow_reload=</a>&nbsp;&nbsp;
179
+ <a href="#M000026">check_config_changed</a>&nbsp;&nbsp;
180
+ <a href="#M000024">config_changed?</a>&nbsp;&nbsp;
181
+ <a href="#M000045">config_file_loaded</a>&nbsp;&nbsp;
182
+ <a href="#M000044">config_file_loaded=</a>&nbsp;&nbsp;
183
+ <a href="#M000023">config_files</a>&nbsp;&nbsp;
184
+ <a href="#M000027">config_has_changed?</a>&nbsp;&nbsp;
185
+ <a href="#M000025">config_hash</a>&nbsp;&nbsp;
186
+ <a href="#M000015">config_paths</a>&nbsp;&nbsp;
187
+ <a href="#M000013">config_paths=</a>&nbsp;&nbsp;
188
+ <a href="#M000016">config_paths_set?</a>&nbsp;&nbsp;
189
+ <a href="#M000039">create_dottable_hash</a>&nbsp;&nbsp;
190
+ <a href="#M000038">disable_reload</a>&nbsp;&nbsp;
191
+ <a href="#M000048">filename_for_name</a>&nbsp;&nbsp;
192
+ <a href="#M000046">fire_on_load</a>&nbsp;&nbsp;
193
+ <a href="#M000047">flush_cache</a>&nbsp;&nbsp;
194
+ <a href="#M000032">get_config_file</a>&nbsp;&nbsp;
195
+ <a href="#M000022">get_config_files</a>&nbsp;&nbsp;
196
+ <a href="#M000012">initialize</a>&nbsp;&nbsp;
197
+ <a href="#M000020">load_config_files</a>&nbsp;&nbsp;
198
+ <a href="#M000029">make_indifferent</a>&nbsp;&nbsp;
199
+ <a href="#M000028">merge_hashes</a>&nbsp;&nbsp;
200
+ <a href="#M000040">method_missing</a>&nbsp;&nbsp;
201
+ <a href="#M000041">method_missing</a>&nbsp;&nbsp;
202
+ <a href="#M000033">on_load</a>&nbsp;&nbsp;
203
+ <a href="#M000017">overlay</a>&nbsp;&nbsp;
204
+ <a href="#M000018">overlay=</a>&nbsp;&nbsp;
205
+ <a href="#M000021">parse_file</a>&nbsp;&nbsp;
206
+ <a href="#M000037">reload</a>&nbsp;&nbsp;
207
+ <a href="#M000035">reload?</a>&nbsp;&nbsp;
208
+ <a href="#M000036">reload_interval=</a>&nbsp;&nbsp;
209
+ <a href="#M000014">set_config_path</a>&nbsp;&nbsp;
210
+ <a href="#M000019">suffixes</a>&nbsp;&nbsp;
211
+ <a href="#M000043">verbose=</a>&nbsp;&nbsp;
212
+ <a href="#M000049">verbose_log</a>&nbsp;&nbsp;
213
+ <a href="#M000031">with_file</a>&nbsp;&nbsp;
214
+ </div>
215
+ </div>
216
+
217
+ </div>
218
+
219
+
220
+ <!-- if includes -->
221
+ <div id="includes">
222
+ <h3 class="section-bar">Included Modules</h3>
223
+
224
+ <div id="includes-list">
225
+ <span class="include-name">Singleton</span>
226
+ <span class="include-name"><a href="Constants.html">Constants</a></span>
227
+ <span class="include-name"><a href="ClassVariables.html">ClassVariables</a></span>
228
+ </div>
229
+ </div>
230
+
231
+ <div id="section">
232
+
233
+
234
+
235
+ <div id="aliases-list">
236
+ <h3 class="section-bar">External Aliases</h3>
237
+
238
+ <div class="name-list">
239
+ <table summary="aliases">
240
+ <tr class="top-aligned-row context-row">
241
+ <td class="context-item-name">config_paths=</td>
242
+ <td>-&gt;</td>
243
+ <td class="context-item-value">set_config_paths</td>
244
+ </tr>
245
+ <tr class="top-aligned-row context-row">
246
+ <td class="context-item-name">set_config_path</td>
247
+ <td>-&gt;</td>
248
+ <td class="context-item-value">add_config_path</td>
249
+ </tr>
250
+ </table>
251
+ </div>
252
+ </div>
253
+
254
+
255
+
256
+
257
+
258
+ <!-- if method_list -->
259
+ <div id="methods">
260
+ <h3 class="section-bar">Public Class methods</h3>
261
+
262
+ <div id="method-M000030" class="method-detail">
263
+ <a name="M000030"></a>
264
+
265
+ <div class="method-heading">
266
+ <a href="#M000030" class="method-signature">
267
+ <span class="method-name">[]</span><span class="method-args">(key, file=:application)</span>
268
+ </a>
269
+ </div>
270
+
271
+ <div class="method-description">
272
+ <p>
273
+ This method provides shorthand to retrieve confiuration data that is global
274
+ in scope, and used on an application or environment-wide level. The default
275
+ location that it checks is the application file. The application config
276
+ file is a special config file that should be used for config data that is
277
+ broad in scope and used throughout the application. Since <a
278
+ href="RConfig.html">RConfig</a> gives special regard to the application
279
+ config file, thought should be given to whatever config information is
280
+ placed there.
281
+ </p>
282
+ <p>
283
+ Most config data will be specific to particular part of the application
284
+ (i.e. database, web service), and should therefore be placed in its own
285
+ specific config file, such as database.yml, or services.xml
286
+ </p>
287
+ <p>
288
+ This method also acts as a wrapper for ENV. If no value is returned from
289
+ the application config, it will also check ENV for a value matching the
290
+ specified key.
291
+ </p>
292
+ <p>
293
+ Ex.1 <a href="RConfig.html">RConfig</a>[:test_mode] =&gt;
294
+ </p>
295
+ <pre>
296
+ RConfig.application[:test_mode] ||
297
+ RConfig.application.test_mode
298
+ </pre>
299
+ <p>
300
+ Ex.2 <a href="RConfig.html">RConfig</a>[:web_app_root] =&gt;
301
+ ENV[&#8216;WEB_APP_ROOT&#8217;]
302
+ </p>
303
+ <p>
304
+ NOTE: The application config file can be in any of
305
+ </p>
306
+ <pre>
307
+ the supported formats (yml, xml, conf, etc.)
308
+ </pre>
309
+ <p><a class="source-toggle" href="#"
310
+ onclick="toggleCode('M000030-source');return false;">[Source]</a></p>
311
+ <div class="method-source-code" id="M000030-source">
312
+ <pre>
313
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 539</span>
314
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-operator">[]</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">file</span>=<span class="ruby-identifier">:application</span>)
315
+ <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_config_file</span>(<span class="ruby-identifier">file</span>)[<span class="ruby-identifier">key</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">key</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">upcase</span>]
316
+ <span class="ruby-keyword kw">end</span>
317
+ </pre>
318
+ </div>
319
+ </div>
320
+ </div>
321
+
322
+ <div id="method-M000034" class="method-detail">
323
+ <a name="M000034"></a>
324
+
325
+ <div class="method-heading">
326
+ <a href="#M000034" class="method-signature">
327
+ <span class="method-name">allow_reload=</span><span class="method-args">(reload)</span>
328
+ </a>
329
+ </div>
330
+
331
+ <div class="method-description">
332
+ <p>
333
+ Sets the flag indicating whether or not <a
334
+ href="RConfig.html#M000037">reload</a> should be executed.
335
+ </p>
336
+ <p><a class="source-toggle" href="#"
337
+ onclick="toggleCode('M000034-source');return false;">[Source]</a></p>
338
+ <div class="method-source-code" id="M000034-source">
339
+ <pre>
340
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 619</span>
341
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">allow_reload=</span>(<span class="ruby-identifier">reload</span>)
342
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'Argument must be true or false.'</span> <span class="ruby-keyword kw">unless</span> [<span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">reload</span>)
343
+ <span class="ruby-ivar">@@reload_disabled</span> = (<span class="ruby-keyword kw">not</span> <span class="ruby-identifier">reload</span>)
344
+ <span class="ruby-keyword kw">end</span>
345
+ </pre>
346
+ </div>
347
+ </div>
348
+ </div>
349
+
350
+ <div id="method-M000026" class="method-detail">
351
+ <a name="M000026"></a>
352
+
353
+ <div class="method-heading">
354
+ <a href="#M000026" class="method-signature">
355
+ <span class="method-name">check_config_changed</span><span class="method-args">(name = nil)</span>
356
+ </a>
357
+ </div>
358
+
359
+ <div class="method-description">
360
+ <p>
361
+ If config files have changed, Caches are flushed, <a
362
+ href="RConfig.html#M000033">on_load</a> triggers are run.
363
+ </p>
364
+ <p><a class="source-toggle" href="#"
365
+ onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
366
+ <div class="method-source-code" id="M000026-source">
367
+ <pre>
368
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 432</span>
369
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">check_config_changed</span>(<span class="ruby-identifier">name</span> = <span class="ruby-keyword kw">nil</span>)
370
+ <span class="ruby-identifier">changed</span> = []
371
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>
372
+ <span class="ruby-ivar">@@cache_hash</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">name</span> <span class="ruby-operator">|</span>
373
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">config_has_changed?</span>(<span class="ruby-identifier">name</span>)
374
+ <span class="ruby-identifier">changed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>
375
+ <span class="ruby-keyword kw">end</span>
376
+ <span class="ruby-keyword kw">end</span>
377
+ <span class="ruby-keyword kw">else</span>
378
+ <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-comment cmt"># if name.is_a?(Symbol)
379
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">config_has_changed?</span>(<span class="ruby-identifier">name</span>)
380
+ <span class="ruby-identifier">changed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>
381
+ <span class="ruby-keyword kw">end</span>
382
+ <span class="ruby-keyword kw">end</span>
383
+
384
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;check_config_changed(#{name.inspect}) =&gt; #{changed.inspect}&quot;</span>
385
+
386
+ <span class="ruby-identifier">changed</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-value">? </span><span class="ruby-keyword kw">nil</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">changed</span>
387
+ <span class="ruby-keyword kw">end</span>
388
+ </pre>
389
+ </div>
390
+ </div>
391
+ </div>
392
+
393
+ <div id="method-M000024" class="method-detail">
394
+ <a name="M000024"></a>
395
+
396
+ <div class="method-heading">
397
+ <a href="#M000024" class="method-signature">
398
+ <span class="method-name">config_changed?</span><span class="method-args">(name)</span>
399
+ </a>
400
+ </div>
401
+
402
+ <div class="method-description">
403
+ <p>
404
+ Returns whether or not the config for the given config name has changed
405
+ since it was last loaded.
406
+ </p>
407
+ <p>
408
+ Returns true if any files for config have changes since last load.
409
+ </p>
410
+ <p><a class="source-toggle" href="#"
411
+ onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
412
+ <div class="method-source-code" id="M000024-source">
413
+ <pre>
414
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 399</span>
415
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_changed?</span>(<span class="ruby-identifier">name</span>)
416
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;config_changed?(#{name.inspect})&quot;</span>
417
+ <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-comment cmt"># if name.is_a?(Symbol)
418
+ <span class="ruby-operator">!</span> (<span class="ruby-ivar">@@cache_files</span>[<span class="ruby-identifier">name</span>] <span class="ruby-operator">===</span> <span class="ruby-identifier">get_config_files</span>(<span class="ruby-identifier">name</span>))
419
+ <span class="ruby-keyword kw">end</span>
420
+ </pre>
421
+ </div>
422
+ </div>
423
+ </div>
424
+
425
+ <div id="method-M000045" class="method-detail">
426
+ <a name="M000045"></a>
427
+
428
+ <div class="method-heading">
429
+ <a href="#M000045" class="method-signature">
430
+ <span class="method-name">config_file_loaded</span><span class="method-args">()</span>
431
+ </a>
432
+ </div>
433
+
434
+ <div class="method-description">
435
+ <p>
436
+ Helper method for white-box testing and debugging. Returns a hash of each
437
+ file that has been loaded.
438
+ </p>
439
+ <p><a class="source-toggle" href="#"
440
+ onclick="toggleCode('M000045-source');return false;">[Source]</a></p>
441
+ <div class="method-source-code" id="M000045-source">
442
+ <pre>
443
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 752</span>
444
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_file_loaded</span>
445
+ <span class="ruby-ivar">@@config_file_loaded</span>
446
+ <span class="ruby-keyword kw">end</span>
447
+ </pre>
448
+ </div>
449
+ </div>
450
+ </div>
451
+
452
+ <div id="method-M000044" class="method-detail">
453
+ <a name="M000044"></a>
454
+
455
+ <div class="method-heading">
456
+ <a href="#M000044" class="method-signature">
457
+ <span class="method-name">config_file_loaded=</span><span class="method-args">(x)</span>
458
+ </a>
459
+ </div>
460
+
461
+ <div class="method-description">
462
+ <p>
463
+ Helper method for white-box testing and debugging. Sets a hash of each file
464
+ that has been loaded.
465
+ </p>
466
+ <p><a class="source-toggle" href="#"
467
+ onclick="toggleCode('M000044-source');return false;">[Source]</a></p>
468
+ <div class="method-source-code" id="M000044-source">
469
+ <pre>
470
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 744</span>
471
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_file_loaded=</span>(<span class="ruby-identifier">x</span>)
472
+ <span class="ruby-ivar">@@config_file_loaded</span> = <span class="ruby-identifier">x</span>
473
+ <span class="ruby-keyword kw">end</span>
474
+ </pre>
475
+ </div>
476
+ </div>
477
+ </div>
478
+
479
+ <div id="method-M000023" class="method-detail">
480
+ <a name="M000023"></a>
481
+
482
+ <div class="method-heading">
483
+ <a href="#M000023" class="method-signature">
484
+ <span class="method-name">config_files</span><span class="method-args">(name)</span>
485
+ </a>
486
+ </div>
487
+
488
+ <div class="method-description">
489
+ <p>
490
+ Return the config file information for the given config name.
491
+ </p>
492
+ <p><a class="source-toggle" href="#"
493
+ onclick="toggleCode('M000023-source');return false;">[Source]</a></p>
494
+ <div class="method-source-code" id="M000023-source">
495
+ <pre>
496
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 388</span>
497
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_files</span>(<span class="ruby-identifier">name</span>)
498
+ <span class="ruby-ivar">@@cache_files</span>[<span class="ruby-identifier">name</span>] <span class="ruby-operator">||=</span> <span class="ruby-identifier">get_config_files</span>(<span class="ruby-identifier">name</span>)
499
+ <span class="ruby-keyword kw">end</span>
500
+ </pre>
501
+ </div>
502
+ </div>
503
+ </div>
504
+
505
+ <div id="method-M000027" class="method-detail">
506
+ <a name="M000027"></a>
507
+
508
+ <div class="method-heading">
509
+ <a href="#M000027" class="method-signature">
510
+ <span class="method-name">config_has_changed?</span><span class="method-args">(name)</span>
511
+ </a>
512
+ </div>
513
+
514
+ <div class="method-description">
515
+ <p><a class="source-toggle" href="#"
516
+ onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
517
+ <div class="method-source-code" id="M000027-source">
518
+ <pre>
519
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 453</span>
520
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_has_changed?</span>(<span class="ruby-identifier">name</span>)
521
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;config_has_changed?(#{name.inspect}), reload_disabled=#{@@reload_disabled}&quot;</span>
522
+
523
+ <span class="ruby-identifier">changed</span> = <span class="ruby-keyword kw">false</span>
524
+
525
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">config_changed?</span>(<span class="ruby-identifier">name</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">reload?</span>
526
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@cache_hash</span>[<span class="ruby-identifier">name</span>]
527
+ <span class="ruby-ivar">@@cache_hash</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-keyword kw">nil</span>
528
+
529
+ <span class="ruby-comment cmt"># force on_load triggers.
530
+ <span class="ruby-identifier">fire_on_load</span>(<span class="ruby-identifier">name</span>)
531
+ <span class="ruby-keyword kw">end</span>
532
+
533
+ <span class="ruby-identifier">changed</span> = <span class="ruby-keyword kw">true</span>
534
+ <span class="ruby-keyword kw">end</span>
535
+
536
+ <span class="ruby-identifier">changed</span>
537
+ <span class="ruby-keyword kw">end</span>
538
+ </pre>
539
+ </div>
540
+ </div>
541
+ </div>
542
+
543
+ <div id="method-M000025" class="method-detail">
544
+ <a name="M000025"></a>
545
+
546
+ <div class="method-heading">
547
+ <a href="#M000025" class="method-signature">
548
+ <span class="method-name">config_hash</span><span class="method-args">(name)</span>
549
+ </a>
550
+ </div>
551
+
552
+ <div class="method-description">
553
+ <p>
554
+ Get the merged config hash for the named file. Returns a cached indifferent
555
+ access faker hash merged from all config files for a name.
556
+ </p>
557
+ <p><a class="source-toggle" href="#"
558
+ onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
559
+ <div class="method-source-code" id="M000025-source">
560
+ <pre>
561
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 411</span>
562
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_hash</span>(<span class="ruby-identifier">name</span>)
563
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;config_hash(#{name.inspect})&quot;</span>
564
+
565
+ <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
566
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">result</span> = <span class="ruby-ivar">@@cache_hash</span>[<span class="ruby-identifier">name</span>]
567
+ <span class="ruby-identifier">result</span> = <span class="ruby-ivar">@@cache_hash</span>[<span class="ruby-identifier">name</span>] =
568
+ <span class="ruby-identifier">make_indifferent</span>(
569
+ <span class="ruby-identifier">merge_hashes</span>(
570
+ <span class="ruby-identifier">load_config_files</span>(<span class="ruby-identifier">name</span>)
571
+ )
572
+ )
573
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;config_hash(#{name.inspect}): reloaded&quot;</span>
574
+ <span class="ruby-keyword kw">end</span>
575
+
576
+ <span class="ruby-identifier">result</span>
577
+ <span class="ruby-keyword kw">end</span>
578
+ </pre>
579
+ </div>
580
+ </div>
581
+ </div>
582
+
583
+ <div id="method-M000015" class="method-detail">
584
+ <a name="M000015"></a>
585
+
586
+ <div class="method-heading">
587
+ <a href="#M000015" class="method-signature">
588
+ <span class="method-name">config_paths</span><span class="method-args">()</span>
589
+ </a>
590
+ </div>
591
+
592
+ <div class="method-description">
593
+ <p>
594
+ Returns a list of directories to search for configuration files.
595
+ </p>
596
+ <p>
597
+ Can be preset with <a href="RConfig.html#M000013">config_paths=</a>/<a
598
+ href="RConfig.html#M000014">set_config_path</a>, controlled via
599
+ ENV[&#8216;CONFIG_PATH&#8217;], or defaulted to CONFIG_ROOT (assumming some
600
+ sort of application initiation as in RAILS). Defaults to [ CONFIG_ROOT ].
601
+ </p>
602
+ <p>
603
+ Examples:
604
+ </p>
605
+ <pre>
606
+ export CONFIG_PATH=&quot;$HOME/work/config:CONFIG_ROOT&quot;
607
+ CONFIG_ROOT = RAILS_ROOT + &quot;/config&quot; unless defined? CONFIG_ROOT
608
+ </pre>
609
+ <p><a class="source-toggle" href="#"
610
+ onclick="toggleCode('M000015-source');return false;">[Source]</a></p>
611
+ <div class="method-source-code" id="M000015-source">
612
+ <pre>
613
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 158</span>
614
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_paths</span>
615
+ <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@@config_paths</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@@config_paths</span>.<span class="ruby-identifier">blank?</span>
616
+
617
+ <span class="ruby-keyword kw">begin</span>
618
+ <span class="ruby-identifier">config_paths</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'CONFIG_PATH'</span>]
619
+ <span class="ruby-keyword kw">rescue</span>
620
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-value str">&quot;Forget something? No config paths! ENV['CONFIG_PATH'] is not set.&quot;</span>,
621
+ <span class="ruby-value str">&quot;Hint: Use config_paths= or set_config_path.&quot;</span>
622
+ <span class="ruby-keyword kw">end</span>
623
+
624
+ <span class="ruby-keyword kw">begin</span>
625
+ <span class="ruby-identifier">config_paths</span> = [<span class="ruby-constant">CONFIG_ROOT</span>]
626
+ <span class="ruby-keyword kw">rescue</span>
627
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-value str">&quot;Forget something? No config paths! CONFIG_ROOT is not set.&quot;</span>,
628
+ <span class="ruby-value str">&quot;Hint: Use config_paths= or set_config_path.&quot;</span>
629
+ <span class="ruby-keyword kw">end</span>
630
+
631
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@config_paths</span>.<span class="ruby-identifier">blank?</span>
632
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InvalidConfigPathError</span>,
633
+ <span class="ruby-value str">&quot;Forget something? No config paths!\n&quot;</span> <span class="ruby-operator">+</span>
634
+ <span class="ruby-value str">&quot;Niether ENV['CONFIG_PATH'] or CONFIG_ROOT is set.\n&quot;</span> <span class="ruby-operator">+</span>
635
+ <span class="ruby-value str">&quot;Hint: Use config_paths= or set_config_path.&quot;</span>
636
+ <span class="ruby-keyword kw">end</span>
637
+
638
+ <span class="ruby-ivar">@@config_paths</span>
639
+ <span class="ruby-keyword kw">end</span>
640
+ </pre>
641
+ </div>
642
+ </div>
643
+ </div>
644
+
645
+ <div id="method-M000013" class="method-detail">
646
+ <a name="M000013"></a>
647
+
648
+ <div class="method-heading">
649
+ <a href="#M000013" class="method-signature">
650
+ <span class="method-name">config_paths=</span><span class="method-args">(paths)</span>
651
+ </a>
652
+ </div>
653
+
654
+ <div class="method-description">
655
+ <p>
656
+ Sets the list of directories to search for configuration files. The
657
+ argument must be an array of strings representing the paths to the
658
+ directories, or a string representing either a single path or a list of
659
+ paths separated by either a colon (:) or a semi-colon (;). If <a
660
+ href="RConfig.html#M000037">reload</a> is disabled, it can only be set
661
+ once.
662
+ </p>
663
+ <p><a class="source-toggle" href="#"
664
+ onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
665
+ <div class="method-source-code" id="M000013-source">
666
+ <pre>
667
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 95</span>
668
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_paths=</span>(<span class="ruby-identifier">paths</span>)
669
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@reload_disabled</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">config_paths_set?</span>
670
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">String</span>
671
+ <span class="ruby-identifier">path_sep</span> = (<span class="ruby-identifier">paths</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/;/</span>) <span class="ruby-operator">?</span> <span class="ruby-value str">';'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">':'</span>
672
+ <span class="ruby-identifier">paths</span> = <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">split</span>(<span class="ruby-node">/#{path_sep}+/</span>)
673
+ <span class="ruby-keyword kw">end</span>
674
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Array</span>
675
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>,
676
+ <span class="ruby-node">&quot;Path(s) must be a String or an Array [#{paths.inspect}]&quot;</span>
677
+ <span class="ruby-keyword kw">end</span>
678
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">empty?</span>
679
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>,
680
+ <span class="ruby-node">&quot;Must provide at least one paths: [#{paths.inspect}]&quot;</span>
681
+ <span class="ruby-keyword kw">end</span>
682
+ <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">all?</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dir</span><span class="ruby-operator">|</span>
683
+ <span class="ruby-identifier">dir</span> = <span class="ruby-constant">CONFIG_ROOT</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dir</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'CONFIG_ROOT'</span>
684
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">dir</span>)
685
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InvalidConfigPathError</span>,
686
+ <span class="ruby-node">&quot;This directory is invalid: [#{dir.inspect}]&quot;</span>
687
+ <span class="ruby-keyword kw">end</span>
688
+ <span class="ruby-keyword kw">end</span>
689
+ <span class="ruby-identifier">reload</span>
690
+ <span class="ruby-ivar">@@config_paths</span> = <span class="ruby-identifier">paths</span>
691
+ <span class="ruby-keyword kw">end</span>
692
+ </pre>
693
+ </div>
694
+ </div>
695
+ </div>
696
+
697
+ <div id="method-M000016" class="method-detail">
698
+ <a name="M000016"></a>
699
+
700
+ <div class="method-heading">
701
+ <a href="#M000016" class="method-signature">
702
+ <span class="method-name">config_paths_set?</span><span class="method-args">()</span>
703
+ </a>
704
+ </div>
705
+
706
+ <div class="method-description">
707
+ <p>
708
+ Indicates whether or not <a href="RConfig.html#M000015">config_paths</a>
709
+ have been set. Returns true if @@<a
710
+ href="RConfig.html#M000015">config_paths</a> has at least one directory.
711
+ </p>
712
+ <p><a class="source-toggle" href="#"
713
+ onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
714
+ <div class="method-source-code" id="M000016-source">
715
+ <pre>
716
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 189</span>
717
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_paths_set?</span>
718
+ <span class="ruby-operator">!</span><span class="ruby-ivar">@@config_paths</span>.<span class="ruby-identifier">blank?</span>
719
+ <span class="ruby-keyword kw">end</span>
720
+ </pre>
721
+ </div>
722
+ </div>
723
+ </div>
724
+
725
+ <div id="method-M000039" class="method-detail">
726
+ <a name="M000039"></a>
727
+
728
+ <div class="method-heading">
729
+ <a href="#M000039" class="method-signature">
730
+ <span class="method-name">create_dottable_hash</span><span class="method-args">(value)</span>
731
+ </a>
732
+ </div>
733
+
734
+ <div class="method-description">
735
+ <p>
736
+ Creates a dottable hash for all <a href="Hash.html">Hash</a> objects,
737
+ recursively.
738
+ </p>
739
+ <p><a class="source-toggle" href="#"
740
+ onclick="toggleCode('M000039-source');return false;">[Source]</a></p>
741
+ <div class="method-source-code" id="M000039-source">
742
+ <pre>
743
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 677</span>
744
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">create_dottable_hash</span>(<span class="ruby-identifier">value</span>)
745
+ <span class="ruby-identifier">make_indifferent</span>(<span class="ruby-identifier">value</span>)
746
+ <span class="ruby-keyword kw">end</span>
747
+ </pre>
748
+ </div>
749
+ </div>
750
+ </div>
751
+
752
+ <div id="method-M000038" class="method-detail">
753
+ <a name="M000038"></a>
754
+
755
+ <div class="method-heading">
756
+ <a href="#M000038" class="method-signature">
757
+ <span class="method-name">disable_reload</span><span class="method-args">() {|| ...}</span>
758
+ </a>
759
+ </div>
760
+
761
+ <div class="method-description">
762
+ <p>
763
+ Disables any reloading of config, executes &amp;block, calls <a
764
+ href="RConfig.html#M000026">check_config_changed</a>, returns result of
765
+ block
766
+ </p>
767
+ <p><a class="source-toggle" href="#"
768
+ onclick="toggleCode('M000038-source');return false;">[Source]</a></p>
769
+ <div class="method-source-code" id="M000038-source">
770
+ <pre>
771
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 660</span>
772
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">disable_reload</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
773
+ <span class="ruby-comment cmt"># This should increment @@reload_disabled on entry, decrement on exit.
774
+ <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">nil</span>
775
+ <span class="ruby-identifier">reload_disabled_save</span> = <span class="ruby-ivar">@@reload_disabled</span>
776
+ <span class="ruby-keyword kw">begin</span>
777
+ <span class="ruby-ivar">@@reload_disabled</span> = <span class="ruby-keyword kw">true</span>
778
+ <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">yield</span>
779
+ <span class="ruby-keyword kw">ensure</span>
780
+ <span class="ruby-ivar">@@reload_disabled</span> = <span class="ruby-identifier">reload_disabled_save</span>
781
+ <span class="ruby-identifier">check_config_changed</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@@reload_disabled</span>
782
+ <span class="ruby-keyword kw">end</span>
783
+ <span class="ruby-identifier">result</span>
784
+ <span class="ruby-keyword kw">end</span>
785
+ </pre>
786
+ </div>
787
+ </div>
788
+ </div>
789
+
790
+ <div id="method-M000032" class="method-detail">
791
+ <a name="M000032"></a>
792
+
793
+ <div class="method-heading">
794
+ <a href="#M000032" class="method-signature">
795
+ <span class="method-name">get_config_file</span><span class="method-args">(name)</span>
796
+ </a>
797
+ </div>
798
+
799
+ <div class="method-description">
800
+ <p>
801
+ Get the merged config hash. Will auto check every 5 minutes, for longer
802
+ running apps.
803
+ </p>
804
+ <p><a class="source-toggle" href="#"
805
+ onclick="toggleCode('M000032-source');return false;">[Source]</a></p>
806
+ <div class="method-source-code" id="M000032-source">
807
+ <pre>
808
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 568</span>
809
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_config_file</span>(<span class="ruby-identifier">name</span>)
810
+ <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
811
+ <span class="ruby-identifier">now</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
812
+
813
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-operator">!</span> <span class="ruby-ivar">@@last_auto_check</span>[<span class="ruby-identifier">name</span>]) <span class="ruby-operator">||</span> (<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@@last_auto_check</span>[<span class="ruby-identifier">name</span>]) <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@@reload_interval</span>
814
+ <span class="ruby-ivar">@@last_auto_check</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">now</span>
815
+ <span class="ruby-identifier">check_config_changed</span>(<span class="ruby-identifier">name</span>)
816
+ <span class="ruby-keyword kw">end</span>
817
+
818
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">config_hash</span>(<span class="ruby-identifier">name</span>)
819
+
820
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;get_config_file(#{name.inspect}) =&gt; #{result.inspect}&quot;</span>
821
+
822
+ <span class="ruby-identifier">result</span>
823
+ <span class="ruby-keyword kw">end</span>
824
+ </pre>
825
+ </div>
826
+ </div>
827
+ </div>
828
+
829
+ <div id="method-M000022" class="method-detail">
830
+ <a name="M000022"></a>
831
+
832
+ <div class="method-heading">
833
+ <a href="#M000022" class="method-signature">
834
+ <span class="method-name">get_config_files</span><span class="method-args">(name)</span>
835
+ </a>
836
+ </div>
837
+
838
+ <div class="method-description">
839
+ <p>
840
+ Returns a list of all relevant config files as specified by _suffixes list.
841
+ Each element is an Array, containing:
842
+ </p>
843
+ <pre>
844
+ [ &quot;the-top-level-config-name&quot;,
845
+ &quot;the-suffixed-config-name&quot;,
846
+ &quot;/the/absolute/path/to/yaml.yml&quot;,
847
+ # The mtime of the yml file or nil, if it doesn't exist.
848
+ ]
849
+ </pre>
850
+ <p><a class="source-toggle" href="#"
851
+ onclick="toggleCode('M000022-source');return false;">[Source]</a></p>
852
+ <div class="method-source-code" id="M000022-source">
853
+ <pre>
854
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 363</span>
855
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_config_files</span>(<span class="ruby-identifier">name</span>)
856
+ <span class="ruby-identifier">files</span> = []
857
+
858
+ <span class="ruby-identifier">config_paths</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">dir</span> <span class="ruby-operator">|</span>
859
+ <span class="ruby-comment cmt"># splatting *suffix allows us to deal with multipart suffixes
860
+ <span class="ruby-identifier">name_no_overlay</span>, <span class="ruby-identifier">suffixes</span> = <span class="ruby-identifier">suffixes</span>(<span class="ruby-identifier">name</span>)
861
+ <span class="ruby-identifier">suffixes</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span> <span class="ruby-identifier">suffix</span> <span class="ruby-operator">|</span> [ <span class="ruby-identifier">name_no_overlay</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">suffix</span> ].<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'_'</span>) }.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">name_x</span> <span class="ruby-operator">|</span>
862
+ <span class="ruby-constant">CONFIG_FILE_TYPES</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ext</span><span class="ruby-operator">|</span>
863
+ <span class="ruby-identifier">filename</span> = <span class="ruby-identifier">filename_for_name</span>(<span class="ruby-identifier">name_x</span>, <span class="ruby-identifier">dir</span>, <span class="ruby-identifier">ext</span>)
864
+ <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">filename</span>)
865
+ <span class="ruby-identifier">files</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">name</span>, <span class="ruby-identifier">name_x</span>, <span class="ruby-identifier">filename</span>, <span class="ruby-identifier">ext</span>, <span class="ruby-constant">File</span>.<span class="ruby-identifier">stat</span>(<span class="ruby-identifier">filename</span>).<span class="ruby-identifier">mtime</span> ]
866
+ <span class="ruby-keyword kw">end</span>
867
+ <span class="ruby-keyword kw">end</span>
868
+ <span class="ruby-keyword kw">end</span>
869
+ <span class="ruby-keyword kw">end</span>
870
+
871
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;get_config_files(#{name}) =&gt; #{files.select{|x| x[3]}.inspect}&quot;</span>
872
+
873
+ <span class="ruby-identifier">files</span>
874
+ <span class="ruby-keyword kw">end</span>
875
+ </pre>
876
+ </div>
877
+ </div>
878
+ </div>
879
+
880
+ <div id="method-M000012" class="method-detail">
881
+ <a name="M000012"></a>
882
+
883
+ <div class="method-heading">
884
+ <a href="#M000012" class="method-signature">
885
+ <span class="method-name">initialize</span><span class="method-args">(*args)</span>
886
+ </a>
887
+ </div>
888
+
889
+ <div class="method-description">
890
+ <p>
891
+ Convenience method to <a href="RConfig.html#M000012">initialize</a>
892
+ necessary fields including, config paths, <a
893
+ href="RConfig.html#M000017">overlay</a>, reload_disabled, and verbose, all
894
+ at one time.
895
+ </p>
896
+ <p><a class="source-toggle" href="#"
897
+ onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
898
+ <div class="method-source-code" id="M000012-source">
899
+ <pre>
900
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 69</span>
901
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">initialize</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
902
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]
903
+ <span class="ruby-keyword kw">when</span> <span class="ruby-constant">Hash</span>
904
+ <span class="ruby-identifier">params</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">symbolize_keys</span>
905
+ <span class="ruby-identifier">paths</span> = <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:paths</span>]
906
+ <span class="ruby-identifier">overlay</span> = <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:overlay</span>]
907
+ <span class="ruby-identifier">reload</span> = <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:reload</span>]
908
+ <span class="ruby-identifier">verbose</span> = <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:verbose</span>]
909
+ <span class="ruby-keyword kw">else</span>
910
+ <span class="ruby-identifier">paths</span>, <span class="ruby-identifier">overlay</span>, <span class="ruby-identifier">reload</span>, <span class="ruby-identifier">verbose</span> = <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>
911
+ <span class="ruby-keyword kw">end</span>
912
+ <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_paths</span> = <span class="ruby-identifier">paths</span>
913
+ <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">overlay</span> = <span class="ruby-identifier">overlay</span>
914
+ <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">allow_reload</span> = <span class="ruby-identifier">reload</span>
915
+ <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">verbose</span> = <span class="ruby-identifier">verbose</span>
916
+ <span class="ruby-keyword kw">end</span>
917
+ </pre>
918
+ </div>
919
+ </div>
920
+ </div>
921
+
922
+ <div id="method-M000020" class="method-detail">
923
+ <a name="M000020"></a>
924
+
925
+ <div class="method-heading">
926
+ <a href="#M000020" class="method-signature">
927
+ <span class="method-name">load_config_files</span><span class="method-args">(name, force=false)</span>
928
+ </a>
929
+ </div>
930
+
931
+ <div class="method-description">
932
+ <p>
933
+ Get each config file&#8216;s yaml hash for the given config name, to be
934
+ merged later. Files will only be loaded if they have not been loaded before
935
+ or the files have changed within the last five minutes, or force is
936
+ explicitly set to true.
937
+ </p>
938
+ <p><a class="source-toggle" href="#"
939
+ onclick="toggleCode('M000020-source');return false;">[Source]</a></p>
940
+ <div class="method-source-code" id="M000020-source">
941
+ <pre>
942
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 263</span>
943
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">load_config_files</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">force</span>=<span class="ruby-keyword kw">false</span>)
944
+ <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-comment cmt"># if name.is_a?(Symbol)
945
+
946
+ <span class="ruby-comment cmt"># Return last config file hash list loaded,
947
+ <span class="ruby-comment cmt"># if reload is disabled and files have already been loaded.
948
+ <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@@cache_config_files</span>[<span class="ruby-identifier">name</span>] <span class="ruby-keyword kw">if</span>
949
+ <span class="ruby-ivar">@@reload_disabled</span> <span class="ruby-operator">&amp;&amp;</span>
950
+ <span class="ruby-ivar">@@cache_config_files</span>[<span class="ruby-identifier">name</span>]
951
+
952
+ <span class="ruby-identifier">now</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
953
+
954
+ <span class="ruby-comment cmt"># Get array of all the existing files file the config name.
955
+ <span class="ruby-identifier">config_files</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_config_files</span>(<span class="ruby-identifier">name</span>)
956
+
957
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;load_config_files(#{name.inspect})&quot;</span>
958
+
959
+ <span class="ruby-comment cmt"># Get all the data from all yaml files into as hashes
960
+ <span class="ruby-identifier">hashes</span> = <span class="ruby-identifier">config_files</span>.<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
961
+ <span class="ruby-identifier">name</span>, <span class="ruby-identifier">name_x</span>, <span class="ruby-identifier">filename</span>, <span class="ruby-identifier">ext</span>, <span class="ruby-identifier">mtime</span> = <span class="ruby-operator">*</span><span class="ruby-identifier">f</span>
962
+
963
+ <span class="ruby-comment cmt"># Get the cached file info the specific file, if
964
+ <span class="ruby-comment cmt"># it's been loaded before.
965
+ <span class="ruby-identifier">val</span>, <span class="ruby-identifier">last_mtime</span>, <span class="ruby-identifier">last_loaded</span> = <span class="ruby-ivar">@@cache</span>[<span class="ruby-identifier">filename</span>]
966
+
967
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;f = #{f.inspect}&quot;</span>,
968
+ <span class="ruby-node">&quot;cache #{name_x} filename = #{filename.inspect}&quot;</span>,
969
+ <span class="ruby-node">&quot;cache #{name_x} val = #{val.inspect}&quot;</span>,
970
+ <span class="ruby-node">&quot;cache #{name_x} last_mtime = #{last_mtime.inspect}&quot;</span>,
971
+ <span class="ruby-node">&quot;cache #{name_x} last_loaded = #{last_loaded.inspect}&quot;</span>
972
+
973
+ <span class="ruby-comment cmt"># Load the file if its never been loaded or its been more than
974
+ <span class="ruby-comment cmt"># so many minutes since last load attempt. (default: 5 minutes)
975
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">last_loaded</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@@reload_interval</span>)
976
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">force</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">mtime</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">last_mtime</span>
977
+
978
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;mtime #{name.inspect} #{filename.inspect} &quot;</span> <span class="ruby-operator">+</span>
979
+ <span class="ruby-node">&quot;changed #{mtime != last_mtime} : #{mtime.inspect} #{last_mtime.inspect}&quot;</span>
980
+
981
+ <span class="ruby-comment cmt"># Get contents from config file
982
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">filename</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
983
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;RConfig: loading #{filename.inspect}&quot;</span>
984
+ <span class="ruby-identifier">val</span> = <span class="ruby-identifier">parse_file</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">ext</span>)
985
+ <span class="ruby-identifier">val</span> = <span class="ruby-identifier">val</span>[<span class="ruby-identifier">name</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ext</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:xml</span> <span class="ruby-comment cmt"># xml document must have root tag matching the file name.
986
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;RConfig: loaded #{filename.inspect} =&gt; #{val.inspect}&quot;</span>
987
+ (<span class="ruby-ivar">@@config_file_loaded</span> <span class="ruby-operator">||=</span> { })[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">config_files</span>
988
+ <span class="ruby-keyword kw">end</span>
989
+
990
+ <span class="ruby-comment cmt"># Save cached config file contents, and mtime.
991
+ <span class="ruby-ivar">@@cache</span>[<span class="ruby-identifier">filename</span>] = [ <span class="ruby-identifier">val</span>, <span class="ruby-identifier">mtime</span>, <span class="ruby-identifier">now</span> ]
992
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;cache[#{filename.inspect}] = #{@@cache[filename].inspect}&quot;</span>
993
+
994
+ <span class="ruby-comment cmt"># Flush merged hash cache.
995
+ <span class="ruby-ivar">@@cache_hash</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-keyword kw">nil</span>
996
+
997
+ <span class="ruby-comment cmt"># Config files changed or disappeared.
998
+ <span class="ruby-ivar">@@cache_files</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">config_files</span>
999
+
1000
+ <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># if val == nil || (now - last_loaded &gt; @@reload_interval)
1001
+ <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># if force || val == nil || mtime != last_mtime
1002
+
1003
+ <span class="ruby-identifier">val</span>
1004
+ <span class="ruby-keyword kw">end</span>
1005
+ <span class="ruby-identifier">hashes</span>.<span class="ruby-identifier">compact!</span>
1006
+
1007
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;load_config_files(#{name.inspect}) =&gt; #{hashes.inspect}&quot;</span>
1008
+
1009
+ <span class="ruby-comment cmt"># Keep last loaded config files around in case @@reload_dsabled.
1010
+ <span class="ruby-ivar">@@cache_config_files</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">hashes</span> <span class="ruby-comment cmt">#unless hashes.empty?
1011
+
1012
+ <span class="ruby-identifier">hashes</span>
1013
+ <span class="ruby-keyword kw">end</span>
1014
+ </pre>
1015
+ </div>
1016
+ </div>
1017
+ </div>
1018
+
1019
+ <div id="method-M000029" class="method-detail">
1020
+ <a name="M000029"></a>
1021
+
1022
+ <div class="method-heading">
1023
+ <a href="#M000029" class="method-signature">
1024
+ <span class="method-name">make_indifferent</span><span class="method-args">(x)</span>
1025
+ </a>
1026
+ </div>
1027
+
1028
+ <div class="method-description">
1029
+ <p>
1030
+ Recursively makes hashes into frozen IndifferentAccess ConfigFakerHash
1031
+ Arrays are also traversed and frozen.
1032
+ </p>
1033
+ <p><a class="source-toggle" href="#"
1034
+ onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
1035
+ <div class="method-source-code" id="M000029-source">
1036
+ <pre>
1037
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 485</span>
1038
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">make_indifferent</span>(<span class="ruby-identifier">x</span>)
1039
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">x</span>
1040
+ <span class="ruby-keyword kw">when</span> <span class="ruby-constant">Hash</span>
1041
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">frozen?</span>
1042
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">each_pair</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>
1043
+ <span class="ruby-identifier">x</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">make_indifferent</span>(<span class="ruby-identifier">v</span>)
1044
+ <span class="ruby-keyword kw">end</span>
1045
+ <span class="ruby-identifier">x</span> = <span class="ruby-constant">ConfigHash</span>.<span class="ruby-identifier">new</span>.<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">x</span>).<span class="ruby-identifier">freeze</span>
1046
+ <span class="ruby-keyword kw">end</span>
1047
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;make_indefferent: x = #{x.inspect}:#{x.class}&quot;</span>
1048
+ <span class="ruby-keyword kw">when</span> <span class="ruby-constant">Array</span>
1049
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">frozen?</span>
1050
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">collect!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">|</span>
1051
+ <span class="ruby-identifier">make_indifferent</span>(<span class="ruby-identifier">v</span>)
1052
+ <span class="ruby-keyword kw">end</span>
1053
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">freeze</span>
1054
+ <span class="ruby-keyword kw">end</span>
1055
+ <span class="ruby-comment cmt"># Freeze Strings.
1056
+ <span class="ruby-keyword kw">when</span> <span class="ruby-constant">String</span>
1057
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">freeze</span>
1058
+ <span class="ruby-keyword kw">end</span>
1059
+
1060
+ <span class="ruby-identifier">x</span>
1061
+ <span class="ruby-keyword kw">end</span>
1062
+ </pre>
1063
+ </div>
1064
+ </div>
1065
+ </div>
1066
+
1067
+ <div id="method-M000028" class="method-detail">
1068
+ <a name="M000028"></a>
1069
+
1070
+ <div class="method-heading">
1071
+ <a href="#M000028" class="method-signature">
1072
+ <span class="method-name">merge_hashes</span><span class="method-args">(hashes)</span>
1073
+ </a>
1074
+ </div>
1075
+
1076
+ <div class="method-description">
1077
+ <p>
1078
+ Returns a merge of hashes.
1079
+ </p>
1080
+ <p><a class="source-toggle" href="#"
1081
+ onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
1082
+ <div class="method-source-code" id="M000028-source">
1083
+ <pre>
1084
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 476</span>
1085
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">merge_hashes</span>(<span class="ruby-identifier">hashes</span>)
1086
+ <span class="ruby-identifier">hashes</span>.<span class="ruby-identifier">inject</span>({ }) { <span class="ruby-operator">|</span> <span class="ruby-identifier">n</span>, <span class="ruby-identifier">h</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">weave</span>(<span class="ruby-identifier">h</span>, <span class="ruby-keyword kw">true</span>) }
1087
+ <span class="ruby-keyword kw">end</span>
1088
+ </pre>
1089
+ </div>
1090
+ </div>
1091
+ </div>
1092
+
1093
+ <div id="method-M000040" class="method-detail">
1094
+ <a name="M000040"></a>
1095
+
1096
+ <div class="method-heading">
1097
+ <a href="#M000040" class="method-signature">
1098
+ <span class="method-name">method_missing</span><span class="method-args">(method, *args)</span>
1099
+ </a>
1100
+ </div>
1101
+
1102
+ <div class="method-description">
1103
+ <p>
1104
+ Short-hand access to config file by its name.
1105
+ </p>
1106
+ <p>
1107
+ Example:
1108
+ </p>
1109
+ <pre>
1110
+ RConfig.provider(:foo) =&gt; RConfig.with_file(:provider).foo
1111
+ RConfig.provider.foo =&gt; RConfig.with_file(:provider).foo
1112
+ </pre>
1113
+ <p><a class="source-toggle" href="#"
1114
+ onclick="toggleCode('M000040-source');return false;">[Source]</a></p>
1115
+ <div class="method-source-code" id="M000040-source">
1116
+ <pre>
1117
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 690</span>
1118
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">method_missing</span>(<span class="ruby-identifier">method</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
1119
+ <span class="ruby-identifier">value</span> = <span class="ruby-identifier">with_file</span>(<span class="ruby-identifier">method</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
1120
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;#{self}.method_missing(#{method.inspect}, #{args.inspect}) =&gt; #{value.inspect}&quot;</span>
1121
+ <span class="ruby-identifier">value</span>
1122
+ <span class="ruby-keyword kw">end</span>
1123
+ </pre>
1124
+ </div>
1125
+ </div>
1126
+ </div>
1127
+
1128
+ <div id="method-M000033" class="method-detail">
1129
+ <a name="M000033"></a>
1130
+
1131
+ <div class="method-heading">
1132
+ <a href="#M000033" class="method-signature">
1133
+ <span class="method-name">on_load</span><span class="method-args">(*args, &amp;blk)</span>
1134
+ </a>
1135
+ </div>
1136
+
1137
+ <div class="method-description">
1138
+ <p>
1139
+ Register a callback when a config has been reloaded. If no config name is
1140
+ specified, the callback will be registered under the name :ANY. The name
1141
+ :ANY will register a callback for any config file change.
1142
+ </p>
1143
+ <p>
1144
+ Example:
1145
+ </p>
1146
+ <pre>
1147
+ class MyClass
1148
+ @@my_config = { }
1149
+ RConfig.on_load(:cache) do
1150
+ @@my_config = { }
1151
+ end
1152
+ def my_config
1153
+ @@my_config ||= something_expensive_thing_on_config(RConfig.cache.memory_limit)
1154
+ end
1155
+ end
1156
+ </pre>
1157
+ <p><a class="source-toggle" href="#"
1158
+ onclick="toggleCode('M000033-source');return false;">[Source]</a></p>
1159
+ <div class="method-source-code" id="M000033-source">
1160
+ <pre>
1161
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 602</span>
1162
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">on_load</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">blk</span>)
1163
+ <span class="ruby-identifier">args</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">:ANY</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">empty?</span>
1164
+ <span class="ruby-identifier">proc</span> = <span class="ruby-identifier">blk</span>.<span class="ruby-identifier">to_proc</span>
1165
+
1166
+ <span class="ruby-comment cmt"># Call proc on registration.
1167
+ <span class="ruby-identifier">proc</span>.<span class="ruby-identifier">call</span>()
1168
+
1169
+ <span class="ruby-comment cmt"># Register callback proc.
1170
+ <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">name</span> <span class="ruby-operator">|</span>
1171
+ <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
1172
+ (<span class="ruby-ivar">@@on_load</span>[<span class="ruby-identifier">name</span>] <span class="ruby-operator">||=</span> [ ]) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">proc</span>
1173
+ <span class="ruby-keyword kw">end</span>
1174
+ <span class="ruby-keyword kw">end</span>
1175
+ </pre>
1176
+ </div>
1177
+ </div>
1178
+ </div>
1179
+
1180
+ <div id="method-M000017" class="method-detail">
1181
+ <a name="M000017"></a>
1182
+
1183
+ <div class="method-heading">
1184
+ <a href="#M000017" class="method-signature">
1185
+ <span class="method-name">overlay</span><span class="method-args">()</span>
1186
+ </a>
1187
+ </div>
1188
+
1189
+ <div class="method-description">
1190
+ <p>
1191
+ Specifies an additional <a href="RConfig.html#M000017">overlay</a> suffix.
1192
+ </p>
1193
+ <p>
1194
+ E.g. &#8216;gb&#8217; for UK locale.
1195
+ </p>
1196
+ <p>
1197
+ Defaults from ENV[&#8216;CONFIG_OVERLAY&#8217;].
1198
+ </p>
1199
+ <p><a class="source-toggle" href="#"
1200
+ onclick="toggleCode('M000017-source');return false;">[Source]</a></p>
1201
+ <div class="method-source-code" id="M000017-source">
1202
+ <pre>
1203
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 199</span>
1204
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">overlay</span>
1205
+ <span class="ruby-ivar">@@overlay</span> <span class="ruby-operator">||=</span> (<span class="ruby-identifier">x</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'CONFIG_OVERLAY'</span>]) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">freeze</span>
1206
+ <span class="ruby-keyword kw">end</span>
1207
+ </pre>
1208
+ </div>
1209
+ </div>
1210
+ </div>
1211
+
1212
+ <div id="method-M000018" class="method-detail">
1213
+ <a name="M000018"></a>
1214
+
1215
+ <div class="method-heading">
1216
+ <a href="#M000018" class="method-signature">
1217
+ <span class="method-name">overlay=</span><span class="method-args">(x)</span>
1218
+ </a>
1219
+ </div>
1220
+
1221
+ <div class="method-description">
1222
+ <p>
1223
+ Sets <a href="RConfig.html#M000017">overlay</a> for
1224
+ </p>
1225
+ <p><a class="source-toggle" href="#"
1226
+ onclick="toggleCode('M000018-source');return false;">[Source]</a></p>
1227
+ <div class="method-source-code" id="M000018-source">
1228
+ <pre>
1229
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 206</span>
1230
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">overlay=</span>(<span class="ruby-identifier">x</span>)
1231
+ <span class="ruby-identifier">flush_cache</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@overlay</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">x</span>
1232
+ <span class="ruby-ivar">@@overlay</span> = <span class="ruby-identifier">x</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">freeze</span>
1233
+ <span class="ruby-keyword kw">end</span>
1234
+ </pre>
1235
+ </div>
1236
+ </div>
1237
+ </div>
1238
+
1239
+ <div id="method-M000021" class="method-detail">
1240
+ <a name="M000021"></a>
1241
+
1242
+ <div class="method-heading">
1243
+ <a href="#M000021" class="method-signature">
1244
+ <span class="method-name">parse_file</span><span class="method-args">(conf_file, ext)</span>
1245
+ </a>
1246
+ </div>
1247
+
1248
+ <div class="method-description">
1249
+ <p>
1250
+ Parses file based on file type.
1251
+ </p>
1252
+ <p><a class="source-toggle" href="#"
1253
+ onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
1254
+ <div class="method-source-code" id="M000021-source">
1255
+ <pre>
1256
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 339</span>
1257
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_file</span>(<span class="ruby-identifier">conf_file</span>, <span class="ruby-identifier">ext</span>)
1258
+ <span class="ruby-identifier">hash</span> = <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">ext</span>
1259
+ <span class="ruby-keyword kw">when</span> <span class="ruby-operator">*</span><span class="ruby-constant">YML_FILE_TYPES</span>
1260
+ <span class="ruby-constant">YAML</span><span class="ruby-operator">::</span><span class="ruby-identifier">load</span>(<span class="ruby-identifier">conf_file</span>)
1261
+ <span class="ruby-keyword kw">when</span> <span class="ruby-operator">*</span><span class="ruby-constant">XML_FILE_TYPES</span>
1262
+ <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">from_xml</span>(<span class="ruby-identifier">conf_file</span>)
1263
+ <span class="ruby-keyword kw">when</span> <span class="ruby-operator">*</span><span class="ruby-constant">CNF_FILE_TYPES</span>
1264
+ <span class="ruby-constant">PropertiesFileParser</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">conf_file</span>)
1265
+ <span class="ruby-keyword kw">else</span>
1266
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ConfigError</span>, <span class="ruby-node">&quot;Unknown File type:#{ext}&quot;</span>
1267
+ <span class="ruby-keyword kw">end</span>
1268
+ <span class="ruby-identifier">hash</span>.<span class="ruby-identifier">freeze</span>
1269
+ <span class="ruby-keyword kw">end</span>
1270
+ </pre>
1271
+ </div>
1272
+ </div>
1273
+ </div>
1274
+
1275
+ <div id="method-M000037" class="method-detail">
1276
+ <a name="M000037"></a>
1277
+
1278
+ <div class="method-heading">
1279
+ <a href="#M000037" class="method-signature">
1280
+ <span class="method-name">reload</span><span class="method-args">(force = false)</span>
1281
+ </a>
1282
+ </div>
1283
+
1284
+ <div class="method-description">
1285
+ <p>
1286
+ Flushes cached config data, so that it can be reloaded from disk. It is
1287
+ recommended that this should be used with caution, and any need to <a
1288
+ href="RConfig.html#M000037">reload</a> in a production setting should
1289
+ minimized or completely avoided if possible.
1290
+ </p>
1291
+ <p><a class="source-toggle" href="#"
1292
+ onclick="toggleCode('M000037-source');return false;">[Source]</a></p>
1293
+ <div class="method-source-code" id="M000037-source">
1294
+ <pre>
1295
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 646</span>
1296
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">reload</span>(<span class="ruby-identifier">force</span> = <span class="ruby-keyword kw">false</span>)
1297
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'Argument must be true or false.'</span> <span class="ruby-keyword kw">unless</span> [<span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">force</span>)
1298
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">force</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">reload?</span>
1299
+ <span class="ruby-identifier">flush_cache</span>
1300
+ <span class="ruby-keyword kw">end</span>
1301
+ <span class="ruby-keyword kw">nil</span>
1302
+ <span class="ruby-keyword kw">end</span>
1303
+ </pre>
1304
+ </div>
1305
+ </div>
1306
+ </div>
1307
+
1308
+ <div id="method-M000035" class="method-detail">
1309
+ <a name="M000035"></a>
1310
+
1311
+ <div class="method-heading">
1312
+ <a href="#M000035" class="method-signature">
1313
+ <span class="method-name">reload?</span><span class="method-args">()</span>
1314
+ </a>
1315
+ </div>
1316
+
1317
+ <div class="method-description">
1318
+ <p>
1319
+ Flag indicating whether or not <a href="RConfig.html#M000037">reload</a>
1320
+ should be executed.
1321
+ </p>
1322
+ <p><a class="source-toggle" href="#"
1323
+ onclick="toggleCode('M000035-source');return false;">[Source]</a></p>
1324
+ <div class="method-source-code" id="M000035-source">
1325
+ <pre>
1326
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 627</span>
1327
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">reload?</span>
1328
+ <span class="ruby-operator">!</span><span class="ruby-ivar">@@reload_disabled</span>
1329
+ <span class="ruby-keyword kw">end</span>
1330
+ </pre>
1331
+ </div>
1332
+ </div>
1333
+ </div>
1334
+
1335
+ <div id="method-M000036" class="method-detail">
1336
+ <a name="M000036"></a>
1337
+
1338
+ <div class="method-heading">
1339
+ <a href="#M000036" class="method-signature">
1340
+ <span class="method-name">reload_interval=</span><span class="method-args">(x)</span>
1341
+ </a>
1342
+ </div>
1343
+
1344
+ <div class="method-description">
1345
+ <p>
1346
+ Sets the number of seconds between reloading of config files and automatic
1347
+ <a href="RConfig.html#M000037">reload</a> checks. Defaults to 5 minutes.
1348
+ </p>
1349
+ <p><a class="source-toggle" href="#"
1350
+ onclick="toggleCode('M000036-source');return false;">[Source]</a></p>
1351
+ <div class="method-source-code" id="M000036-source">
1352
+ <pre>
1353
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 635</span>
1354
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">reload_interval=</span>(<span class="ruby-identifier">x</span>)
1355
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">'Argument must be Integer.'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">Integer</span>)
1356
+ <span class="ruby-ivar">@@reload_interval</span> = (<span class="ruby-identifier">x</span> <span class="ruby-operator">||</span> <span class="ruby-value">300</span>)
1357
+ <span class="ruby-keyword kw">end</span>
1358
+ </pre>
1359
+ </div>
1360
+ </div>
1361
+ </div>
1362
+
1363
+ <div id="method-M000014" class="method-detail">
1364
+ <a name="M000014"></a>
1365
+
1366
+ <div class="method-heading">
1367
+ <a href="#M000014" class="method-signature">
1368
+ <span class="method-name">set_config_path</span><span class="method-args">(path)</span>
1369
+ </a>
1370
+ </div>
1371
+
1372
+ <div class="method-description">
1373
+ <p>
1374
+ Adds the specified path to the list of directories to search for
1375
+ configuration files. It only allows one path to be entered at a time. If <a
1376
+ href="RConfig.html#M000037">reload</a> is disabled, it can onle be set
1377
+ once.
1378
+ </p>
1379
+ <p><a class="source-toggle" href="#"
1380
+ onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
1381
+ <div class="method-source-code" id="M000014-source">
1382
+ <pre>
1383
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 127</span>
1384
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">set_config_path</span> <span class="ruby-identifier">path</span>
1385
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@reload_disabled</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">config_paths_set?</span>
1386
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>) <span class="ruby-comment cmt"># only allow string argument
1387
+ <span class="ruby-identifier">path_sep</span> = (<span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/;/</span>) <span class="ruby-operator">?</span> <span class="ruby-value str">';'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">':'</span> <span class="ruby-comment cmt"># if string contains multiple paths
1388
+ <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">split</span>(<span class="ruby-node">/#{path_sep}+/</span>)[<span class="ruby-value">0</span>] <span class="ruby-comment cmt"># only accept first one.
1389
+
1390
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@config_paths</span>.<span class="ruby-identifier">blank?</span>
1391
+ <span class="ruby-identifier">set_config_paths</span>(<span class="ruby-identifier">path</span>)
1392
+ <span class="ruby-keyword kw">else</span>
1393
+ <span class="ruby-identifier">config_paths</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">path</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">path</span>)
1394
+ <span class="ruby-identifier">reload</span>
1395
+ <span class="ruby-ivar">@@config_paths</span>
1396
+ <span class="ruby-keyword kw">end</span>
1397
+ <span class="ruby-keyword kw">end</span>
1398
+ </pre>
1399
+ </div>
1400
+ </div>
1401
+ </div>
1402
+
1403
+ <div id="method-M000019" class="method-detail">
1404
+ <a name="M000019"></a>
1405
+
1406
+ <div class="method-heading">
1407
+ <a href="#M000019" class="method-signature">
1408
+ <span class="method-name">suffixes</span><span class="method-args">(name)</span>
1409
+ </a>
1410
+ </div>
1411
+
1412
+ <div class="method-description">
1413
+ <p>
1414
+ Returns a list of <a href="RConfig.html#M000019">suffixes</a> to try for a
1415
+ given config name.
1416
+ </p>
1417
+ <p>
1418
+ A config name with an explicit <a href="RConfig.html#M000017">overlay</a>
1419
+ (e.g.: &#8216;name_GB&#8217;) overrides any current _overlay.
1420
+ </p>
1421
+ <p>
1422
+ This allows code to specifically ask for config overlays for a particular
1423
+ locale.
1424
+ </p>
1425
+ <p><a class="source-toggle" href="#"
1426
+ onclick="toggleCode('M000019-source');return false;">[Source]</a></p>
1427
+ <div class="method-source-code" id="M000019-source">
1428
+ <pre>
1429
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 221</span>
1430
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">suffixes</span>(<span class="ruby-identifier">name</span>)
1431
+ <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
1432
+ <span class="ruby-ivar">@@suffixes</span>[<span class="ruby-identifier">name</span>] <span class="ruby-operator">||=</span>
1433
+ <span class="ruby-keyword kw">begin</span>
1434
+ <span class="ruby-identifier">ol</span> = <span class="ruby-identifier">overlay</span>
1435
+ <span class="ruby-identifier">name_x</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">dup</span>
1436
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name_x</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp re">/_([A-Z]+)$/</span>, <span class="ruby-value str">''</span>)
1437
+ <span class="ruby-identifier">ol</span> = <span class="ruby-identifier">$1</span>
1438
+ <span class="ruby-keyword kw">end</span>
1439
+ <span class="ruby-identifier">name_x</span>.<span class="ruby-identifier">freeze</span>
1440
+ <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ol</span>
1441
+ <span class="ruby-identifier">ol_</span> = <span class="ruby-identifier">ol</span>.<span class="ruby-identifier">upcase</span>
1442
+ <span class="ruby-identifier">ol</span> = <span class="ruby-identifier">ol</span>.<span class="ruby-identifier">downcase</span>
1443
+ <span class="ruby-identifier">x</span> = [ ]
1444
+ <span class="ruby-constant">SUFFIXES</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">suffix</span> <span class="ruby-operator">|</span>
1445
+ <span class="ruby-comment cmt"># Standard, no overlay:
1446
+ <span class="ruby-comment cmt"># e.g.: database_&lt;suffix&gt;.yml
1447
+ <span class="ruby-identifier">x</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">suffix</span>
1448
+
1449
+ <span class="ruby-comment cmt"># Overlay:
1450
+ <span class="ruby-comment cmt"># e.g.: database_(US|GB)_&lt;suffix&gt;.yml
1451
+ <span class="ruby-identifier">x</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">ol_</span>, <span class="ruby-identifier">suffix</span> ]
1452
+ <span class="ruby-keyword kw">end</span>
1453
+ [ <span class="ruby-identifier">name_x</span>, <span class="ruby-identifier">x</span>.<span class="ruby-identifier">freeze</span> ]
1454
+ <span class="ruby-keyword kw">else</span>
1455
+ [ <span class="ruby-identifier">name</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">freeze</span>, <span class="ruby-constant">SUFFIXES</span>.<span class="ruby-identifier">freeze</span> ]
1456
+ <span class="ruby-keyword kw">end</span>
1457
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">freeze</span>
1458
+
1459
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;suffixes(#{name}) =&gt; #{result.inspect}&quot;</span>
1460
+
1461
+ <span class="ruby-identifier">result</span>
1462
+ <span class="ruby-keyword kw">end</span>
1463
+ <span class="ruby-keyword kw">end</span>
1464
+ </pre>
1465
+ </div>
1466
+ </div>
1467
+ </div>
1468
+
1469
+ <div id="method-M000043" class="method-detail">
1470
+ <a name="M000043"></a>
1471
+
1472
+ <div class="method-heading">
1473
+ <a href="#M000043" class="method-signature">
1474
+ <span class="method-name">verbose=</span><span class="method-args">(x)</span>
1475
+ </a>
1476
+ </div>
1477
+
1478
+ <div class="method-description">
1479
+ <p>
1480
+ Helper method for white-box testing and debugging. Sets the flag indicating
1481
+ whether or not to log errors and application run-time information.
1482
+ </p>
1483
+ <p><a class="source-toggle" href="#"
1484
+ onclick="toggleCode('M000043-source');return false;">[Source]</a></p>
1485
+ <div class="method-source-code" id="M000043-source">
1486
+ <pre>
1487
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 736</span>
1488
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">verbose=</span>(<span class="ruby-identifier">x</span>)
1489
+ <span class="ruby-ivar">@@verbose</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-value">? </span><span class="ruby-keyword kw">false</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">x</span>;
1490
+ <span class="ruby-keyword kw">end</span>
1491
+ </pre>
1492
+ </div>
1493
+ </div>
1494
+ </div>
1495
+
1496
+ <div id="method-M000031" class="method-detail">
1497
+ <a name="M000031"></a>
1498
+
1499
+ <div class="method-heading">
1500
+ <a href="#M000031" class="method-signature">
1501
+ <span class="method-name">with_file</span><span class="method-args">(name, *args)</span>
1502
+ </a>
1503
+ </div>
1504
+
1505
+ <div class="method-description">
1506
+ <p>
1507
+ Get the value specified by the args, in the file specified by th name
1508
+ </p>
1509
+ <p><a class="source-toggle" href="#"
1510
+ onclick="toggleCode('M000031-source');return false;">[Source]</a></p>
1511
+ <div class="method-source-code" id="M000031-source">
1512
+ <pre>
1513
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 547</span>
1514
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">with_file</span>(<span class="ruby-identifier">name</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
1515
+ <span class="ruby-comment cmt"># verbose_log &quot;with_file(#{name.inspect}, #{args.inspect})&quot;; result =
1516
+ <span class="ruby-identifier">args</span>.<span class="ruby-identifier">inject</span>(<span class="ruby-identifier">get_config_file</span>(<span class="ruby-identifier">name</span>)) { <span class="ruby-operator">|</span> <span class="ruby-identifier">v</span>, <span class="ruby-identifier">i</span> <span class="ruby-operator">|</span>
1517
+ <span class="ruby-comment cmt"># verbose_log &quot;v = #{v.inspect}, i = #{i.inspect}&quot;
1518
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">v</span>
1519
+ <span class="ruby-keyword kw">when</span> <span class="ruby-constant">Hash</span>
1520
+ <span class="ruby-identifier">v</span>[<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_s</span>]
1521
+ <span class="ruby-keyword kw">when</span> <span class="ruby-constant">Array</span>
1522
+ <span class="ruby-identifier">i</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Integer</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">v</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
1523
+ <span class="ruby-keyword kw">else</span>
1524
+ <span class="ruby-keyword kw">nil</span>
1525
+ <span class="ruby-keyword kw">end</span>
1526
+ }
1527
+ <span class="ruby-comment cmt"># verbose_log &quot;with_file(#{name.inspect}, #{args.inspect}) =&gt; #{result.inspect}&quot;; result
1528
+ <span class="ruby-keyword kw">end</span>
1529
+ </pre>
1530
+ </div>
1531
+ </div>
1532
+ </div>
1533
+
1534
+ <h3 class="section-bar">Protected Class methods</h3>
1535
+
1536
+ <div id="method-M000048" class="method-detail">
1537
+ <a name="M000048"></a>
1538
+
1539
+ <div class="method-heading">
1540
+ <a href="#M000048" class="method-signature">
1541
+ <span class="method-name">filename_for_name</span><span class="method-args">(name, dir = config_paths[0], ext = :yml)</span>
1542
+ </a>
1543
+ </div>
1544
+
1545
+ <div class="method-description">
1546
+ <p>
1547
+ Get complete file name, including file path for the given config name and
1548
+ directory.
1549
+ </p>
1550
+ <p><a class="source-toggle" href="#"
1551
+ onclick="toggleCode('M000048-source');return false;">[Source]</a></p>
1552
+ <div class="method-source-code" id="M000048-source">
1553
+ <pre>
1554
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 790</span>
1555
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">filename_for_name</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">dir</span> = <span class="ruby-identifier">config_paths</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">ext</span> = <span class="ruby-identifier">:yml</span>)
1556
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">dir</span>, <span class="ruby-node">&quot;#{name}.#{ext}&quot;</span>)
1557
+ <span class="ruby-keyword kw">end</span>
1558
+ </pre>
1559
+ </div>
1560
+ </div>
1561
+ </div>
1562
+
1563
+ <div id="method-M000046" class="method-detail">
1564
+ <a name="M000046"></a>
1565
+
1566
+ <div class="method-heading">
1567
+ <a href="#M000046" class="method-signature">
1568
+ <span class="method-name">fire_on_load</span><span class="method-args">(name)</span>
1569
+ </a>
1570
+ </div>
1571
+
1572
+ <div class="method-description">
1573
+ <p>
1574
+ Executes all of the <a href="RConfig.html#M000037">reload</a> callbacks
1575
+ registered to the specified config name, and all of the callbacks
1576
+ registered to run on any config, as specified by the :ANY symbol.
1577
+ </p>
1578
+ <p><a class="source-toggle" href="#"
1579
+ onclick="toggleCode('M000046-source');return false;">[Source]</a></p>
1580
+ <div class="method-source-code" id="M000046-source">
1581
+ <pre>
1582
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 764</span>
1583
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">fire_on_load</span>(<span class="ruby-identifier">name</span>)
1584
+ <span class="ruby-identifier">callbacks</span> =
1585
+ (<span class="ruby-ivar">@@on_load</span>[<span class="ruby-value str">'ANY'</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">EMPTY_ARRAY</span>) <span class="ruby-operator">+</span>
1586
+ (<span class="ruby-ivar">@@on_load</span>[<span class="ruby-identifier">name</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">EMPTY_ARRAY</span>)
1587
+ <span class="ruby-identifier">callbacks</span>.<span class="ruby-identifier">uniq!</span>
1588
+ <span class="ruby-identifier">verbose_log</span> <span class="ruby-node">&quot;fire_on_load(#{name.inspect}): callbacks[#{callbacks.inspect}]&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">callbacks</span>.<span class="ruby-identifier">empty?</span>
1589
+ <span class="ruby-identifier">callbacks</span>.<span class="ruby-identifier">each</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cb</span><span class="ruby-operator">|</span> <span class="ruby-identifier">cb</span>.<span class="ruby-identifier">call</span>()}
1590
+ <span class="ruby-keyword kw">end</span>
1591
+ </pre>
1592
+ </div>
1593
+ </div>
1594
+ </div>
1595
+
1596
+ <div id="method-M000047" class="method-detail">
1597
+ <a name="M000047"></a>
1598
+
1599
+ <div class="method-heading">
1600
+ <a href="#M000047" class="method-signature">
1601
+ <span class="method-name">flush_cache</span><span class="method-args">()</span>
1602
+ </a>
1603
+ </div>
1604
+
1605
+ <div class="method-description">
1606
+ <p>
1607
+ Flushes cached config data. This should avoided in production environments,
1608
+ if possible.
1609
+ </p>
1610
+ <p><a class="source-toggle" href="#"
1611
+ onclick="toggleCode('M000047-source');return false;">[Source]</a></p>
1612
+ <div class="method-source-code" id="M000047-source">
1613
+ <pre>
1614
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 777</span>
1615
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">flush_cache</span>
1616
+ <span class="ruby-ivar">@@suffixes</span> = { }
1617
+ <span class="ruby-ivar">@@cache</span> = { }
1618
+ <span class="ruby-ivar">@@cache_files</span> = { }
1619
+ <span class="ruby-ivar">@@cache_hash</span> = { }
1620
+ <span class="ruby-ivar">@@last_auto_check</span> = { }
1621
+ <span class="ruby-keyword kw">self</span>
1622
+ <span class="ruby-keyword kw">end</span>
1623
+ </pre>
1624
+ </div>
1625
+ </div>
1626
+ </div>
1627
+
1628
+ <div id="method-M000049" class="method-detail">
1629
+ <a name="M000049"></a>
1630
+
1631
+ <div class="method-heading">
1632
+ <a href="#M000049" class="method-signature">
1633
+ <span class="method-name">verbose_log</span><span class="method-args">(*args)</span>
1634
+ </a>
1635
+ </div>
1636
+
1637
+ <div class="method-description">
1638
+ <p>
1639
+ Helper method for logging verbose messages.
1640
+ </p>
1641
+ <p><a class="source-toggle" href="#"
1642
+ onclick="toggleCode('M000049-source');return false;">[Source]</a></p>
1643
+ <div class="method-source-code" id="M000049-source">
1644
+ <pre>
1645
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 797</span>
1646
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">verbose_log</span> <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>
1647
+ <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-identifier">args</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@verbose</span>
1648
+ <span class="ruby-keyword kw">end</span>
1649
+ </pre>
1650
+ </div>
1651
+ </div>
1652
+ </div>
1653
+
1654
+ <h3 class="section-bar">Public Instance methods</h3>
1655
+
1656
+ <div id="method-M000042" class="method-detail">
1657
+ <a name="M000042"></a>
1658
+
1659
+ <div class="method-heading">
1660
+ <a href="#M000042" class="method-signature">
1661
+ <span class="method-name">[]</span><span class="method-args">(key)</span>
1662
+ </a>
1663
+ </div>
1664
+
1665
+ <div class="method-description">
1666
+ <p>
1667
+ Creating an instance isn&#8216;t required. But if you just have to a
1668
+ reference to <a href="RConfig.html">RConfig</a> you can get it using
1669
+ RConfig.instance. It&#8216;s a singleton, so there&#8216;s never more than
1670
+ one. The instance has no state, and no methods of it&#8216;s own accept
1671
+ what it inherits from object. But this method delegates back to the class,
1672
+ so configuration data is still accessible.
1673
+ </p>
1674
+ <p>
1675
+ Example:
1676
+ </p>
1677
+ <pre>
1678
+ config = RConfig.instance
1679
+ config[:foo] =&gt; RConfig[:foo]
1680
+ </pre>
1681
+ <p><a class="source-toggle" href="#"
1682
+ onclick="toggleCode('M000042-source');return false;">[Source]</a></p>
1683
+ <div class="method-source-code" id="M000042-source">
1684
+ <pre>
1685
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 727</span>
1686
+ <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">key</span>)
1687
+ <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>[<span class="ruby-identifier">key</span>]
1688
+ <span class="ruby-keyword kw">end</span>
1689
+ </pre>
1690
+ </div>
1691
+ </div>
1692
+ </div>
1693
+
1694
+ <div id="method-M000041" class="method-detail">
1695
+ <a name="M000041"></a>
1696
+
1697
+ <div class="method-heading">
1698
+ <a href="#M000041" class="method-signature">
1699
+ <span class="method-name">method_missing</span><span class="method-args">(method, *args)</span>
1700
+ </a>
1701
+ </div>
1702
+
1703
+ <div class="method-description">
1704
+ <p>
1705
+ Creating an instance isn&#8216;t required. But if you just have to a
1706
+ reference to <a href="RConfig.html">RConfig</a> you can get it using
1707
+ RConfig.instance. It&#8216;s a singleton, so there&#8216;s never more than
1708
+ one. The instance has no state, and no methods of it&#8216;s own accept
1709
+ what it inherits from object. But this method delegates back to the class,
1710
+ so configuration data is still accessible.
1711
+ </p>
1712
+ <p>
1713
+ Example:
1714
+ </p>
1715
+ <pre>
1716
+ config = RConfig.instance
1717
+ config.provider(:foo) =&gt; RConfig.provider(:foo)
1718
+ config.provider.foo =&gt; RConfig.provider.foo
1719
+ </pre>
1720
+ <p><a class="source-toggle" href="#"
1721
+ onclick="toggleCode('M000041-source');return false;">[Source]</a></p>
1722
+ <div class="method-source-code" id="M000041-source">
1723
+ <pre>
1724
+ <span class="ruby-comment cmt"># File lib/rconfig/rconfig.rb, line 710</span>
1725
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">method_missing</span>(<span class="ruby-identifier">method</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
1726
+ <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">method_missing</span>(<span class="ruby-identifier">method</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
1727
+ <span class="ruby-keyword kw">end</span>
1728
+ </pre>
1729
+ </div>
1730
+ </div>
1731
+ </div>
1732
+
1733
+
1734
+ </div>
1735
+
1736
+
1737
+ </div>
1738
+
1739
+
1740
+ <div id="validator-badges">
1741
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
1742
+ </div>
1743
+
1744
+ </body>
1745
+ </html>