configurability 3.0.0.pre20161130174408 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +2 -0
- data.tar.gz.sig +0 -0
- data/History.md +3 -1
- data/LICENSE +27 -0
- data/Manifest.txt +1 -0
- data/README.md +166 -66
- data/examples/config.yml +2 -0
- data/examples/readme.rb +14 -0
- data/lib/configurability.rb +10 -23
- metadata +9 -7
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5b8b9694625491f3e546adeaccceb6c954d5ec3
|
4
|
+
data.tar.gz: b9d69f613e03aeb99cec8c0a4d38f7dc5ba85d15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2cf44e75c61f75d701d72733a417e837d179b7c948cac985107ba212cf6df689f1fc62b6cb96d2e8c0e41f32a6c3324006970903254f1423a9cd7d1a7dc746e
|
7
|
+
data.tar.gz: 11fff4eb97457b4bd3ee7c0dfc4a38c95c09b403e5cefd4822692c03ef1ec99239061165eef28ff8aea8b5f3eb523420577a58fcc09e81bc468a1fdb52e67481
|
checksums.yaml.gz.sig
ADDED
@@ -0,0 +1,2 @@
|
|
1
|
+
Bv�;ب<��C�㇕��|�v�l���>rH2˖C�@�\4�x�[�"��@4��'�m63�ƚ<���\f�+CWa��`���&E�+$R��#
|
2
|
+
��,l��'�Z����@U��̩4��l9J�[�Õ�&��Jʐ�E߁�Y��eR��ej�2C���S��Z����G�<�|B�d�3f^���vo���.D������''�����lk�T.t��i>�w�J����J�˽�C��O��s�4+���W0����}�1զ[l�؇{|�a�0?��%�Q��%α���Rj���-2���@3�ꐨg����/X��q��Ϳo뙶/N���>���j˓}�b�5��l3��<��L9�o,�so�>7/�a��N.
|
data.tar.gz.sig
ADDED
Binary file
|
data/History.md
CHANGED
data/LICENSE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Copyright (c) 2010-2016 Michael Granger and Mahlon E. Smith
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
|
10
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
this list of conditions and the following disclaimer in the documentation
|
12
|
+
and/or other materials provided with the distribution.
|
13
|
+
|
14
|
+
* Neither the name of the author/s, nor the names of the project's
|
15
|
+
contributors may be used to endorse or promote products derived from this
|
16
|
+
software without specific prior written permission.
|
17
|
+
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
22
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -16,92 +16,180 @@ github
|
|
16
16
|
|
17
17
|
## Description
|
18
18
|
|
19
|
-
Configurability is a unified,
|
19
|
+
Configurability is a unified, non-intrusive, assume-nothing configuration system
|
20
20
|
for Ruby. It lets you keep the configuration for multiple objects in a single
|
21
21
|
config file, load the file when it's convenient for you, and distribute the
|
22
22
|
configuration when you're ready, sending it everywhere it needs to go with a
|
23
23
|
single action.
|
24
24
|
|
25
25
|
|
26
|
-
|
27
26
|
## Installation
|
28
27
|
|
29
28
|
gem install configurability
|
30
29
|
|
31
30
|
|
31
|
+
## Example
|
32
|
+
|
33
|
+
# user.rb
|
34
|
+
require 'configurability'
|
35
|
+
|
36
|
+
class User
|
37
|
+
extend Configurability
|
38
|
+
|
39
|
+
configurability( :users ) do
|
40
|
+
setting :min_password_length, default: 6
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
# config.yml
|
47
|
+
users:
|
48
|
+
min_password_length: 12
|
49
|
+
|
50
|
+
In pry:
|
51
|
+
|
52
|
+
[1] pry(main)> require 'user'
|
53
|
+
=> true
|
54
|
+
[2] pry(main)> User.min_password_length
|
55
|
+
=> 6
|
56
|
+
[3] pry(main)> config = Configurability::Config.load( "config.yml" )
|
57
|
+
=> #<Configurability::Config:0x7fd99a0f635816 loaded from config.yml ...>
|
58
|
+
[4] pry(main)> config.install
|
59
|
+
=> [Loggability, User]
|
60
|
+
[5] pry(main)> User.min_password_length
|
61
|
+
=> 12
|
62
|
+
|
63
|
+
|
32
64
|
## Usage
|
33
65
|
|
34
|
-
To add
|
35
|
-
|
66
|
+
To add Configurability to your module or class, just `extend` it and declare
|
67
|
+
some settings:
|
36
68
|
|
37
69
|
require 'configurability'
|
38
|
-
class
|
70
|
+
class Database
|
39
71
|
extend Configurability
|
72
|
+
|
73
|
+
configurability( :db ) do
|
74
|
+
setting :url, default: 'sqlite:/'
|
75
|
+
setting :user
|
76
|
+
setting :password
|
77
|
+
end
|
40
78
|
end
|
41
79
|
|
42
|
-
|
80
|
+
This sets up the class to use the `db` config key, and adds attributes for the
|
81
|
+
three subkey settings under it (with getters and setters) to the class. It also
|
82
|
+
adds a `configure` class method that will set whichever of the settings are
|
83
|
+
passed to it, defaulting the `url` to the provided value if it's not given.
|
84
|
+
|
85
|
+
If your config file (e.g., `config.yml`) looks like this:
|
86
|
+
|
87
|
+
--
|
88
|
+
db:
|
89
|
+
url: 'postgres:/acme'
|
90
|
+
user: tim
|
91
|
+
password: "pXVvVY,YjWNRRi[yPWx4"
|
92
|
+
|
93
|
+
You can configure the `Database` class (and all other objects extended with
|
94
|
+
Configurability) with it like so:
|
95
|
+
|
96
|
+
require 'configurability/config'
|
97
|
+
|
98
|
+
config = Configurability::Config.load( 'config.yml' )
|
99
|
+
Configurability.configure_objects( config )
|
100
|
+
|
101
|
+
After this happens you can access the configuration values like this:
|
102
|
+
|
103
|
+
Database.url
|
104
|
+
# => "postgres:/acme"
|
105
|
+
Database.user
|
106
|
+
# => "tim"
|
107
|
+
Database.password
|
108
|
+
# => "pXVvVY,YjWNRRi[yPWx4"
|
109
|
+
|
110
|
+
|
111
|
+
### More Details
|
112
|
+
|
113
|
+
Configurability is implemented using `Module#extend`, so there's very little
|
114
|
+
magic going on. Every object (including Class and Module objects) that is
|
115
|
+
extended with Configurability is registered in an Array of objects that will be
|
116
|
+
configured when the config is loaded.
|
117
|
+
|
118
|
+
You extend a Class, of course, as in the above example:
|
119
|
+
|
120
|
+
class MyClass
|
121
|
+
extend Configurabtility
|
122
|
+
end
|
123
|
+
|
124
|
+
But you can also add it to individual instances of objects to configure them
|
125
|
+
separately:
|
43
126
|
|
44
127
|
user = User.new
|
45
128
|
user.extend( Configurability )
|
46
129
|
|
47
|
-
|
130
|
+
When you call:
|
48
131
|
|
49
132
|
Configurability.configure_objects( config )
|
50
133
|
|
51
|
-
|
52
|
-
been
|
53
|
-
|
54
|
-
|
55
|
-
|
134
|
+
the specified `config` will be spliced up and sent to all the objects that have
|
135
|
+
been registered. `Configurability` expects the configuration to be broken
|
136
|
+
up into a number of sections, each of which is accessible via either a method
|
137
|
+
with the _section name_ or the index operator (`#[]`) that takes the _section
|
138
|
+
name_ as a `Symbol` or a `String`:
|
56
139
|
|
57
140
|
config.section_name
|
58
141
|
config[:section_name]
|
59
142
|
config['section_name']
|
60
143
|
|
61
|
-
The section name is based on an object's _config key_, which is the
|
62
|
-
|
63
|
-
|
144
|
+
The section name is based on an object's _config key_, which is the argument
|
145
|
+
you specify when declaring your settings. If you don't provide one, it defaults
|
146
|
+
to the name of the object that is being extended with all non-word characters
|
147
|
+
converted into underscores (`_`). It will also have any leading Ruby-style
|
64
148
|
namespaces stripped, e.g.,
|
65
149
|
|
66
|
-
|
67
|
-
|
68
|
-
|
150
|
+
MyClass -> :myclass
|
151
|
+
Acme::User -> :user
|
152
|
+
"J. Random Hacker" -> :j_random_hacker
|
69
153
|
|
70
154
|
If the object responds to the `#name` method, then the return value of that
|
71
155
|
method is used to derive the name. If it doesn't have a `#name` method, the
|
72
156
|
name of its `Class` will be used instead. If its class is anonymous, then
|
73
157
|
the object's config key will be `:anonymous`.
|
74
158
|
|
75
|
-
When the configuration is loaded,
|
76
|
-
|
77
|
-
|
159
|
+
When the configuration is loaded, any attribute writers that correspond with
|
160
|
+
keys of the config will be called with the configured values, and an instance
|
161
|
+
variable called `@config` is set to the appropriate section of the config.
|
78
162
|
|
79
163
|
As you add more objects to your configuration, it may be useful to group
|
80
164
|
related sections together. You can specify that your object's configuration
|
81
|
-
is part of a group by
|
82
|
-
|
165
|
+
is part of a group by specifying a config key with either a dot if it's a String or a double underscore if it's a Symbol. E.g.,
|
166
|
+
|
167
|
+
# Read from the `db` subsection of `myapp`
|
168
|
+
configurability( 'myapp.db' )
|
169
|
+
|
170
|
+
# Same thing, but with a symbol:
|
171
|
+
configurability( :myapp__db )
|
83
172
|
|
84
173
|
|
85
174
|
## Customization
|
86
175
|
|
87
|
-
The default behavior above is just provided as a reasonable default;
|
88
|
-
|
89
|
-
|
176
|
+
The default behavior above is just provided as a reasonable default; you may
|
177
|
+
want to customize one or two things about how configuration is handled in your
|
178
|
+
objects.
|
90
179
|
|
91
180
|
|
92
181
|
### Setting a Custom Config Key
|
93
182
|
|
94
|
-
|
95
|
-
|
96
|
-
config key, either using a declarative method:
|
183
|
+
If you want to customize the config key without calling `configurability` you
|
184
|
+
can do that by declaring it with the `config_key` method:
|
97
185
|
|
98
186
|
class OutputFormatter
|
99
187
|
extend Configurability
|
100
188
|
config_key :format
|
101
189
|
end
|
102
190
|
|
103
|
-
or by overriding the `#config_key` method and returning the desired
|
104
|
-
as a Symbol:
|
191
|
+
or by overriding the `#config_key` method youtself and returning the desired
|
192
|
+
value as a Symbol:
|
105
193
|
|
106
194
|
class User
|
107
195
|
extend Configurability
|
@@ -121,9 +209,9 @@ a `#configure` method that takes the config section as an argument:
|
|
121
209
|
|
122
210
|
config_key :webserver
|
123
211
|
|
124
|
-
def self::configure(
|
125
|
-
@default_bind_addr =
|
126
|
-
@default_port =
|
212
|
+
def self::configure( config )
|
213
|
+
@default_bind_addr = config[:host]
|
214
|
+
@default_port = config[:port]
|
127
215
|
end
|
128
216
|
end
|
129
217
|
|
@@ -142,28 +230,28 @@ Configurability, but it's also useful on its own.
|
|
142
230
|
Here's a quick example to demonstrate some of its features. Suppose you have a
|
143
231
|
config file that looks like this:
|
144
232
|
|
145
|
-
---
|
146
|
-
database:
|
147
|
-
development:
|
233
|
+
---
|
234
|
+
database:
|
235
|
+
development:
|
148
236
|
adapter: sqlite3
|
149
237
|
database: db/dev.db
|
150
238
|
pool: 5
|
151
239
|
timeout: 5000
|
152
|
-
testing:
|
240
|
+
testing:
|
153
241
|
adapter: sqlite3
|
154
242
|
database: db/testing.db
|
155
243
|
pool: 2
|
156
244
|
timeout: 5000
|
157
|
-
production:
|
245
|
+
production:
|
158
246
|
adapter: postgres
|
159
247
|
database: fixedassets
|
160
248
|
pool: 25
|
161
249
|
timeout: 50
|
162
|
-
ldap:
|
250
|
+
ldap:
|
163
251
|
uri: ldap://ldap.acme.com/dc=acme,dc=com
|
164
252
|
bind_dn: cn=web,dc=acme,dc=com
|
165
253
|
bind_pass: Mut@ge.Mix@ge
|
166
|
-
branding:
|
254
|
+
branding:
|
167
255
|
header: "#333"
|
168
256
|
title: "#dedede"
|
169
257
|
anchor: "#9fc8d4"
|
@@ -172,7 +260,7 @@ You can load this config like so:
|
|
172
260
|
|
173
261
|
require 'configurability/config'
|
174
262
|
config = Configurability::Config.load( 'examples/config.yml' )
|
175
|
-
# => #<Configurability::Config:0x1018a7c7016 loaded from
|
263
|
+
# => #<Configurability::Config:0x1018a7c7016 loaded from
|
176
264
|
examples/config.yml; 3 sections: database, ldap, branding>
|
177
265
|
|
178
266
|
And then access it using struct-like methods:
|
@@ -206,12 +294,17 @@ both:
|
|
206
294
|
config['branding'][:anchor]
|
207
295
|
# => "#9fc8d4"
|
208
296
|
|
209
|
-
You can install it via the Configurability
|
297
|
+
You can install it (i.e., configure your objects) via the Configurability
|
298
|
+
interface:
|
210
299
|
|
211
300
|
config.install
|
212
301
|
|
213
|
-
|
214
|
-
|
302
|
+
If you change the values in the config object, they won't propagate
|
303
|
+
automatically; you'll need to call `#install` on it again to send the changes to
|
304
|
+
the objects being configured.
|
305
|
+
|
306
|
+
You can check to see if the file the config was loaded from has changed since
|
307
|
+
you loaded it:
|
215
308
|
|
216
309
|
config.changed?
|
217
310
|
# => false
|
@@ -222,7 +315,7 @@ loaded it:
|
|
222
315
|
# => true
|
223
316
|
|
224
317
|
If it has changed (or even if it hasn't), you can reload it, which
|
225
|
-
automatically re-installs it via the Configurability interface:
|
318
|
+
automatically re-installs it via the Configurability interface if it has:
|
226
319
|
|
227
320
|
config.reload
|
228
321
|
|
@@ -235,36 +328,43 @@ write the modified config back out to the same file:
|
|
235
328
|
then dump it to a YAML string:
|
236
329
|
|
237
330
|
config.dump
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
331
|
+
# => "--- \ndatabase: \n development: \n adapter: sqlite3\n
|
332
|
+
database: db/dev.db\n pool: 5\n timeout: 5000\n testing: \n
|
333
|
+
adapter: mysql\n database: t_fixedassets\n pool: 2\n timeout:
|
334
|
+
5000\n production: \n adapter: postgres\n database:
|
335
|
+
fixedassets\n pool: 25\n timeout: 50\nldap: \n uri:
|
336
|
+
ldap://ldap.acme.com/dc=acme,dc=com\n bind_dn:
|
337
|
+
cn=web,dc=acme,dc=com\n bind_pass: Mut@ge.Mix@ge\nbranding: \n
|
338
|
+
header: \"#333\"\n title: \"#dedede\"\n anchor: \"#9fc8d4\"\n"
|
246
339
|
|
247
340
|
or write it back to the file it was loaded from:
|
248
341
|
|
249
|
-
|
342
|
+
config.write
|
343
|
+
|
344
|
+
Note that this is just using `YAML.dump`, so any comments, ordering, or other
|
345
|
+
nice formatting you have in your config file will be clobbered if you rewrite
|
346
|
+
it.
|
250
347
|
|
251
348
|
|
252
349
|
## Configuration Defaults
|
253
350
|
|
254
351
|
It's a good idea to provide a set of reasonable defaults for any configured
|
255
|
-
object.
|
256
|
-
|
257
|
-
|
352
|
+
object. The defaults for all settings are added to extended Classes and Modules
|
353
|
+
as a constant named `CONFIG_DEFAULTS`. You can, of course set this constant
|
354
|
+
yourself as well.
|
258
355
|
|
259
|
-
|
260
|
-
|
356
|
+
Configurability provides a `defaults` method that will return the hash of
|
357
|
+
settings and their default values from the `CONFIG_DEFAULTS` constant. You can
|
358
|
+
also override the `defaults` method yourself (and super to the original) if you
|
359
|
+
wish to do something different.
|
261
360
|
|
262
361
|
There are also a couple of useful functions built on top of this method:
|
263
362
|
|
264
363
|
gather_defaults
|
265
|
-
: You can fetch a Hash of the default config values of all objects that have
|
266
|
-
with Configurability by calling
|
267
|
-
|
364
|
+
: You can fetch a Hash of the default config values of all objects that have
|
365
|
+
been extended with Configurability by calling
|
366
|
+
`Configurabilty.gather_defaults`. You can also pass an object that responds
|
367
|
+
to `#merge!` to the method to merge the defaults into an existing
|
268
368
|
config.
|
269
369
|
|
270
370
|
default_config
|
@@ -276,9 +376,9 @@ default_config
|
|
276
376
|
## Development
|
277
377
|
|
278
378
|
You can submit bug reports, suggestions, clone it with Mercurial, and
|
279
|
-
read more about future plans at
|
280
|
-
{the project page}[http://bitbucket.org/ged/configurability]. If you
|
281
|
-
prefer Git, there is also a
|
379
|
+
read more about future plans at
|
380
|
+
{the project page}[http://bitbucket.org/ged/configurability]. If you
|
381
|
+
prefer Git, there is also a
|
282
382
|
{Github mirror}[https://github.com/ged/configurability].
|
283
383
|
|
284
384
|
After checking out the source, run:
|
data/examples/config.yml
CHANGED
data/examples/readme.rb
ADDED
data/lib/configurability.rb
CHANGED
@@ -3,12 +3,7 @@
|
|
3
3
|
require 'loggability'
|
4
4
|
require 'yaml'
|
5
5
|
|
6
|
-
# A configuration
|
7
|
-
#
|
8
|
-
# == Author/s
|
9
|
-
#
|
10
|
-
# * Michael Granger <ged@FaerieMUD.org>
|
11
|
-
#
|
6
|
+
# A unified, unintrusive, assume-nothing configuration system for Ruby
|
12
7
|
module Configurability
|
13
8
|
extend Loggability
|
14
9
|
|
@@ -21,7 +16,7 @@ module Configurability
|
|
21
16
|
VERSION = '3.0.0'
|
22
17
|
|
23
18
|
# Version-control revision constant
|
24
|
-
REVISION = %q$Revision:
|
19
|
+
REVISION = %q$Revision: f363eb5811b9 $
|
25
20
|
|
26
21
|
require 'configurability/deferred_config'
|
27
22
|
|
@@ -35,10 +30,6 @@ module Configurability
|
|
35
30
|
### The loaded config (if there is one)
|
36
31
|
@loaded_config = nil
|
37
32
|
|
38
|
-
### The hash of configuration calls that have already taken place -- the keys are
|
39
|
-
### Method objects for the configure methods of the configured objects, and the values
|
40
|
-
### are the config section it was called with
|
41
|
-
@configured = Hash.new( false )
|
42
33
|
|
43
34
|
class << self
|
44
35
|
|
@@ -48,9 +39,6 @@ module Configurability
|
|
48
39
|
# the loaded configuration (after ::configure_objects has been called at least once)
|
49
40
|
attr_accessor :loaded_config
|
50
41
|
|
51
|
-
# the hash of configure methods => config sections which have already been installed
|
52
|
-
attr_reader :configured
|
53
|
-
|
54
42
|
end
|
55
43
|
|
56
44
|
|
@@ -121,7 +109,6 @@ module Configurability
|
|
121
109
|
### If a configuration has been loaded (via {#configure_objects}), clear it.
|
122
110
|
def self::reset
|
123
111
|
self.loaded_config = nil
|
124
|
-
self.configured.clear
|
125
112
|
end
|
126
113
|
|
127
114
|
|
@@ -205,6 +192,12 @@ module Configurability
|
|
205
192
|
end
|
206
193
|
|
207
194
|
|
195
|
+
### Return the specified +key+ normalized into a valid Symbol config key.
|
196
|
+
def self::normalize_config_key( key )
|
197
|
+
return key.to_s.gsub( /\./, '__' ).to_sym
|
198
|
+
end
|
199
|
+
|
200
|
+
|
208
201
|
### Gather the default configuration in a Configurability::Config object and return it.
|
209
202
|
def self::default_config
|
210
203
|
return self.gather_defaults( Configurability::Config.new )
|
@@ -230,7 +223,7 @@ module Configurability
|
|
230
223
|
### Set the config key of the object.
|
231
224
|
def config_key=( sym )
|
232
225
|
Configurability.configurable_objects |= [ self ]
|
233
|
-
@config_key = normalize_config_key( sym )
|
226
|
+
@config_key = Configurability.normalize_config_key( sym )
|
234
227
|
end
|
235
228
|
|
236
229
|
|
@@ -279,12 +272,6 @@ module Configurability
|
|
279
272
|
end
|
280
273
|
|
281
274
|
|
282
|
-
### Return the specified +key+ normalized into a valid Symbol config key.
|
283
|
-
def normalize_config_key( key )
|
284
|
-
return key.to_s.gsub( /\./, '__' ).to_sym
|
285
|
-
end
|
286
|
-
|
287
|
-
|
288
275
|
#
|
289
276
|
# :section: Configuration settings block
|
290
277
|
#
|
@@ -322,7 +309,7 @@ module Configurability
|
|
322
309
|
### The default implementation of the method called by ::gather_defaults when
|
323
310
|
### gathering configuration defaults. This method expects either a
|
324
311
|
### +DEFAULT_CONFIG+ or a +CONFIG_DEFAULTS+ constant to contain the configuration
|
325
|
-
### defaults, and will just return the +fallback+ value if neither exists.
|
312
|
+
### defaults, and will just return the +fallback+ value if neither exists.
|
326
313
|
def defaults( fallback=nil )
|
327
314
|
|
328
315
|
return fallback unless respond_to?( :const_defined? )
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: configurability
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
w8aNA5re5+Rt/Vvjxj5AcEnZnZiz5x959NaddQocX32Z1unHw44pzRNUur1GInfW
|
37
37
|
p4vpx2kUSFSAGjtCbDGTNV2AH8w9OU4xEmNz8c5lyoA=
|
38
38
|
-----END CERTIFICATE-----
|
39
|
-
date: 2016-12-
|
39
|
+
date: 2016-12-28 00:00:00.000000000 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: loggability
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '3.15'
|
153
153
|
description: |-
|
154
|
-
Configurability is a unified,
|
154
|
+
Configurability is a unified, non-intrusive, assume-nothing configuration system
|
155
155
|
for Ruby. It lets you keep the configuration for multiple objects in a single
|
156
156
|
config file, load the file when it's convenient for you, and distribute the
|
157
157
|
configuration when you're ready, sending it everywhere it needs to go with a
|
@@ -169,12 +169,14 @@ extra_rdoc_files:
|
|
169
169
|
files:
|
170
170
|
- ChangeLog
|
171
171
|
- History.md
|
172
|
+
- LICENSE
|
172
173
|
- Manifest.txt
|
173
174
|
- README.md
|
174
175
|
- Rakefile
|
175
176
|
- bin/configurability
|
176
177
|
- examples/basicconfig.rb
|
177
178
|
- examples/config.yml
|
179
|
+
- examples/readme.rb
|
178
180
|
- lib/configurability.rb
|
179
181
|
- lib/configurability/behavior.rb
|
180
182
|
- lib/configurability/config.rb
|
@@ -201,14 +203,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
201
203
|
version: 2.2.0
|
202
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
205
|
requirements:
|
204
|
-
- - "
|
206
|
+
- - ">="
|
205
207
|
- !ruby/object:Gem::Version
|
206
|
-
version:
|
208
|
+
version: '0'
|
207
209
|
requirements: []
|
208
210
|
rubyforge_project:
|
209
211
|
rubygems_version: 2.6.8
|
210
212
|
signing_key:
|
211
213
|
specification_version: 4
|
212
|
-
summary: Configurability is a unified,
|
213
|
-
for Ruby
|
214
|
+
summary: Configurability is a unified, non-intrusive, assume-nothing configuration
|
215
|
+
system for Ruby
|
214
216
|
test_files: []
|
metadata.gz.sig
ADDED
Binary file
|