iqeo-conf 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  .idea/
2
+ .bundle/
2
3
  .rvmrc
3
4
 
data/Gemfile.lock CHANGED
@@ -1,11 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- iqeo-conf (0.0.9)
4
+ iqeo-conf (0.0.11)
5
+ blankslate (~> 2.1.2.4)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
10
+ blankslate (2.1.2.4)
9
11
  diff-lcs (1.1.3)
10
12
  rake (0.9.2.2)
11
13
  rspec (2.9.0)
data/README.md CHANGED
@@ -87,6 +87,8 @@ Need docs...
87
87
  * Load configurations from a string or file at creation
88
88
  * Iterate over items hash - by delegation to hash
89
89
  * Indifferent hash access - using ActiveSupport/HashWithIndifferentAccess
90
+ * Clean DSL syntax for creating a nested configuration - just a block ?
91
+ * Load configurations from a string or file after creation / in DSL block
90
92
 
91
93
  ## Todo
92
94
 
@@ -94,10 +96,8 @@ Need time (have motivation)...
94
96
 
95
97
  * Configuration file load path
96
98
  * Use an existing configuration for defaults
97
- * Clean DSL syntax for creating a nested configuration - just a block ?
98
- * Load configurations from a string or file after creation / in DSL block
99
- * Option to get hash directly to prevent polluting namespace with delegated hash methods
100
99
  * Blank slate for DSL ? - optional ?
100
+ * Option to get hash directly to prevent polluting namespace with delegated hash methods
101
101
  * Consider issues around deferred interpolation / procs / lambdas etc...
102
102
  * Load other formats into configuration - YAML, CSV, ...anything Enumerable should be easy enough.
103
103
 
data/iqeo-conf.gemspec CHANGED
@@ -17,4 +17,6 @@ Gem::Specification.new do |gem|
17
17
  gem.add_development_dependency "rspec", "~> 2.9.0"
18
18
  gem.add_development_dependency "rake", "~> 0.9.2"
19
19
 
20
+ gem.add_dependency('blankslate', '~> 2.1.2.4')
21
+
20
22
  end
@@ -1,5 +1,5 @@
1
1
  module Iqeo
2
2
  class Configuration
3
- VERSION = "0.0.9"
3
+ VERSION = "0.0.10"
4
4
  end
5
5
  end
@@ -4,9 +4,8 @@ require_relative "configuration/hash_with_indifferent_access"
4
4
 
5
5
  # todo: configuration file load path - array of Dir.glob like file specs ?
6
6
  # todo: use an existing configuration for defaults
7
- # todo: load configurations from a string or file after creation / in DSL block
8
- # todo: option to get hash directly to prevent polluting namespace with delegated hash methods
9
7
  # todo: blank slate for DSL - optional ?
8
+ # todo: option to get hash directly to prevent polluting namespace with delegated hash methods
10
9
  # todo: consider issues around deferred interpolation / procs / lambdas etc...
11
10
  # todo: load other formats from string & file - YAML, CSV, ...anything Enumerable should be easy enough.
12
11
 
@@ -57,7 +56,7 @@ module Iqeo
57
56
  def method_missing name, *values, &block
58
57
  return @items.send( name, *values, &block ) if @items.respond_to? name # @items methods are highest priority
59
58
 
60
- name = name.to_s.chomp('=') # todo: write a test case for a non-string object as key being converted by .to_s
59
+ name = name.to_s.chomp('=')
61
60
 
62
61
  if block_given? # block is a nested configuration
63
62
  if block.arity == 1 # yield DSL needs deferred block to set parent without binding
@@ -72,10 +71,10 @@ module Iqeo
72
71
  return _set name, values.first # set item to single value
73
72
  end
74
73
 
75
- attr_accessor :_parent # todo: should attr_writer be protected ?
74
+ attr_accessor :_parent
76
75
 
77
76
  def _set key, value
78
- # todo: extend parenting for enumerable with configurations at arbitrary depth ?
77
+ # fix: extend parenting for enumerable with configurations at arbitrary depth
79
78
  case
80
79
  when value.kind_of?( Configuration ) then value._parent = self
81
80
  when value.kind_of?( Enumerable ) then value.each { |v| v._parent = self if v.kind_of? Configuration }
@@ -87,10 +86,18 @@ module Iqeo
87
86
  def _get key
