iqeo-conf 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/iqeo/configuration/version.rb +1 -1
- data/lib/iqeo/configuration.rb +33 -16
- data/pkg/iqeo-conf-0.0.6.gem +0 -0
- data/spec/configuration_spec.rb +60 -0
- metadata +2 -1
data/Gemfile.lock
CHANGED
data/lib/iqeo/configuration.rb
CHANGED
@@ -30,31 +30,48 @@ module Iqeo
|
|
30
30
|
return self.read file.respond_to?(:read) ? file.read : File.read(file)
|
31
31
|
end
|
32
32
|
|
33
|
+
def self.new_defer_block_for_parent parent, &block
|
34
|
+
conf = Configuration.new
|
35
|
+
conf._parent = parent
|
36
|
+
if block_given? && block.arity == 1
|
37
|
+
block.call(conf) # this is 'yield self' from the outside
|
38
|
+
else
|
39
|
+
raise "WTF! expected a block with a single parameter"
|
40
|
+
end
|
41
|
+
conf
|
42
|
+
end
|
43
|
+
|
33
44
|
def initialize &block
|
34
45
|
@items = HashWithIndifferentAccess.new
|
35
46
|
@_parent = nil
|
36
47
|
if block_given?
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
48
|
+
if block.arity == 1 # cannot set parent for yield blocks here as self is wrong !?
|
49
|
+
yield self
|
50
|
+
else
|
51
|
+
if block.binding.eval('self').kind_of?( Configuration ) # for eval block if nested configuration
|
52
|
+
@_parent = block.binding.eval('self') # set parent to make inherited values available
|
53
|
+
end # during block execution
|
54
|
+
instance_eval &block
|
55
|
+
end
|
42
56
|
end
|
43
57
|
end
|
44
58
|
|
45
59
|
def method_missing name, *values, &block
|
46
|
-
return @items.send name, *values if @items.respond_to? name
|
47
|
-
|
48
|
-
# but keep it around for when we make selective delegation an option
|
49
|
-
#case name
|
50
|
-
#when :[]= then return _set values.shift, values.size > 1 ? values : values.first
|
51
|
-
#when :[] then return _get values.shift
|
52
|
-
#end
|
60
|
+
return @items.send name, *values if @items.respond_to? name # @items methods are highest priority
|
61
|
+
|
53
62
|
name = name.to_s.chomp('=') # todo: write a test case for a non-string object as key being converted by .to_s
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
63
|
+
|
64
|
+
if block_given? # block is a nested configuration
|
65
|
+
if block.arity == 1 # yield DSL needs deferred block to set parent without binding
|
66
|
+
return _set name, Configuration.new_defer_block_for_parent( self, &block )
|
67
|
+
else
|
68
|
+
return _set name, Configuration.new( &block ) # eval DSL can set parent from block binding in initialize
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
return _get name if values.empty? # just get item
|
73
|
+
return _set name, values if values.size > 1 # set item to multiple values
|
74
|
+
return _set name, values.first # set item to single value
|
58
75
|
end
|
59
76
|
|
60
77
|
attr_accessor :_parent # todo: should attr_writer be protected ?
|
Binary file
|
data/spec/configuration_spec.rb
CHANGED
@@ -373,6 +373,36 @@ describe Configuration do
|
|
373
373
|
conf.bravo.delta.echo.should be_true
|
374
374
|
end
|
375
375
|
|
376
|
+
it 'nested configuration can refer to an inherited setting' do
|
377
|
+
conf = nil
|
378
|
+
expect do
|
379
|
+
conf = Configuration.new do |c1|
|
380
|
+
c1.alpha true
|
381
|
+
c1.hotel c1.alpha
|
382
|
+
c1.bravo do |c2|
|
383
|
+
c2.charlie true
|
384
|
+
c2.foxtrot c2.alpha
|
385
|
+
c2.delta do |c3|
|
386
|
+
c3.echo true
|
387
|
+
c3.golf c3.alpha
|
388
|
+
end
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end.to_not raise_error
|
392
|
+
conf.should_not be_nil
|
393
|
+
conf.alpha.should be_true
|
394
|
+
conf.bravo.should be_a Configuration
|
395
|
+
conf.bravo.alpha should be_true
|
396
|
+
conf.bravo.charlie should be_true
|
397
|
+
conf.bravo.delta.should be_a Configuration
|
398
|
+
conf.bravo.delta.alpha.should be_true
|
399
|
+
conf.bravo.delta.charlie.should be_true
|
400
|
+
conf.bravo.delta.echo.should be_true
|
401
|
+
conf.bravo.delta.golf.should be_true
|
402
|
+
conf.bravo.foxtrot.should be_true
|
403
|
+
conf.hotel.should be_true
|
404
|
+
end
|
405
|
+
|
376
406
|
end # yield DSL
|
377
407
|
|
378
408
|
context 'instance_eval DSL' do
|
@@ -470,6 +500,36 @@ describe Configuration do
|
|
470
500
|
conf.bravo.delta.echo.should be_true
|
471
501
|
end
|
472
502
|
|
503
|
+
it 'nested configuration can refer to an inherited setting' do
|
504
|
+
conf = nil
|
505
|
+
expect do
|
506
|
+
conf = Configuration.new do
|
507
|
+
alpha true
|
508
|
+
hotel alpha
|
509
|
+
bravo do
|
510
|
+
charlie true
|
511
|
+
foxtrot alpha
|
512
|
+
delta do
|
513
|
+
echo true
|
514
|
+
golf alpha
|
515
|
+
end
|
516
|
+
end
|
517
|
+
end
|
518
|
+
end.to_not raise_error
|
519
|
+
conf.should_not be_nil
|
520
|
+
conf.alpha.should be_true
|
521
|
+
conf.bravo.should be_a Configuration
|
522
|
+
conf.bravo.alpha should be_true
|
523
|
+
conf.bravo.charlie should be_true
|
524
|
+
conf.bravo.delta.should be_a Configuration
|
525
|
+
conf.bravo.delta.alpha.should be_true
|
526
|
+
conf.bravo.delta.charlie.should be_true
|
527
|
+
conf.bravo.delta.echo.should be_true
|
528
|
+
conf.bravo.delta.golf.should be_true
|
529
|
+
conf.bravo.foxtrot.should be_true
|
530
|
+
conf.hotel.should be_true
|
531
|
+
end
|
532
|
+
|
473
533
|
end # instance_eval DSL
|
474
534
|
|
475
535
|
end # mode of usage
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iqeo-conf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- pkg/iqeo-conf-0.0.3.gem
|
69
69
|
- pkg/iqeo-conf-0.0.4.gem
|
70
70
|
- pkg/iqeo-conf-0.0.5.gem
|
71
|
+
- pkg/iqeo-conf-0.0.6.gem
|
71
72
|
- spec/configuration_spec.rb
|
72
73
|
- spec/spec_helper.rb
|
73
74
|
homepage: http://iqeo.github.com/iqeo-conf
|