configurability 2.1.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 06d07154d070a00edad0282c0dc59e0c5e66ef95
4
- data.tar.gz: a4b60f5580fd34ca3d8d84adc19628381fb2c640
3
+ metadata.gz: 17a4c6df3cb0a6943ed03e5dbcd4947b1cade237
4
+ data.tar.gz: fcb169f4effc4a6230ef6ce25d43687dcead2e1c
5
5
  SHA512:
6
- metadata.gz: d72df2c94b3d9d35fa8ec2b7485ca54c7c99a0f24fc061c6bf21c8c1f6d16a4f6e66aa8a2c87c6b988bf8e55168e7c805453a5a8f696656fefadd332101d993a
7
- data.tar.gz: 0e9900c3689b65a0e4d5c6e63e66a953bace0b1f2cc94735369cdc6406756c8def7c60fe803fd2cddace09298816a6c3a4443d2f13253b1825f8238ecbcb7ea3
6
+ metadata.gz: fb1529ea0da93d38299926bb04cf6b2d45fb7b2414147455d771e0ca11418d9107750aaaf33541c96ceec2a26930ed5ded8d77202e3a04dbd99db1aa8bff384c
7
+ data.tar.gz: 1f3b8b3a8426134c7d8dcee6ef86909d3e8c09784cfcbbaf500527d08bf4f796fd317a9fc4ae405a8b642168b1d99c2a716377d6b6f129ea53b635caf36c0e76
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/History.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ == v2.1.2 [2014-01-20] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Symbolify keys of defaults for Configurability::Config.new (fixes #3).
4
+
5
+
1
6
  == v2.1.1 [2013-11-20] Michael Granger <ged@FaerieMUD.org>
2
7
 
3
8
  - Fix untainting to not try to dup/untaint immediate objects.
@@ -18,10 +18,10 @@ module Configurability
18
18
 
19
19
 
20
20
  # Library version constant
21
- VERSION = '2.1.1'
21
+ VERSION = '2.1.2'
22
22
 
23
23
  # Version-control revision constant
24
- REVISION = %q$Revision: 9d24e71e0018 $
24
+ REVISION = %q$Revision: 8ccc787daf98 $
25
25
 
26
26
  require 'configurability/deferredconfig'
27
27
 
@@ -14,7 +14,7 @@ share_examples_for "an object with Configurability" do
14
14
  end
15
15
 
16
16
  it "has a config key that is a reasonable section name" do
17
- expect( described_class.config_key.to_s ).to match( /^[a-z][a-z0-9]*$/i )
17
+ expect( described_class.config_key.to_s ).to match( /^[a-z]\w*$/i )
18
18
  end
19
19
 
20
20
  end
@@ -240,7 +240,6 @@ class Configurability::Config
240
240
  protected
241
241
  #########
242
242
 
243
-
244
243
  ### Read in the specified +filename+ and return a config struct.
245
244
  def make_configstruct_from_source( source, defaults=nil )
246
245
  defaults ||= {}
@@ -251,7 +250,8 @@ class Configurability::Config
251
250
  YAML.load( source )
252
251
  end
253
252
  ihash = symbolify_keys( untaint_hash(hash) )
254
- mergedhash = defaults.merge( ihash, &mergefunc )
253
+ idefaults = symbolify_keys( defaults )
254
+ mergedhash = idefaults.merge( ihash, &mergefunc )
255
255
 
256
256
  return Configurability::Config::Struct.new( mergedhash )
257
257
  end
@@ -277,76 +277,77 @@ class Configurability::Config
277
277
  end
278
278
 
279
279
 
280
- #######
281
- private
282
- #######
280
+ # A collection of data-structure-manipulation functions.
281
+ module DataUtilities
283
282
 
284
- ### Return a copy of the specified +hash+ with all of its values
285
- ### untainted.
286
- def untaint_hash( hash )
287
- newhash = {}
288
- hash.each_key do |key|
289
- newhash[ key ] = untaint_value( hash[key] )
283
+ ### Return a copy of the specified +hash+ with all of its values
284
+ ### untainted.
285
+ def untaint_hash( hash )
286
+ newhash = {}
287
+ hash.each_key do |key|
288
+ newhash[ key ] = untaint_value( hash[key] )
289
+ end
290
+ return newhash
290
291
  end
291
- return newhash
292
- end
293
292
 
294
293
 
295
- ### Return an untainted copy of the specified +val+.
296
- def untaint_value( val )
297
- case val
298
- when Hash
299
- return untaint_hash( val )
294
+ ### Return an untainted copy of the specified +val+.
295
+ def untaint_value( val )
296
+ case val
297
+ when Hash
298
+ return untaint_hash( val )
300
299
 
301
- when Array
302
- return val.collect {|v| untaint_value(v) }
300
+ when Array
301
+ return val.collect {|v| untaint_value(v) }
303
302
 
304
- when NilClass, TrueClass, FalseClass, Numeric, Symbol, Encoding
305
- return val
303
+ when NilClass, TrueClass, FalseClass, Numeric, Symbol, Encoding
304
+ return val
306
305
 
307
- else
308
- if val.respond_to?( :dup ) && val.respond_to?( :untaint )
309
- return val.dup.untaint
310
306
  else
311
- return val
307
+ if val.respond_to?( :dup ) && val.respond_to?( :untaint )
308
+ return val.dup.untaint
309
+ else
310
+ return val
311
+ end
312
312
  end
313
313
  end
314
- end
315
314
 
316
315
 
317
- ### Return a duplicate of the given +hash+ with its identifier-like keys
318
- ### transformed into symbols from whatever they were before.
319
- def symbolify_keys( hash )
320
- newhash = {}
321
- hash.each do |key,val|
322
- key = key.to_sym if key.respond_to?( :to_sym )
316
+ ### Return a duplicate of the given +hash+ with its identifier-like keys
317
+ ### transformed into symbols from whatever they were before.
318
+ def symbolify_keys( hash )
319
+ newhash = {}
320
+ hash.each do |key,val|
321
+ key = key.to_sym if key.respond_to?( :to_sym )
323
322
 
324
- if val.is_a?( Hash )
325
- newhash[ key ] = symbolify_keys( val )
326
- else
327
- newhash[ key ] = val
323
+ if val.is_a?( Hash )
324
+ newhash[ key ] = symbolify_keys( val )
325
+ else
326
+ newhash[ key ] = val
327
+ end
328
328
  end
329
- end
330
329
 
331
- return newhash
332
- end
330
+ return newhash
331
+ end
333
332
 
334
333
 
335
- ### Return a version of the given +hash+ with its keys transformed
336
- ### into Strings from whatever they were before.
337
- def stringify_keys( hash )
338
- newhash = {}
339
- hash.each do |key,val|
340
- if val.is_a?( Hash )
341
- newhash[ key.to_s ] = stringify_keys( val )
342
- else
343
- newhash[ key.to_s ] = val
334
+ ### Return a version of the given +hash+ with its keys transformed
335
+ ### into Strings from whatever they were before.
336
+ def stringify_keys( hash )
337
+ newhash = {}
338
+ hash.each do |key,val|
339
+ if val.is_a?( Hash )
340
+ newhash[ key.to_s ] = stringify_keys( val )
341
+ else
342
+ newhash[ key.to_s ] = val
343
+ end
344
344
  end
345
- end
346
345
 
347
- return newhash
346
+ return newhash
347
+ end
348
348
  end
349
349
 
350
+ include DataUtilities
350
351
 
351
352
 
352
353
  #############################################################
@@ -357,7 +358,8 @@ class Configurability::Config
357
358
  ### hashes.
358
359
  class Struct
359
360
  extend Forwardable
360
- include Enumerable
361
+ include Enumerable,
362
+ Configurability::Config::DataUtilities
361
363
 
362
364
  # Mask most of Kernel's methods away so they don't collide with
363
365
  # config values.
@@ -371,7 +373,7 @@ class Configurability::Config
371
373
  ### Create a new ConfigStruct using the values from the given +hash+ if specified.
372
374
  def initialize( hash=nil )
373
375
  hash ||= {}
374
- @hash = hash.dup
376
+ @hash = symbolify_keys( hash )
375
377
  @dirty = false
376
378
  end
377
379
 
@@ -74,6 +74,12 @@ describe Configurability::Config do
74
74
  expect( config.defaultkey ).to eq( "Oh yeah." )
75
75
  end
76
76
 
77
+ it "symbolifies keys in defaults (issue #3)" do
78
+ config = Configurability::Config.new( TEST_CONFIG, 'stringkey' => "String value." )
79
+
80
+ expect( config.stringkey ).to eq( "String value." )
81
+ end
82
+
77
83
  it "yields itself if a block is given at creation" do
78
84
  yielded_self = nil
79
85
  config = Configurability::Config.new { yielded_self = self }
@@ -102,12 +108,12 @@ describe Configurability::Config do
102
108
  it "autoloads predicates for its members" do
103
109
  config = Configurability::Config.new( TEST_CONFIG )
104
110
 
105
- expect( config.mergekey? ).to be_true()
106
- expect( config.mergemonkey? ).to be_false()
107
- expect( config.section? ).to be_true()
108
- expect( config.section.subsection? ).to be_true()
109
- expect( config.section.subsection.subsubsection? ).to be_true()
110
- expect( config.section.monkeysubsection? ).to be_false()
111
+ expect( config.mergekey? ).to be_truthy()
112
+ expect( config.mergemonkey? ).to be_falsey()
113
+ expect( config.section? ).to be_truthy()
114
+ expect( config.section.subsection? ).to be_truthy()
115
+ expect( config.section.subsection.subsubsection? ).to be_truthy()
116
+ expect( config.section.monkeysubsection? ).to be_falsey()
111
117
  end
112
118
 
113
119
  it "untaints values loaded from a config" do
@@ -180,7 +186,7 @@ describe Configurability::Config do
180
186
 
181
187
  it "returns struct members as an Array of Symbols" do
182
188
  expect( config.members ).to be_an_instance_of( Array )
183
- expect( config.members ).to have_at_least( 4 ).things
189
+ expect( config.members.size ).to be >= 4
184
190
  config.members.each do |member|
185
191
  expect( member ).to be_an_instance_of( Symbol )
186
192
  end
@@ -225,7 +231,7 @@ describe Configurability::Config do
225
231
 
226
232
 
227
233
  it "should report that it is changed" do
228
- expect( config.changed? ).to be_true()
234
+ expect( config.changed? ).to be_truthy()
229
235
  end
230
236
 
231
237
  it "should report that its internal struct was modified as the reason for the change" do
@@ -301,7 +307,7 @@ describe Configurability::Config do
301
307
  it "doesn't re-read its source file if it hasn't changed" do
302
308
  expect( config.path ).not_to receive( :read )
303
309
  expect( Configurability ).not_to receive( :configure_objects )
304
- expect( config.reload ).to be_false()
310
+ expect( config.reload ).to be_falsey()
305
311
  end
306
312
  end
307
313
 
@@ -340,7 +346,7 @@ describe Configurability::Config do
340
346
  it "re-reads its file when reloaded" do
341
347
  expect( @config.path ).to receive( :read ).and_return( TEST_CONFIG )
342
348
  expect( Configurability ).to receive( :configure_objects ).with( @config )
343
- expect( @config.reload ).to be_true()
349
+ expect( @config.reload ).to be_truthy()
344
350
  end
345
351
 
346
352
  it "reapplies its defaults when reloading" do
@@ -368,9 +368,9 @@ describe Configurability do
368
368
  expect( config ).to be_a( Configurability::Config )
369
369
  expect( config.testconfig.one ).to eq( 1 )
370
370
  expect( config.testconfig.two ).to eq( 2 )
371
- expect( config.testconfig.types.one ).to be_true()
372
- expect( config.testconfig.types.two ).to be_true()
373
- expect( config.otherconfig.other ).to be_true()
371
+ expect( config.testconfig.types.one ).to be_truthy()
372
+ expect( config.testconfig.types.two ).to be_truthy()
373
+ expect( config.otherconfig.other ).to be_truthy()
374
374
  end
375
375
 
376
376
  it "returns defaults for an object that inherits from a class with Configurability" do
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: 2.1.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
@@ -30,7 +30,7 @@ cert_chain:
30
30
  6mKCwjpegytE0oifXfF8k75A9105cBnNiMZOe1tXiqYc/exCgWvbggurzDOcRkZu
31
31
  /YSusaiDXHKU2O3Akc3htA==
32
32
  -----END CERTIFICATE-----
33
- date: 2013-11-20 00:00:00.000000000 Z
33
+ date: 2014-01-21 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: loggability
@@ -160,6 +160,7 @@ extra_rdoc_files:
160
160
  - Manifest.txt
161
161
  - README.rdoc
162
162
  files:
163
+ - .gemtest
163
164
  - ChangeLog
164
165
  - History.rdoc
165
166
  - LICENSE
@@ -177,7 +178,6 @@ files:
177
178
  - spec/configurability/deferredconfig_spec.rb
178
179
  - spec/configurability_spec.rb
179
180
  - spec/helpers.rb
180
- - .gemtest
181
181
  homepage: https://bitbucket.org/ged/configurability
182
182
  licenses:
183
183
  - BSD
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
200
  version: '0'
201
201
  requirements: []
202
202
  rubyforge_project: configurability
203
- rubygems_version: 2.1.10
203
+ rubygems_version: 2.2.1
204
204
  signing_key:
205
205
  specification_version: 4
206
206
  summary: Configurability is a unified, unintrusive, assume-nothing configuration system
metadata.gz.sig CHANGED
Binary file