88
87
  return @items[key] unless @items[key].nil?
89
88
  return @items[key] if _parent.nil?
90
- return _parent._get key
89
+ _parent._get key
91
90
  end
92
91
  alias [] _get
93
92
 
93
+ def _read string
94
+ instance_eval string
95
+ end
96
+
97
+ def _file file
98
+ _read file.respond_to?(:read) ? file.read : File.read(file)
99
+ end
100
+
94
101
  end
95
102
 
96
103
  end
Binary file
@@ -10,32 +10,125 @@ describe Configuration do
10
10
  Configuration.version.should == Configuration::VERSION
11
11
  end
12
12
 
13
- context 'creation' do
13
+ context 'at creation' do
14
14
 
15
15
  it 'does not require a block' do
16
16
  Configuration.new.should be_a Configuration
17
17
  end
18
18
 
19
- it 'accepts a block with arity 0' do
19
+ it 'accept a block with arity 0' do
20
20
  Configuration.new { }.should be_a Configuration
21
21
  end
22
22
 
23
- it 'instance_eval\'s block with arity 0' do
23
+ it 'instance_eval a block with arity 0' do
24
24
  conf_eval = nil
25
25
  conf_new = Configuration.new { conf_eval = self }
26
26
  conf_new.should be conf_eval
27
27
  end
28
28
 
29
- it 'accepts a block with arity 1' do
29
+ it 'accept a block with arity 1' do
30
30
  Configuration.new { |arg| }.should be_a Configuration
31
31
  end
32
32
 
33
- it 'yields self to block with arity 1' do
33
+ it 'yield self to block with arity 1' do
34
34
  conf_yielded = nil
35
35
  conf_new = Configuration.new { |conf| conf_yielded = conf }
36
36
  conf_new.should be conf_yielded
37
37
  end
38
38
 
39
+ context 'can load' do
40
+
41
+ it 'simple instance_eval DSL from string' do
42
+ string = "alpha 1
43
+ bravo 'two'
44
+ charlie 3.0
45
+ delta :four"
46
+ conf = nil
47
+ expect do
48
+ conf = Configuration.read string
49
+ end.to_not raise_error
50
+ conf.should_not be_nil
51
+ conf.alpha.should == 1 and conf.alpha.should be_a Fixnum
52
+ conf.bravo.should == "two" and conf.bravo.should be_a String
53
+ conf.charlie.should == 3.0 and conf.charlie.should be_a Float
54
+ conf.delta.should == :four and conf.delta.should be_a Symbol
55
+ end
56
+
57
+ it 'simple instance_eval DSL from file (StringIO)' do
58
+ io = StringIO.new "alpha 1
59
+ bravo 'two'
60
+ charlie 3.0
61
+ delta :four"
62
+ conf = nil
63
+ expect do
64
+ conf = Configuration.file io
65
+ end.to_not raise_error
66
+ conf.should_not be_nil
67
+ conf.alpha.should == 1 and conf.alpha.should be_a Fixnum
68
+ conf.bravo.should == "two" and conf.bravo.should be_a String
69
+ conf.charlie.should == 3.0 and conf.charlie.should be_a Float
70
+ conf.delta.should == :four and conf.delta.should be_a Symbol
71
+ end
72
+
73
+ it 'simple instance_eval DSL from file (mock & expected methods)' do
74
+ file = mock
75
+ file.should_receive( :respond_to? ).with( :read ).and_return true
76
+ file.should_receive( :read ).and_return "alpha 1
77
+ bravo 'two'
78
+ charlie 3.0
79
+ delta :four"
80
+ conf = nil
81
+ expect do
82
+ conf = Configuration.file file
83
+ end.to_not raise_error
84
+ conf.should_not be_nil
85
+ conf.alpha.should == 1 and conf.alpha.should be_a Fixnum
86
+ conf.bravo.should == "two" and conf.bravo.should be_a String
87
+ conf.charlie.should == 3.0 and conf.charlie.should be_a Float
88
+ conf.delta.should == :four and conf.delta.should be_a Symbol
89
+ end
90
+
91
+ it 'simple instance_eval DSL from filename (expected methods)' do
92
+ File.should_receive( :read ).with( "filename" ).and_return "alpha 1
93
+ bravo 'two'
94
+ charlie 3.0
95
+ delta :four"
96
+ conf = nil
97
+ expect do
98
+ conf = Configuration.file "filename"
99
+ end.to_not raise_error
100
+ conf.should_not be_nil
101
+ conf.alpha.should == 1 and conf.alpha.should be_a Fixnum
102
+ conf.bravo.should == "two" and conf.bravo.should be_a String
103
+ conf.charlie.should == 3.0 and conf.charlie.should be_a Float
104
+ conf.delta.should == :four and conf.delta.should be_a Symbol
105
+ end
106
+
107
+ it 'complex instance_eval DSL from string' do
108
+ string = "alpha true
109
+ bravo do
110
+ charlie true
111
+ delta do
112
+ echo true
113
+ end
114
+ end"
115
+ conf = nil
116
+ expect do
117
+ conf = Configuration.read string
118
+ end.to_not raise_error
119
+ conf.should_not be_nil
120
+ conf.alpha.should be_true
121
+ conf.bravo.should be_a Configuration
122
+ conf.bravo.alpha should be_true
123
+ conf.bravo.charlie should be_true
124
+ conf.bravo.delta.should be_a Configuration
125
+ conf.bravo.delta.alpha.should be_true
126
+ conf.bravo.delta.charlie.should be_true
127
+ conf.bravo.delta.echo.should be_true
128
+ end
129
+
130
+ end # loads
131
+
39
132
  end # creation
40
133
 
41
134
  context 'settings retrieval' do
@@ -45,6 +138,24 @@ describe Configuration do
45
138
  conf.not_a_setting.should be_nil
46
139
  end
47
140
 
141
+ it 'delegates hash methods to internal hash' do
142
+ conf = nil
143
+ expect do
144
+ conf = Configuration.new
145
+ conf.alpha 1
146
+ conf.bravo 2
147
+ conf.charlie 3
148
+ conf.delta 4
149
+ end.to_not raise_error
150
+ conf.should_not be_nil
151
+ sum = 0
152
+ expect do
153
+ conf.each { |k,v| sum += v }
154
+ end.to_not raise_error
155
+ sum.should == 10
156
+ conf.size.should == 4
157
+ end
158
+
48
159
  end # settings retrieval
49
160
 
50
161
  context 'single value setting' do
@@ -333,75 +444,163 @@ describe Configuration do
333
444
  conf.bravo.should == :value
334
445
  end
335
446
 
336
- it 'supports nested configuration via do..end' do
337
- conf = nil
338
- expect do
339
- conf = Configuration.new do |c1|
340
- c1.alpha true
341
- c1.bravo do |c2|
342
- c2.charlie true
343
- c2.delta do |c3|
344
- c3.echo true
447
+ context 'nested configuration' do
448
+
449
+ it 'supported via do..end' do
450
+ conf = nil
451
+ expect do
452
+ conf = Configuration.new do |c1|
453
+ c1.alpha true
454
+ c1.bravo do |c2|
455
+ c2.charlie true
456
+ c2.delta do |c3|
457
+ c3.echo true
458
+ end
345
459
  end
346
460
  end
347
- end
348
- end.to_not raise_error
349
- conf.should_not be_nil
350
- conf.alpha.should be_true
351
- conf.bravo.should be_a Configuration
352
- conf.bravo.alpha should be_true
353
- conf.bravo.charlie should be_true
354
- conf.bravo.delta.should be_a Configuration
355
- conf.bravo.delta.alpha.should be_true
356
- conf.bravo.delta.charlie.should be_true
357
- conf.bravo.delta.echo.should be_true
358
- end
359
-
360
- it 'supports nested configuration via {..}' do
361
- conf = nil
362
- expect do
363
- conf = Configuration.new { |c1| c1.alpha true ; c1.bravo { |c2| c2.charlie true ; c2.delta { |c3| c3.echo true } } }
364
- end.to_not raise_error
365
- conf.should_not be_nil
366
- conf.alpha.should be_true
367
- conf.bravo.should be_a Configuration
368
- conf.bravo.alpha should be_true
369
- conf.bravo.charlie should be_true
370
- conf.bravo.delta.should be_a Configuration
371
- conf.bravo.delta.alpha.should be_true
372
- conf.bravo.delta.charlie.should be_true
373
- conf.bravo.delta.echo.should be_true
374
- end
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
461
+ end.to_not raise_error
462
+ conf.should_not be_nil
463
+ conf.alpha.should be_true
464
+ conf.bravo.should be_a Configuration
465
+ conf.bravo.alpha should be_true
466
+ conf.bravo.charlie should be_true
467
+ conf.bravo.delta.should be_a Configuration
468
+ conf.bravo.delta.alpha.should be_true
469
+ conf.bravo.delta.charlie.should be_true
470
+ conf.bravo.delta.echo.should be_true
471
+ end
472
+
473
+ it 'supported via {..}' do
474
+ conf = nil
475
+ expect do
476
+ conf = Configuration.new { |c1| c1.alpha true ; c1.bravo { |c2| c2.charlie true ; c2.delta { |c3| c3.echo true } } }
477
+ end.to_not raise_error
478
+ conf.should_not be_nil
479
+ conf.alpha.should be_true
480
+ conf.bravo.should be_a Configuration
481
+ conf.bravo.alpha should be_true
482
+ conf.bravo.charlie should be_true
483
+ conf.bravo.delta.should be_a Configuration
484
+ conf.bravo.delta.alpha.should be_true
485
+ conf.bravo.delta.charlie.should be_true
486
+ conf.bravo.delta.echo.should be_true
487
+ end
488
+
489
+ it 'can refer to an inherited setting' do
490
+ conf = nil
491
+ expect do
492
+ conf = Configuration.new do |c1|
493
+ c1.alpha true
494
+ c1.hotel c1.alpha
495
+ c1.bravo do |c2|
496
+ c2.charlie true
497
+ c2.foxtrot c2.alpha
498
+ c2.delta do |c3|
499
+ c3.echo true
500
+ c3.golf c3.alpha
501
+ end
388
502
  end
389
503
  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
504
+ end.to_not raise_error
505
+ conf.should_not be_nil
506
+ conf.alpha.should be_true
507
+ conf.bravo.should be_a Configuration
508
+ conf.bravo.alpha should be_true
509
+ conf.bravo.charlie should be_true
510
+ conf.bravo.delta.should be_a Configuration
511
+ conf.bravo.delta.alpha.should be_true
512
+ conf.bravo.delta.charlie.should be_true
513
+ conf.bravo.delta.echo.should be_true
514
+ conf.bravo.delta.golf.should be_true
515
+ conf.bravo.foxtrot.should be_true
516
+ conf.hotel.should be_true
517
+ end
518
+
519
+ end # nested configuration
520
+
521
+ context 'can load' do
522
+
523
+ it 'settings into the current configuration from a string' do
524
+ conf = nil
525
+ expect do
526
+ conf = Configuration.new do |c|
527
+ c.alpha true
528
+ c._read "bravo true\ncharlie true"
529
+ end
530
+ end.to_not raise_error
531
+ conf.should_not be_nil
532
+ conf.alpha.should be_true
533
+ conf.bravo.should be_true
534
+ conf.charlie.should be_true
535
+ end
536
+
537
+ it 'settings into the current configuration from a file (StringIO)' do
538
+ io = StringIO.new "bravo true
539
+ charlie true"
540
+ conf = nil
541
+ expect do
542
+ conf = Configuration.new do |c|
543
+ c.alpha true
544
+ c._file io
545
+ end
546
+ end.to_not raise_error
547
+ conf.should_not be_nil
548
+ conf.alpha.should be_true
549
+ conf.bravo.should be_true
550
+ conf.charlie.should be_true
551
+ end
552
+
553
+ it 'settings into a nested configuration from a string' do
554
+ conf = nil
555
+ expect do
556
+ conf = Configuration.new do |c|
557
+ c.alpha true
558
+ c.bravo do |x|
559
+ x._read "charlie true\ndelta true"
560
+ end
561
+ c.echo { |x| x._read "foxtrot true\nhotel true" }
562
+ end
563
+ end.to_not raise_error
564
+ conf.should_not be_nil
565
+ conf.alpha.should be_true
566
+ conf.bravo.should be_a Configuration
567
+ conf.bravo.charlie.should be_true
568
+ conf.bravo.delta.should be_true
569
+ conf.bravo.alpha.should be_true
570
+ conf.echo.should be_a Configuration
571
+ conf.echo.foxtrot.should be_true
572
+ conf.echo.hotel.should be_true
573
+ conf.echo.alpha.should be_true
574
+ end
575
+
576
+ it 'settings into a nested configuration from a file (StringIO)' do
577
+ io1 = StringIO.new "charlie true
578
+ delta true"
579
+ io2 = StringIO.new "foxtrot true
580
+ hotel true"
581
+ conf = nil
582
+ expect do
583
+ conf = Configuration.new do |c|
584
+ c.alpha true
585
+ c.bravo do |x|
586
+ x._file io1
587
+ end
588
+ c.echo { |x| x._file io2 }
589
+ end
590
+ end.to_not raise_error
591
+ conf.should_not be_nil
592
+ conf.alpha.should be_true
593
+ conf.bravo.should be_a Configuration
594
+ conf.bravo.charlie.should be_true
595
+ conf.bravo.delta.should be_true
596
+ conf.bravo.alpha.should be_true
597
+ conf.echo.should be_a Configuration
598
+ conf.echo.foxtrot.should be_true
599
+ conf.echo.hotel.should be_true
600
+ conf.echo.alpha.should be_true
601
+ end
602
+
603
+ end # can load
405
604
 
406
605
  end # yield DSL
407
606
 
@@ -460,243 +659,224 @@ describe Configuration do
460
659
  conf.bravo.should == :value
461
660
  end
462
661
 
463
- it 'supports nested configuration via do..end' do
464
- conf = nil
465
- expect do
466
- conf = Configuration.new do
467
- alpha true
468
- bravo do
469
- charlie true
470
- delta do
471
- echo true
662
+ context 'nested configuration' do
663
+
664
+ it 'supported via do..end' do
665
+ conf = nil
666
+ expect do
667
+ conf = Configuration.new do
668
+ alpha true
669
+ bravo do
670
+ charlie true
671
+ delta do
672
+ echo true
673
+ end
472
674
  end
473
675
  end
474
- end
475
- end.to_not raise_error
476
- conf.should_not be_nil
477
- conf.alpha.should be_true
478
- conf.bravo.should be_a Configuration
479
- conf.bravo.alpha should be_true
480
- conf.bravo.charlie should be_true
481
- conf.bravo.delta.should be_a Configuration
482
- conf.bravo.delta.alpha.should be_true
483
- conf.bravo.delta.charlie.should be_true
484
- conf.bravo.delta.echo.should be_true
485
- end
486
-
487
- it 'supports nested configuration via {..}' do
488
- conf = nil
489
- expect do
490
- conf = Configuration.new { |c1| c1.alpha true ; c1.bravo { |c2| c2.charlie true ; c2.delta { |c3| c3.echo true } } }
491
- end.to_not raise_error
492
- conf.should_not be_nil
493
- conf.alpha.should be_true
494
- conf.bravo.should be_a Configuration
495
- conf.bravo.alpha should be_true
496
- conf.bravo.charlie should be_true
497
- conf.bravo.delta.should be_a Configuration
498
- conf.bravo.delta.alpha.should be_true
499
- conf.bravo.delta.charlie.should be_true
500
- conf.bravo.delta.echo.should be_true
501
- end
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
676
+ end.to_not raise_error
677
+ conf.should_not be_nil
678
+ conf.alpha.should be_true
679
+ conf.bravo.should be_a Configuration
680
+ conf.bravo.alpha should be_true
681
+ conf.bravo.charlie should be_true
682
+ conf.bravo.delta.should be_a Configuration
683
+ conf.bravo.delta.alpha.should be_true
684
+ conf.bravo.delta.charlie.should be_true
685
+ conf.bravo.delta.echo.should be_true
686
+ end
687
+
688
+ it 'supported via {..}' do
689
+ conf = nil
690
+ expect do
691
+ conf = Configuration.new { |c1| c1.alpha true ; c1.bravo { |c2| c2.charlie true ; c2.delta { |c3| c3.echo true } } }
692
+ end.to_not raise_error
693
+ conf.should_not be_nil
694
+ conf.alpha.should be_true
695
+ conf.bravo.should be_a Configuration
696
+ conf.bravo.alpha should be_true
697
+ conf.bravo.charlie should be_true
698
+ conf.bravo.delta.should be_a Configuration
699
+ conf.bravo.delta.alpha.should be_true
700
+ conf.bravo.delta.charlie.should be_true
701
+ conf.bravo.delta.echo.should be_true
702
+ end
703
+
704
+ it 'can refer to an inherited setting' do
705
+ conf = nil
706
+ expect do
707
+ conf = Configuration.new do
708
+ alpha true
709
+ hotel alpha
710
+ bravo do
711
+ charlie true
712
+ foxtrot alpha
713
+ delta do
714
+ echo true
715
+ golf alpha
716
+ end
515
717
  end
516
718
  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
-
533
- it 'dynamic setting name can be a local' do
534
- conf = nil
535
- expect do
536
- conf = Configuration.new do
537
- alpha true
538
- local1 = 'bravo'
539
- self[local1] = true
540
- local2 = 'charlie'
541
- self[local2] = true
542
- end
543
- end.to_not raise_error
544
- conf.should_not be_nil
545
- conf.alpha.should be_true
546
- conf.bravo.should be_true
547
- conf.charlie.should be_true
548
- end
549
-
550
- it 'dynamic setting name can be a setting' do
551
- conf = nil
552
- expect do
553
- conf = Configuration.new do
554
- alpha true
555
- setting1 'bravo'
556
- self[setting1] = true
557
- setting2 'charlie'
558
- self[setting2] = true
559
- end
560
- end.to_not raise_error
561
- conf.should_not be_nil
562
- conf.alpha.should be_true
563
- conf.bravo.should be_true
564
- conf.charlie.should be_true
565
- conf.setting1.should == 'bravo'
566
- conf.setting2.should == 'charlie'
567
- end
568
-
569
- it 'dynamic setting can reference a nested configuration' do
570
- conf = nil
571
- expect do
572
- conf = Configuration.new do
573
- alpha true
574
- local = :bravo
575
- self[local] = Configuration.new do
576
- charlie true
719
+ end.to_not raise_error
720
+ conf.should_not be_nil
721
+ conf.alpha.should be_true
722
+ conf.bravo.should be_a Configuration
723
+ conf.bravo.alpha should be_true
724
+ conf.bravo.charlie should be_true
725
+ conf.bravo.delta.should be_a Configuration
726
+ conf.bravo.delta.alpha.should be_true
727
+ conf.bravo.delta.charlie.should be_true
728
+ conf.bravo.delta.echo.should be_true
729
+ conf.bravo.delta.golf.should be_true
730
+ conf.bravo.foxtrot.should be_true
731
+ conf.hotel.should be_true
732
+ end
733
+
734
+ end # nested configuration
735
+
736
+ context 'dynamic setting' do
737
+
738
+ it 'name can be a local' do
739
+ conf = nil
740
+ expect do
741
+ conf = Configuration.new do
742
+ alpha true
743
+ local1 = 'bravo'
744
+ self[local1] = true
745
+ local2 = 'charlie'
746
+ self[local2] = true
577
747
  end
578
- end
579
- end.to_not raise_error
580
- conf.should_not be_nil
581
- conf.alpha.should be_true
582
- conf.bravo.should be_a Configuration
583
- conf.bravo.alpha should be_true
584
- conf.bravo.charlie should be_true
585
- end
748
+ end.to_not raise_error
749
+ conf.should_not be_nil
750
+ conf.alpha.should be_true
751
+ conf.bravo.should be_true
752
+ conf.charlie.should be_true
753
+ end
754
+
755
+ it 'name can be a setting' do
756
+ conf = nil
757
+ expect do
758
+ conf = Configuration.new do
759
+ alpha true
760
+ setting1 'bravo'
761
+ self[setting1] = true
762
+ setting2 'charlie'
763
+ self[setting2] = true
764
+ end
765
+ end.to_not raise_error
766
+ conf.should_not be_nil
767
+ conf.alpha.should be_true
768
+ conf.bravo.should be_true
769
+ conf.charlie.should be_true
770
+ conf.setting1.should == 'bravo'
771
+ conf.setting2.should == 'charlie'
772
+ end
773
+
774
+ it 'can reference a nested configuration' do
775
+ conf = nil
776
+ expect do
777
+ conf = Configuration.new do
778
+ alpha true
779
+ local = :bravo
780
+ self[local] = Configuration.new do
781
+ charlie true
782
+ end
783
+ end
784
+ end.to_not raise_error
785
+ conf.should_not be_nil
786
+ conf.alpha.should be_true
787
+ conf.bravo.should be_a Configuration
788
+ conf.bravo.alpha should be_true
789
+ conf.bravo.charlie should be_true
790
+ end
791
+
792
+ end # dynamic setting
793
+
794
+ context 'can load' do
795
+
796
+ it 'settings into the current configuration from a string' do
797
+ conf = nil
798
+ expect do
799
+ conf = Configuration.new do
800
+ alpha true
801
+ _read "bravo true\ncharlie true"
802
+ end
803
+ end.to_not raise_error
804
+ conf.should_not be_nil
805
+ conf.alpha.should be_true
806
+ conf.bravo.should be_true
807
+ conf.charlie.should be_true
808
+ end
809
+
810
+ it 'settings into the current configuration from a file (StringIO)' do
811
+ io = StringIO.new "bravo true
812
+ charlie true"
813
+ conf = nil
814
+ expect do
815
+ conf = Configuration.new do
816
+ alpha true
817
+ _file io
818
+ end
819
+ end.to_not raise_error
820
+ conf.should_not be_nil
821
+ conf.alpha.should be_true
822
+ conf.bravo.should be_true
823
+ conf.charlie.should be_true
824
+ end
825
+
826
+ it 'settings into a nested configuration from a string' do
827
+ conf = nil
828
+ expect do
829
+ conf = Configuration.new do
830
+ alpha true
831
+ bravo do
832
+ _read "charlie true\ndelta true"
833
+ end
834
+ echo { _read "foxtrot true\nhotel true" }
835
+ end
836
+ end.to_not raise_error
837
+ conf.should_not be_nil
838
+ conf.alpha.should be_true
839
+ conf.bravo.should be_a Configuration
840
+ conf.bravo.charlie.should be_true
841
+ conf.bravo.delta.should be_true
842
+ conf.bravo.alpha.should be_true
843
+ conf.echo.should be_a Configuration
844
+ conf.echo.foxtrot.should be_true
845
+ conf.echo.hotel.should be_true
846
+ conf.echo.alpha.should be_true
847
+ end
848
+
849
+ it 'settings into a nested configuration from a file (StringIO)' do
850
+ io1 = StringIO.new "charlie true
851
+ delta true"
852
+ io2 = StringIO.new "foxtrot true
853
+ hotel true"
854
+ conf = nil
855
+ expect do
856
+ conf = Configuration.new do
857
+ alpha true
858
+ bravo do
859
+ _file io1
860
+ end
861
+ echo { _file io2 }
862
+ end
863
+ end.to_not raise_error
864
+ conf.should_not be_nil
865
+ conf.alpha.should be_true
866
+ conf.bravo.should be_a Configuration
867
+ conf.bravo.charlie.should be_true
868
+ conf.bravo.delta.should be_true
869
+ conf.bravo.alpha.should be_true
870
+ conf.echo.should be_a Configuration
871
+ conf.echo.foxtrot.should be_true
872
+ conf.echo.hotel.should be_true
873
+ conf.echo.alpha.should be_true
874
+ end
875
+
876
+ end # can load
586
877
 
587
878
  end # instance_eval DSL
588
879
 
589
880
  end # mode of usage
590
881
 
591
- context 'loads' do
592
-
593
- it 'simple instance_eval DSL from string' do
594
- string = "alpha 1
595
- bravo 'two'
596
- charlie 3.0
597
- delta :four"
598
- conf = nil
599
- expect do
600
- conf = Configuration.read string
601
- end.to_not raise_error
602
- conf.should_not be_nil
603
- conf.alpha.should == 1 and conf.alpha.should be_a Fixnum
604
- conf.bravo.should == "two" and conf.bravo.should be_a String
605
- conf.charlie.should == 3.0 and conf.charlie.should be_a Float
606
- conf.delta.should == :four and conf.delta.should be_a Symbol
607
- end
608
-
609
- it 'simple instance_eval DSL from file (by StringIO fake)' do
610
- io = StringIO.new "alpha 1
611
- bravo 'two'
612
- charlie 3.0
613
- delta :four"
614
- conf = nil
615
- expect do
616
- conf = Configuration.file io
617
- end.to_not raise_error
618
- conf.should_not be_nil
619
- conf.alpha.should == 1 and conf.alpha.should be_a Fixnum
620
- conf.bravo.should == "two" and conf.bravo.should be_a String
621
- conf.charlie.should == 3.0 and conf.charlie.should be_a Float
622
- conf.delta.should == :four and conf.delta.should be_a Symbol
623
- end
624
-
625
- it 'simple instance_eval DSL from file (by mock and expected methods)' do
626
- file = mock
627
- file.should_receive( :respond_to? ).with( :read ).and_return true
628
- file.should_receive( :read ).and_return "alpha 1
629
- bravo 'two'
630
- charlie 3.0
631
- delta :four"
632
- conf = nil
633
- expect do
634
- conf = Configuration.file file
635
- end.to_not raise_error
636
- conf.should_not be_nil
637
- conf.alpha.should == 1 and conf.alpha.should be_a Fixnum
638
- conf.bravo.should == "two" and conf.bravo.should be_a String
639
- conf.charlie.should == 3.0 and conf.charlie.should be_a Float
640
- conf.delta.should == :four and conf.delta.should be_a Symbol
641
- end
642
-
643
- it 'simple instance_eval DSL from filename (by expected methods)' do
644
- File.should_receive( :read ).with( "filename" ).and_return "alpha 1
645
- bravo 'two'
646
- charlie 3.0
647
- delta :four"
648
- conf = nil
649
- expect do
650
- conf = Configuration.file "filename"
651
- end.to_not raise_error
652
- conf.should_not be_nil
653
- conf.alpha.should == 1 and conf.alpha.should be_a Fixnum
654
- conf.bravo.should == "two" and conf.bravo.should be_a String
655
- conf.charlie.should == 3.0 and conf.charlie.should be_a Float
656
- conf.delta.should == :four and conf.delta.should be_a Symbol
657
- end
658
-
659
- it 'complex instance_eval DSL from string' do
660
- string = "alpha true
661
- bravo do
662
- charlie true
663
- delta do
664
- echo true
665
- end
666
- end"
667
- conf = nil
668
- expect do
669
- conf = Configuration.read string
670
- end.to_not raise_error
671
- conf.should_not be_nil
672
- conf.alpha.should be_true
673
- conf.bravo.should be_a Configuration
674
- conf.bravo.alpha should be_true
675
- conf.bravo.charlie should be_true
676
- conf.bravo.delta.should be_a Configuration
677
- conf.bravo.delta.alpha.should be_true
678
- conf.bravo.delta.charlie.should be_true
679
- conf.bravo.delta.echo.should be_true
680
- end
681
-
682
- end # loads
683
-
684
- it 'delegates hash methods to internal hash' do
685
- conf = nil
686
- expect do
687
- conf = Configuration.new
688
- conf.alpha 1
689
- conf.bravo 2
690
- conf.charlie 3
691
- conf.delta 4
692
- end.to_not raise_error
693
- conf.should_not be_nil
694
- sum = 0
695
- expect do
696
- conf.each { |k,v| sum += v }
697
- end.to_not raise_error
698
- sum.should == 10
699
- conf.size.should == 4
700
- end
701
-
702
882
  end
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.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-06 00:00:00.000000000 Z
12
+ date: 2012-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 0.9.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: blankslate
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.1.2.4
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.2.4
46
62
  description: A configuration DSL
47
63
  email:
48
64
  - gerard.fowley@iqeo.net
@@ -50,7 +66,6 @@ executables: []
50
66
  extensions: []
51
67
  extra_rdoc_files: []
52
68
  files:
53
- - .bundle/config
54
69
  - .gitignore
55
70
  - .rspec
56
71
  - .rvmrc
@@ -71,6 +86,7 @@ files:
71
86
  - pkg/iqeo-conf-0.0.6.gem
72
87
  - pkg/iqeo-conf-0.0.7.gem
73
88
  - pkg/iqeo-conf-0.0.8.gem
89
+ - pkg/iqeo-conf-0.0.9.gem
74
90
  - spec/configuration_spec.rb
75
91
  - spec/spec_helper.rb
76
92
  homepage: http://iqeo.github.com/iqeo-conf
data/.bundle/config DELETED
@@ -1,2 +0,0 @@
1
- ---
2
- BUNDLE_BIN: bin