loquacious 1.8.1 → 1.9.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.
@@ -1,116 +1,122 @@
1
+ == 1.9.0 / 2011-09-13
2
+
3
+ Enhancements
4
+ - Iterator now skips Undefined values
5
+ - Method to convert Configuration objects to a hash [mcmire]
6
+
1
7
  == 1.8.1 / 2011-06-09
2
8
 
3
9
  Bug Fixes
4
- - Assignment methods now mirror one another in their return values
10
+ - Assignment methods now mirror one another in their return values
5
11
 
6
12
  == 1.8.0 / 2011-06-03
7
13
 
8
14
  Enhancements
9
- - Support for defalut values on configuration properties
15
+ - Support for defalut values on configuration properties
10
16
 
11
17
  == 1.7.1 / 2011-02-11
12
18
 
13
19
  Bug Fixes
14
- - Fixing the "alias instance_eval" warning on JRuby
20
+ - Fixing the "alias instance_eval" warning on JRuby
15
21
 
16
22
  == 1.7.0 / 2010-08-16
17
23
 
18
- * Enhancements
19
- * Adding a "copy" function for configuration objects
20
- * Bug Fixes
21
- * Fixing warnings
24
+ Enhancements
25
+ - Adding a "copy" function for configuration objects
26
+ Bug Fixes
27
+ - Fixing warnings
22
28
 
23
29
  == 1.6.4 / 2010-06-08
24
30
 
25
- * Bug Fixes
26
- * Extending a configuration was not working properly
27
- * Descriptions were being overwritten when extending a configuration
31
+ Bug Fixes
32
+ - Extending a configuration was not working properly
33
+ - Descriptions were being overwritten when extending a configuration
28
34
 
29
35
  == 1.6.3 / 2010-06-07
30
36
 
31
- * Bug Fixes
32
- * Assign a nil description when none is given [Nathan Witmer]
37
+ Bug Fixes
38
+ - Assign a nil description when none is given [Nathan Witmer]
33
39
 
34
40
  == 1.6.2 / 2010-06-01
35
41
 
36
- * Bug Fixes
37
- * Compatibility with Ruby 1.9.2
42
+ Bug Fixes
43
+ - Compatibility with Ruby 1.9.2
38
44
 
39
45
  == 1.6.1 / 2010-04-19
40
46
 
41
- * 1 bug fix
42
- * Allow interrogative methods on configuration objects (nil?)
47
+ Bug Fixes
48
+ - Allow interrogative methods on configuration objects (nil?)
43
49
 
44
50
  == 1.6.0 / 2010-04-18
45
51
 
46
- * 1 minor enhancement
47
- * Added a default "undefined" value
52
+ Enhancements
53
+ - Added a default "undefined" value
48
54
 
49
55
  == 1.5.2 / 2010-04-06
50
56
 
51
- * 1 bug fix
52
- * Accidentally undefining the initialize method for the DSL
57
+ Bug Fixes
58
+ - Accidentally undefining the initialize method for the DSL
53
59
 
54
60
  == 1.5.1 / 2010-04-06
55
61
 
56
- * 1 bug fix
57
- * Private methods were accessible in the configuration objects
62
+ Bug Fixes
63
+ - Private methods were accessible in the configuration objects
58
64
 
59
65
  == 1.5.0 / 2010-03-11
60
66
 
61
- * 2 minor enhancements
62
- * Adding support for evaluation of Proc objects
63
- * Upgrading to the latest Mr Bones
67
+ Enhancements
68
+ - Adding support for evaluation of Proc objects
69
+ - Upgrading to the latest Mr Bones
64
70
 
65
71
 
66
72
  == 1.4.2 / 2010-02-01
67
73
 
68
- * 1 bug fix
69
- * Resolving some circular dependencies
74
+ Bug Fixes
75
+ - Resolving some circular dependencies
70
76
 
71
77
  == 1.4.1 / 2009-11-29
72
78
 
73
- * 2 bug fixes
74
- - Fixing warning message from jRuby
75
- - Kernel methods can now be used as configuration attributes
79
+ Bug Fixes
80
+ - Fixing warning message from jRuby
81
+ - Kernel methods can now be used as configuration attributes
76
82
 
77
83
  == 1.4.0 / 2009-11-07
78
84
 
79
- * 2 minor enhancement
80
- - Added a help option to hide nesting configuration atrributes
81
- - Update to Mr Bones 3.0.0
85
+ Enhancements
86
+ - Added a help option to hide nesting configuration atrributes
87
+ - Update to Mr Bones 3.0.0
82
88
 
83
89
  == 1.3.1 / 2009-10-30
84
90
 
85
- * 1 minor enhancement
86
- - Added a remove method to clobber unwanted methods in the configuration
87
- * 1 bug fix
88
- - Could not assign false as a default value
91
+ Enhancements
92
+ - Added a remove method to clobber unwanted methods in the configuration
93
+ Bug Fixes
94
+ - Could not assign false as a default value
89
95
 
90
96
  == 1.3.0 / 2009-04-05
91
97
 
92
- * 1 minor enhancement
93
- - Adding colorization options to the Help object
98
+ Enhancements
99
+ - Adding colorization options to the Help object
94
100
 
95
101
  == 1.2.0 / 2009-04-05
96
102
 
97
- * 1 minor enhancement
98
- - Help#show now matches using a regular expression
103
+ Enhancements
104
+ - Help#show now matches using a regular expression
99
105
 
100
106
  == 1.1.1 / 2009-04-05
101
107
 
102
- * 1 bug fix
103
- - You can no longer use object_id as a configuration value
104
- (Ruby 1.9 is very cranky if object_id gets undefined)
108
+ Bug Fixes
109
+ - You can no longer use object_id as a configuration value
110
+ (Ruby 1.9 is very cranky if object_id gets undefined)
105
111
 
106
112
  == 1.1.0 / 2009-04-05
107
113
 
108
- * 1 minor enhancement
109
- - Added hash accessor methods for configuration attributes
110
- * 1 bug fix
111
- - Hash values were not being handeld properly by the DSL
114
+ Enhancements
115
+ - Added hash accessor methods for configuration attributes
116
+ Bug Fixes
117
+ - Hash values were not being handeld properly by the DSL
112
118
 
113
119
  == 1.0.0 / 2009-04-04
114
120
 
115
- * 1 major enhancement
116
- - Birthday!
121
+ Enhancements
122
+ - Birthday!
@@ -82,6 +82,29 @@ module Loquacious
82
82
  ::Loquacious::Configuration::Help.new(name, opts)
83
83
  end
84
84
  alias :help :help_for
85
+
86
+ # call-seq:
87
+ # Configuration.to_hash( config )
88
+ #
89
+ # Recursively convert a configuration object to a hash.
90
+ #
91
+ def to_hash( config )
92
+ cache = { nil => {} }
93
+
94
+ Iterator.new(config).each do |node|
95
+ ary = node.name.split('.')
96
+ name = ary.pop.to_sym
97
+ parent = ary.empty? ? nil : ary.join('.')
98
+
99
+ if node.config?
100
+ cache[node.name] = cache[parent][name] = {}
101
+ else
102
+ cache[parent][name] = node.obj
103
+ end
104
+ end
105
+
106
+ return cache[nil]
107
+ end
85
108
  end
86
109
 
87
110
  instance_methods(true).each do |m|
@@ -245,6 +268,11 @@ module Loquacious
245
268
  self.__send(key, value)
246
269
  end
247
270
 
271
+ # Recursively convert the configuration object to a hash.
272
+ #
273
+ def to_hash
274
+ ::Loquacious::Configuration.to_hash(self)
275
+ end
248
276
 
249
277
  # Implementation of a domain specific language for creating configuration
250
278
  # objects. Blocks of code are evaluted by the DSL which returns a new
@@ -108,6 +108,7 @@ class Loquacious::Configuration
108
108
  frame.index += 1
109
109
  stack << new_frame(node.obj, node.name) if node.config?
110
110
 
111
+ node = next_node if node.undefined?
111
112
  return node
112
113
  end
113
114
 
@@ -145,10 +146,8 @@ class Loquacious::Configuration
145
146
  #
146
147
  Node = Struct.new( :config, :name, :desc, :key ) {
147
148
  def config?() obj.kind_of? ::Loquacious::Configuration; end
148
- def obj()
149
- o = config.__send__(key)
150
- o.kind_of?(::Loquacious::Undefined) ? nil : o
151
- end
149
+ def undefined?() obj.kind_of? ::Loquacious::Undefined; end
150
+ def obj() config.__send__(key); end
152
151
  }
153
152
 
154
153
  end # class Iterator
@@ -11,27 +11,27 @@ describe Loquacious::Configuration do
11
11
  first 'foo'
12
12
  second 'bar'
13
13
  }
14
- obj.first.should == 'foo'
15
- obj.second.should == 'bar'
14
+ obj.first.should be == 'foo'
15
+ obj.second.should be == 'bar'
16
16
  obj.third.should be_nil
17
17
  end
18
18
 
19
19
  it 'should respond to any method' do
20
20
  @obj.first.should be_nil
21
21
  @obj.first = 'foo'
22
- @obj.first.should == 'foo'
22
+ @obj.first.should be == 'foo'
23
23
 
24
24
  @obj.second = 'bar'
25
- @obj.second.should == 'bar'
25
+ @obj.second.should be == 'bar'
26
26
  end
27
27
 
28
28
  it 'should deine attribute accessors when first used' do
29
- @obj.respond_to?(:foo).should == false
30
- @obj.respond_to?(:foo=).should == false
29
+ @obj.respond_to?(:foo).should be == false
30
+ @obj.respond_to?(:foo=).should be == false
31
31
 
32
32
  @obj.foo
33
- @obj.respond_to?(:foo).should == true
34
- @obj.respond_to?(:foo=).should == true
33
+ @obj.respond_to?(:foo).should be == true
34
+ @obj.respond_to?(:foo=).should be == true
35
35
  end
36
36
 
37
37
  it 'should provide a hash object for storing method descriptions' do
@@ -43,7 +43,7 @@ describe Loquacious::Configuration do
43
43
  cfg = Loquacious::Configuration.new {
44
44
  hash({:one => 1})
45
45
  }
46
- cfg.hash.should == {:one => 1}
46
+ cfg.hash.should be == {:one => 1}
47
47
  end
48
48
 
49
49
  it 'should provide hash accessor notation for attributes' do
@@ -53,17 +53,17 @@ describe Loquacious::Configuration do
53
53
  three 3
54
54
  }
55
55
 
56
- cfg['one'].should == 1
57
- cfg[:two].should == 2
58
- cfg['three'].should == 3
56
+ cfg['one'].should be == 1
57
+ cfg[:two].should be == 2
58
+ cfg['three'].should be == 3
59
59
 
60
60
  cfg[:four].should be_nil
61
61
  cfg.four = 4
62
- cfg[:four].should == 4
62
+ cfg[:four].should be == 4
63
63
 
64
64
  cfg[:five] = 5
65
- cfg.five.should == 5
66
- cfg[:five].should == 5
65
+ cfg.five.should be == 5
66
+ cfg[:five].should be == 5
67
67
  end
68
68
 
69
69
  it 'should allow Kernel methods to be treated as configuration attributes' do
@@ -74,20 +74,20 @@ describe Loquacious::Configuration do
74
74
  puts 'not what you think'
75
75
  }
76
76
 
77
- cfg['fork'].should == 'spoon knife spork'
78
- cfg['split'].should == 'join'
79
- cfg['raise'].should == 'double down'
80
- cfg['puts'].should == 'not what you think'
77
+ cfg['fork'].should be == 'spoon knife spork'
78
+ cfg['split'].should be == 'join'
79
+ cfg['raise'].should be == 'double down'
80
+ cfg['puts'].should be == 'not what you think'
81
81
 
82
- cfg[:fork].should == 'spoon knife spork'
83
- cfg[:split].should == 'join'
84
- cfg[:raise].should == 'double down'
85
- cfg[:puts].should == 'not what you think'
82
+ cfg[:fork].should be == 'spoon knife spork'
83
+ cfg[:split].should be == 'join'
84
+ cfg[:raise].should be == 'double down'
85
+ cfg[:puts].should be == 'not what you think'
86
86
 
87
- cfg.fork.should == 'spoon knife spork'
88
- cfg.split.should == 'join'
89
- cfg.raise.should == 'double down'
90
- cfg.puts.should == 'not what you think'
87
+ cfg.fork.should be == 'spoon knife spork'
88
+ cfg.split.should be == 'join'
89
+ cfg.raise.should be == 'double down'
90
+ cfg.puts.should be == 'not what you think'
91
91
  end
92
92
 
93
93
  it 'should not be affected by loading other modules like timeout' do
@@ -98,9 +98,9 @@ describe Loquacious::Configuration do
98
98
  foo 'bar'
99
99
  baz 'buz'
100
100
  }
101
- cfg.timeout.should == 10
102
- cfg.foo.should == 'bar'
103
- cfg.baz.should == 'buz'
101
+ cfg.timeout.should be == 10
102
+ cfg.foo.should be == 'bar'
103
+ cfg.baz.should be == 'buz'
104
104
  end
105
105
 
106
106
  it 'should evaluate Proc objects when fetching values' do
@@ -110,14 +110,14 @@ describe Loquacious::Configuration do
110
110
  }
111
111
 
112
112
  obj.third = Proc.new { obj.first + obj.second }
113
- obj.third.should == 'foobar'
113
+ obj.third.should be == 'foobar'
114
114
 
115
115
  obj.second = 'baz'
116
- obj.third.should == 'foobaz'
116
+ obj.third.should be == 'foobaz'
117
117
 
118
118
  obj.first = 'Hello '
119
119
  obj.second = 'World!'
120
- obj.third.should == 'Hello World!'
120
+ obj.third.should be == 'Hello World!'
121
121
  end
122
122
 
123
123
  it 'should return a value when evaluating inside the DSL' do
@@ -128,7 +128,7 @@ describe Loquacious::Configuration do
128
128
  }
129
129
  }
130
130
 
131
- obj.first.should == 'foo'
131
+ obj.first.should be == 'foo'
132
132
  obj.second.bar.should be_nil
133
133
 
134
134
  Loquacious::Configuration::DSL.evaluate(:config => obj) {
@@ -136,8 +136,8 @@ describe Loquacious::Configuration do
136
136
  second.bar 'no longer nil'
137
137
  }
138
138
 
139
- obj.first.should == 'bar'
140
- obj.second.bar.should == 'no longer nil'
139
+ obj.first.should be == 'bar'
140
+ obj.second.bar.should be == 'no longer nil'
141
141
  end
142
142
 
143
143
  it 'should not delete descriptions' do
@@ -150,24 +150,24 @@ describe Loquacious::Configuration do
150
150
  }
151
151
  }
152
152
 
153
- obj.first.should == 'foo'
153
+ obj.first.should be == 'foo'
154
154
  obj.second.bar.should be_nil
155
155
 
156
- obj.__desc[:first].should == 'the first value'
157
- obj.__desc[:second].should == 'the second value'
158
- obj.second.__desc[:bar].should == 'time to go drinking'
156
+ obj.__desc[:first].should be == 'the first value'
157
+ obj.__desc[:second].should be == 'the second value'
158
+ obj.second.__desc[:bar].should be == 'time to go drinking'
159
159
 
160
160
  Loquacious::Configuration::DSL.evaluate(:config => obj) {
161
161
  first 'bar'
162
162
  second.bar 'no longer nil'
163
163
  }
164
164
 
165
- obj.first.should == 'bar'
166
- obj.second.bar.should == 'no longer nil'
165
+ obj.first.should be == 'bar'
166
+ obj.second.bar.should be == 'no longer nil'
167
167
 
168
- obj.__desc[:first].should == 'the first value'
169
- obj.__desc[:second].should == 'the second value'
170
- obj.second.__desc[:bar].should == 'time to go drinking'
168
+ obj.__desc[:first].should be == 'the first value'
169
+ obj.__desc[:second].should be == 'the second value'
170
+ obj.second.__desc[:bar].should be == 'time to go drinking'
171
171
  end
172
172
 
173
173
  # -----------------------------------------------------------------------
@@ -181,12 +181,12 @@ describe Loquacious::Configuration do
181
181
 
182
182
  @obj.first.should be_nil
183
183
  @obj.second.should be_nil
184
- @obj.__desc.should == {:first => nil, :second => nil}
184
+ @obj.__desc.should be == {:first => nil, :second => nil}
185
185
 
186
186
  @obj.merge! other
187
- @obj.first.should == 'foo'
188
- @obj.second.should == 'bar'
189
- @obj.__desc.should == {
187
+ @obj.first.should be == 'foo'
188
+ @obj.second.should be == 'bar'
189
+ @obj.__desc.should be == {
190
190
  :first => 'foo method',
191
191
  :second => 'bar method'
192
192
  }
@@ -211,17 +211,17 @@ describe Loquacious::Configuration do
211
211
 
212
212
  @obj.merge! other
213
213
 
214
- @obj.first.should == 'foo'
215
- @obj.second.should == 'bar'
216
- @obj.third.question.should == '?'
217
- @obj.third.answer.should == 42
214
+ @obj.first.should be == 'foo'
215
+ @obj.second.should be == 'bar'
216
+ @obj.third.question.should be == '?'
217
+ @obj.third.answer.should be == 42
218
218
 
219
- @obj.__desc.should == {
219
+ @obj.__desc.should be == {
220
220
  :first => 'foo method',
221
221
  :second => 'bar method',
222
222
  :third => 'the third group'
223
223
  }
224
- @obj.third.__desc.should == {
224
+ @obj.third.__desc.should be == {
225
225
  :question => 'perhaps you do not understand',
226
226
  :answer => 'life the universe and everything'
227
227
  }
@@ -246,8 +246,8 @@ describe Loquacious::Configuration do
246
246
  second 'bar', :desc => "bar method\n also a multiline comment"
247
247
  }
248
248
 
249
- other.__desc[:first].should == "This is the first thing we are defining in this config.\nIt has a multiline comment."
250
- other.__desc[:second].should == "bar method\nalso a multiline comment"
249
+ other.__desc[:first].should be == "This is the first thing we are defining in this config.\nIt has a multiline comment."
250
+ other.__desc[:second].should be == "bar method\nalso a multiline comment"
251
251
  end
252
252
 
253
253
  it 'should leave whitespace after a gutter marker' do
@@ -268,8 +268,8 @@ describe Loquacious::Configuration do
268
268
  second 'bar'
269
269
  }
270
270
 
271
- other.__desc[:first].should == " This is the first thing we are defining in this config.\n It has a multiline comment."
272
- other.__desc[:second].should == "This is a short explanation\n\nExample:\n do this then that\n followed by this line"
271
+ other.__desc[:first].should be == " This is the first thing we are defining in this config.\n It has a multiline comment."
272
+ other.__desc[:second].should be == "This is a short explanation\n\nExample:\n do this then that\n followed by this line"
273
273
  end
274
274
  end
275
275
 
@@ -289,7 +289,7 @@ describe Loquacious::Configuration do
289
289
  }
290
290
 
291
291
  c = Loquacious::Configuration.for 'test'
292
- c.first.should == 'foo'
292
+ c.first.should be == 'foo'
293
293
  c.second.bar.should be_nil
294
294
  end
295
295
 
@@ -307,13 +307,13 @@ describe Loquacious::Configuration do
307
307
  }
308
308
  }
309
309
 
310
- c.first.should == 1
311
- c.third.should == 3
310
+ c.first.should be == 1
311
+ c.third.should be == 3
312
312
  c.second.bar.should be_nil
313
313
 
314
- c.__desc[:first].should == 'the first value'
315
- c.__desc[:second].should == 'the second value'
316
- c.second.__desc[:bar].should == 'time to go drinking'
314
+ c.__desc[:first].should be == 'the first value'
315
+ c.__desc[:second].should be == 'the second value'
316
+ c.second.__desc[:bar].should be == 'time to go drinking'
317
317
  c.__desc[:thrid].should be_nil
318
318
  end
319
319
 
@@ -343,21 +343,21 @@ describe Loquacious::Configuration do
343
343
  }
344
344
  }
345
345
 
346
- c.first.should == 1
347
- c.third.should == 3
348
- c.second.bar.should == 'pub'
349
- c.second.baz.buz.should == 'random text'
350
- c.second.baz.boo.should == 'who'
346
+ c.first.should be == 1
347
+ c.third.should be == 3
348
+ c.second.bar.should be == 'pub'
349
+ c.second.baz.buz.should be == 'random text'
350
+ c.second.baz.boo.should be == 'who'
351
351
 
352
352
  c.second.bar = Loquacious::Undefined.new('second.bar')
353
- c.second.bar.should == 'h-bar'
354
-
355
- c.__desc[:first].should == 'the first value'
356
- c.__desc[:second].should == 'the second value'
357
- c.second.__desc[:bar].should == 'time to go drinking'
358
- c.second.__desc[:baz].should == 'getting weird'
359
- c.second.baz.__desc[:buz].should == 'post drinking feeling'
360
- c.second.baz.__desc[:boo].should == 'no need to cry about it'
353
+ c.second.bar.should be == 'h-bar'
354
+
355
+ c.__desc[:first].should be == 'the first value'
356
+ c.__desc[:second].should be == 'the second value'
357
+ c.second.__desc[:bar].should be == 'time to go drinking'
358
+ c.second.__desc[:baz].should be == 'getting weird'
359
+ c.second.baz.__desc[:buz].should be == 'post drinking feeling'
360
+ c.second.baz.__desc[:boo].should be == 'no need to cry about it'
361
361
  c.__desc[:thrid].should be_nil
362
362
  end
363
363
 
@@ -384,12 +384,12 @@ describe Loquacious::Configuration do
384
384
  }
385
385
  }
386
386
 
387
- c.second.baz.buz.should == 'random text'
388
- c.second.baz.boo.should == 'who'
387
+ c.second.baz.buz.should be == 'random text'
388
+ c.second.baz.boo.should be == 'who'
389
389
 
390
390
  c.second.baz = Loquacious::Undefined.new('second.bar')
391
391
  c.second.baz.should be_nil
392
- c.second.__desc[:baz].should == 'deprecated'
392
+ c.second.__desc[:baz].should be == 'deprecated'
393
393
  end
394
394
 
395
395
  it 'properly handles Proc default values' do
@@ -410,8 +410,42 @@ describe Loquacious::Configuration do
410
410
  }
411
411
  }
412
412
 
413
- c.second.baz.should == 36
414
- c.second.__desc[:baz].should == 'proc will be evaluated'
413
+ c.second.baz.should be == 36
414
+ c.second.__desc[:baz].should be == 'proc will be evaluated'
415
+ end
416
+ end
417
+
418
+ # -----------------------------------------------------------------------
419
+ describe 'when converting to a hash' do
420
+ it "should do so recursively" do
421
+ c = Loquacious::Configuration.new {
422
+ first 1, :desc => 'one is the loneliest number'
423
+ second {
424
+ bar 'pub', :desc => 'where the magic happens'
425
+ desc 'overwrite me'
426
+ baz {
427
+ buz 'random text'
428
+ boo 'who'
429
+ }
430
+ }
431
+ third 3
432
+ }
433
+ c.to_hash.should == {
434
+ :first => 1,
435
+ :second => {
436
+ :bar => 'pub',
437
+ :baz => {
438
+ :buz => 'random text',
439
+ :boo => 'who'
440
+ }
441
+ },
442
+ :third => 3
443
+ }
444
+ end
445
+
446
+ it "just returns an empty hash for an empty configuration" do
447
+ c = Loquacious::Configuration.new { }
448
+ c.to_hash.should == {}
415
449
  end
416
450
  end
417
451
 
@@ -52,7 +52,7 @@ describe Loquacious::Configuration::Help do
52
52
  OUTPUT
53
53
 
54
54
  @help.show_all
55
- @sio.to_s.should == str.gutter!
55
+ @sio.to_s.should be == str.gutter!
56
56
  end
57
57
 
58
58
  it "prints out a specific attribute" do
@@ -62,7 +62,7 @@ describe Loquacious::Configuration::Help do
62
62
  |
63
63
  OUTPUT
64
64
  @help.show_attribute :second
65
- @sio.to_s.should == str.gutter!
65
+ @sio.to_s.should be == str.gutter!
66
66
  end
67
67
 
68
68
  it "properly parses nested attributes" do
@@ -78,7 +78,7 @@ describe Loquacious::Configuration::Help do
78
78
  |
79
79
  OUTPUT
80
80
  @help.show_attribute 'third'
81
- @sio.to_s.should == str.gutter!
81
+ @sio.to_s.should be == str.gutter!
82
82
 
83
83
  @sio.clear
84
84
  str = <<-OUTPUT
@@ -87,7 +87,7 @@ describe Loquacious::Configuration::Help do
87
87
  |
88
88
  OUTPUT
89
89
  @help.show_attribute %w[third question]
90
- @sio.to_s.should == str.gutter!
90
+ @sio.to_s.should be == str.gutter!
91
91
 
92
92
  @sio.clear
93
93
  str = <<-OUTPUT
@@ -96,7 +96,7 @@ describe Loquacious::Configuration::Help do
96
96
  |
97
97
  OUTPUT
98
98
  @help.show_attribute 'third.answer'
99
- @sio.to_s.should == str.gutter!
99
+ @sio.to_s.should be == str.gutter!
100
100
  end
101
101
 
102
102
  it "hides nesting attributes" do
@@ -118,7 +118,7 @@ describe Loquacious::Configuration::Help do
118
118
  OUTPUT
119
119
 
120
120
  help.show_all
121
- @sio.to_s.should == str.gutter!
121
+ @sio.to_s.should be == str.gutter!
122
122
 
123
123
  @sio.clear
124
124
  str = <<-OUTPUT
@@ -130,7 +130,7 @@ describe Loquacious::Configuration::Help do
130
130
  |
131
131
  OUTPUT
132
132
  help.show_attribute 'third'
133
- @sio.to_s.should == str.gutter!
133
+ @sio.to_s.should be == str.gutter!
134
134
 
135
135
  @sio.clear
136
136
  end
@@ -159,7 +159,7 @@ describe Loquacious::Configuration::Help do
159
159
  |
160
160
  OUTPUT
161
161
  @help.show_attribute 'fourth'
162
- @sio.to_s.should == str.gutter!
162
+ @sio.to_s.should be == str.gutter!
163
163
  end
164
164
 
165
165
  it "pretty prints values" do
@@ -181,7 +181,7 @@ describe Loquacious::Configuration::Help do
181
181
  |
182
182
  OUTPUT
183
183
  @help.show :values => true
184
- @sio.to_s.should == str.gutter!
184
+ @sio.to_s.should be == str.gutter!
185
185
  end
186
186
 
187
187
  it "closely packs attributes when descriptions are omitted" do
@@ -193,7 +193,7 @@ describe Loquacious::Configuration::Help do
193
193
  | - third.question => :symbol
194
194
  OUTPUT
195
195
  @help.show_all :values => true, :descriptions => false
196
- @sio.to_s.should == str.gutter!
196
+ @sio.to_s.should be == str.gutter!
197
197
  end
198
198
 
199
199
  it "automatically picks up changes to the configuration" do
@@ -207,7 +207,7 @@ describe Loquacious::Configuration::Help do
207
207
  |
208
208
  OUTPUT
209
209
  @help.show_attribute 'fifth'
210
- @sio.to_s.should == str.gutter!
210
+ @sio.to_s.should be == str.gutter!
211
211
  end
212
212
 
213
213
  it "uses a custom name leader" do
@@ -230,7 +230,7 @@ describe Loquacious::Configuration::Help do
230
230
  |
231
231
  OUTPUT
232
232
  help.show_all
233
- @sio.to_s.should == str.gutter!
233
+ @sio.to_s.should be == str.gutter!
234
234
 
235
235
  @sio.clear
236
236
  str = <<-OUTPUT
@@ -241,7 +241,7 @@ describe Loquacious::Configuration::Help do
241
241
  | ## third.question => :symbol
242
242
  OUTPUT
243
243
  help.show_all :values => true, :descriptions => false
244
- @sio.to_s.should == str.gutter!
244
+ @sio.to_s.should be == str.gutter!
245
245
  end
246
246
 
247
247
  it "uses a custom name length" do
@@ -264,7 +264,7 @@ describe Loquacious::Configuration::Help do
264
264
  |
265
265
  OUTPUT
266
266
  help.show_all
267
- @sio.to_s.should == str.gutter!
267
+ @sio.to_s.should be == str.gutter!
268
268
 
269
269
  @sio.clear
270
270
  str = <<-OUTPUT
@@ -275,7 +275,7 @@ describe Loquacious::Configuration::Help do
275
275
  | - thir...ion => :symbol
276
276
  OUTPUT
277
277
  help.show_all :values => true, :descriptions => false
278
- @sio.to_s.should == str.gutter!
278
+ @sio.to_s.should be == str.gutter!
279
279
  end
280
280
 
281
281
  it "uses a custom name/value separator" do
@@ -298,7 +298,7 @@ describe Loquacious::Configuration::Help do
298
298
  |
299
299
  OUTPUT
300
300
  help.show_all :values => true
301
- @sio.to_s.should == str.gutter!
301
+ @sio.to_s.should be == str.gutter!
302
302
 
303
303
  @sio.clear
304
304
  str = <<-OUTPUT
@@ -309,7 +309,7 @@ describe Loquacious::Configuration::Help do
309
309
  | - third.question :: :symbol
310
310
  OUTPUT
311
311
  help.show_all :values => true, :descriptions => false
312
- @sio.to_s.should == str.gutter!
312
+ @sio.to_s.should be == str.gutter!
313
313
  end
314
314
 
315
315
  it "uses a custom description leader" do
@@ -352,7 +352,7 @@ describe Loquacious::Configuration::Help do
352
352
  |
353
353
  OUTPUT
354
354
  help.show_all :values => true
355
- @sio.to_s.should == str.gutter!
355
+ @sio.to_s.should be == str.gutter!
356
356
  end
357
357
  end
358
358
 
@@ -10,24 +10,24 @@ describe Loquacious::Configuration::Iterator do
10
10
 
11
11
  it 'should find a particular attribute' do
12
12
  node = @iterator.find 'first'
13
- node.name.should == 'first'
14
- node.key.should == :first
15
- node.desc.should == 'foo method'
16
- node.obj.should == 'foo'
17
- node.config?.should == false
13
+ node.name.should be == 'first'
14
+ node.key.should be == :first
15
+ node.desc.should be == 'foo method'
16
+ node.obj.should be == 'foo'
17
+ node.config?.should be == false
18
18
 
19
19
  node = @iterator.find :third
20
- node.name.should == 'third'
21
- node.key.should == :third
22
- node.desc.should == 'the third group'
23
- node.config?.should == true
20
+ node.name.should be == 'third'
21
+ node.key.should be == :third
22
+ node.desc.should be == 'the third group'
23
+ node.config?.should be == true
24
24
 
25
25
  node = @iterator.find('third.answer')
26
- node.name.should == 'third.answer'
27
- node.key.should == :answer
28
- node.desc.should == 'life the universe and everything'
29
- node.obj.should == 42
30
- node.config?.should == false
26
+ node.name.should be == 'third.answer'
27
+ node.key.should be == :answer
28
+ node.desc.should be == 'life the universe and everything'
29
+ node.obj.should be == 42
30
+ node.config?.should be == false
31
31
  end
32
32
 
33
33
  it 'should return nil for unknown attributes' do
@@ -41,22 +41,31 @@ describe Loquacious::Configuration::Iterator do
41
41
  ary = Array.new
42
42
  @iterator.each {|n| ary << n.name}
43
43
 
44
- ary.should == %w{first second third third.answer third.question}
44
+ ary.should be == %w{first second third third.answer third.question}
45
45
  end
46
46
 
47
47
  it 'should iterate over nested attributes if given' do
48
48
  ary = Array.new
49
49
  @iterator.each('third') {|n| ary << n.name}
50
- ary.should == %w{third third.answer third.question}
50
+ ary.should be == %w{third third.answer third.question}
51
51
 
52
52
  ary.clear
53
53
  @iterator.each('first') {|n| ary << n.name}
54
- ary.should == %w{first}
54
+ ary.should be == %w{first}
55
55
 
56
56
  ary.clear
57
57
  @iterator.each('not_here') {|n| ary << n.name}
58
58
  ary.should be_empty
59
59
  end
60
+
61
+ it 'should ignore undefined nodes' do
62
+ @config.does_not_exist.foo # this creates a Loquacious::Undefined node
63
+ @config.does_not_exist.kind_of?(::Loquacious::Undefined).should be_true
64
+
65
+ ary = Array.new
66
+ @iterator.each {|n| ary << n.name}
67
+ ary.should be == %w{first second third third.answer third.question}
68
+ end
60
69
  end
61
70
 
62
71
  # EOF
@@ -11,11 +11,11 @@ describe Loquacious do
11
11
  end
12
12
 
13
13
  it "finds things releative to 'lib'" do
14
- Loquacious.libpath(%w[loquacious config.rb]).should == File.join(@root_dir, %w[lib loquacious config.rb])
14
+ Loquacious.libpath(%w[loquacious config.rb]).should be == File.join(@root_dir, %w[lib loquacious config.rb])
15
15
  end
16
16
 
17
17
  it "finds things releative to 'root'" do
18
- Loquacious.path('Rakefile').should == File.join(@root_dir, 'Rakefile')
18
+ Loquacious.path('Rakefile').should be == File.join(@root_dir, 'Rakefile')
19
19
  end
20
20
 
21
21
  describe "when copying configuration objects" do
@@ -31,10 +31,10 @@ describe Loquacious do
31
31
  copy.first = 'foobar'
32
32
  copy.second.bar = 'buz'
33
33
 
34
- obj.first.should == 'foo'
35
- obj.second.bar.should == 'baz'
36
- copy.first.should == 'foobar'
37
- copy.second.bar.should == 'buz'
34
+ obj.first.should be == 'foo'
35
+ obj.second.bar.should be == 'baz'
36
+ copy.first.should be == 'foobar'
37
+ copy.second.bar.should be == 'buz'
38
38
  end
39
39
 
40
40
  it "looks up a configuration object by name" do
@@ -46,8 +46,8 @@ describe Loquacious do
46
46
  }
47
47
 
48
48
  copy = Loquacious.copy('by name')
49
- copy.first.should == 'foo'
50
- copy.second.bar.should == 'baz'
49
+ copy.first.should be == 'foo'
50
+ copy.second.bar.should be == 'baz'
51
51
  end
52
52
 
53
53
  it "returns nil when a configuration object cannot be found" do
@@ -67,9 +67,9 @@ describe Loquacious do
67
67
  third "hey I'm new"
68
68
  }
69
69
 
70
- copy.first.should == 'foo'
71
- copy.second.bar.should == 'foobar'
72
- copy.third.should == "hey I'm new"
70
+ copy.first.should be == 'foo'
71
+ copy.second.bar.should be == 'foobar'
72
+ copy.third.should be == "hey I'm new"
73
73
  end
74
74
  end
75
75
  end
@@ -4,29 +4,29 @@ require File.expand_path('spec_helper', File.dirname(__FILE__))
4
4
  describe String do
5
5
 
6
6
  it "reduces to a size by replacing characters from the middle" do
7
- "this is a longish string".reduce(10).should == "this...ing"
8
- "this is a longish string".reduce(15).should == "this i...string"
9
- "this is a longish string".reduce(24).should == "this is a longish string"
7
+ "this is a longish string".reduce(10).should be == "this...ing"
8
+ "this is a longish string".reduce(15).should be == "this i...string"
9
+ "this is a longish string".reduce(24).should be == "this is a longish string"
10
10
 
11
- "this is a longish string".reduce(10, '--').should == "this--ring"
11
+ "this is a longish string".reduce(10, '--').should be == "this--ring"
12
12
  end
13
13
 
14
14
  it "indents by a given number of spaces" do
15
- "hello".indent(2).should == " hello"
16
- "hello\nworld".indent(4).should == " hello\n world"
17
- " a\nslightly\n longer\n string\n".indent(2).should == " a\n slightly\n longer\n string\n "
15
+ "hello".indent(2).should be == " hello"
16
+ "hello\nworld".indent(4).should be == " hello\n world"
17
+ " a\nslightly\n longer\n string\n".indent(2).should be == " a\n slightly\n longer\n string\n "
18
18
  end
19
19
 
20
20
  it "indents using a leader string" do
21
- "hello".indent("foo ").should == "foo hello"
22
- "hello\nworld".indent("...").should == "...hello\n...world"
23
- " a\nslightly\n longer\n string\n".indent("#").should == "# a\n#slightly\n# longer\n# string\n#"
21
+ "hello".indent("foo ").should be == "foo hello"
22
+ "hello\nworld".indent("...").should be == "...hello\n...world"
23
+ " a\nslightly\n longer\n string\n".indent("#").should be == "# a\n#slightly\n# longer\n# string\n#"
24
24
  end
25
25
 
26
26
  it "removes a leading gutter from all lines" do
27
27
  str = " | foo"
28
28
  result = str.gutter!
29
- result.should == " foo"
29
+ result.should be == " foo"
30
30
  result.should equal(str)
31
31
 
32
32
  str = <<-STRING
@@ -39,13 +39,13 @@ describe String do
39
39
  STRING
40
40
 
41
41
  str.gutter!
42
- str.should == " And this is where gutters really shine!\n HERE DOCS!!\n|they are the best\n\n You can indent stuff nicely and all that\nall done now\n"
42
+ str.should be == " And this is where gutters really shine!\n HERE DOCS!!\n|they are the best\n\n You can indent stuff nicely and all that\nall done now\n"
43
43
  end
44
44
 
45
45
  it "creates a copy when removing a leading gutter" do
46
46
  str = " | foo"
47
47
  result = str.gutter
48
- result.should == " foo"
48
+ result.should be == " foo"
49
49
  result.should_not equal(str)
50
50
  end
51
51
  end
@@ -1 +1 @@
1
- 1.8.1
1
+ 1.9.0
metadata CHANGED
@@ -1,91 +1,50 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: loquacious
3
- version: !ruby/object:Gem::Version
4
- hash: 53
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 8
9
- - 1
10
- version: 1.8.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.9.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Tim Pease
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-06-09 00:00:00 -06:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2011-09-13 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: rspec
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2161298080 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
18
+ requirements:
27
19
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 15
30
- segments:
31
- - 2
32
- - 6
33
- version: "2.6"
20
+ - !ruby/object:Gem::Version
21
+ version: '2.6'
34
22
  type: :development
35
- version_requirements: *id001
36
- description: |-
37
- Descriptive configuration files for Ruby written in Ruby.
38
-
39
- Loquacious provides a very open configuration system written in ruby and
40
- descriptions for each configuration attribute. The attributes and descriptions
41
- can be iterated over allowing for helpful information about those attributes to
42
- be displayed to the user.
43
-
44
- In the simple case we have a file something like
45
-
46
- Loquacious.configuration_for('app') {
47
- name 'value', :desc => "Defines the name"
48
- foo 'bar', :desc => "FooBar"
49
- id 42, :desc => "Ara T. Howard"
50
- }
51
-
52
- Which can be loaded via the standard Ruby loading mechanisms
53
-
54
- Kernel.load 'config/app.rb'
55
-
56
- The attributes and their descriptions can be printed by using a Help object
57
-
58
- help = Loquacious.help_for('app')
59
- help.show :values => true # show the values for the attributes, too
60
-
61
- Descriptions are optional, and configurations can be nested arbitrarily deep.
62
-
63
- Loquacious.configuration_for('nested') {
64
- desc "The outermost level"
65
- a {
66
- desc "One more level in"
67
- b {
68
- desc "Finally, a real value"
69
- c 'value'
70
- }
71
- }
72
- }
73
-
74
- config = Loquacious.configuration_for('nested')
75
-
76
- p config.a.b.c #=> "value"
77
-
78
- And as you can see, descriptions can either be given inline after the value or
79
- they can appear above the attribute and value on their own line.
23
+ prerelease: false
24
+ version_requirements: *2161298080
25
+ description: ! "Descriptive configuration files for Ruby written in Ruby.\n\nLoquacious
26
+ provides a very open configuration system written in ruby and\ndescriptions for
27
+ each configuration attribute. The attributes and descriptions\ncan be iterated over
28
+ allowing for helpful information about those attributes to\nbe displayed to the
29
+ user.\n\nIn the simple case we have a file something like\n\n Loquacious.configuration_for('app')
30
+ {\n name 'value', :desc => \"Defines the name\"\n foo 'bar', :desc => \"FooBar\"\n
31
+ \ id 42, :desc => \"Ara T. Howard\"\n }\n\nWhich can be loaded via the
32
+ standard Ruby loading mechanisms\n\n Kernel.load 'config/app.rb'\n\nThe attributes
33
+ and their descriptions can be printed by using a Help object\n\n help = Loquacious.help_for('app')\n
34
+ \ help.show :values => true # show the values for the attributes, too\n\nDescriptions
35
+ are optional, and configurations can be nested arbitrarily deep.\n\n Loquacious.configuration_for('nested')
36
+ {\n desc \"The outermost level\"\n a {\n desc \"One more level in\"\n
37
+ \ b {\n desc \"Finally, a real value\"\n c 'value'\n }\n
38
+ \ }\n }\n\n config = Loquacious.configuration_for('nested')\n\n p config.a.b.c
39
+ \ #=> \"value\"\n\nAnd as you can see, descriptions can either be given inline after
40
+ the value or\nthey can appear above the attribute and value on their own line."
80
41
  email: tim.pease@gmail.com
81
42
  executables: []
82
-
83
43
  extensions: []
84
-
85
- extra_rdoc_files:
44
+ extra_rdoc_files:
86
45
  - History.txt
87
46
  - README.rdoc
88
- files:
47
+ files:
89
48
  - History.txt
90
49
  - README.rdoc
91
50
  - Rakefile
@@ -105,42 +64,31 @@ files:
105
64
  - spec/spec.opts
106
65
  - spec/spec_helper.rb
107
66
  - spec/string_spec.rb
108
- - tmp.rb
109
67
  - version.txt
110
- has_rdoc: true
111
68
  homepage: http://rubygems.org/gems/loquacious
112
69
  licenses: []
113
-
114
70
  post_install_message:
115
- rdoc_options:
71
+ rdoc_options:
116
72
  - --main
117
73
  - README.rdoc
118
- require_paths:
74
+ require_paths:
119
75
  - lib
120
- required_ruby_version: !ruby/object:Gem::Requirement
76
+ required_ruby_version: !ruby/object:Gem::Requirement
121
77
  none: false
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- hash: 3
126
- segments:
127
- - 0
128
- version: "0"
129
- required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
83
  none: false
131
- requirements:
132
- - - ">="
133
- - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 0
137
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
138
88
  requirements: []
139
-
140
89
  rubyforge_project: loquacious
141
- rubygems_version: 1.3.7
90
+ rubygems_version: 1.8.6
142
91
  signing_key:
143
92
  specification_version: 3
144
93
  summary: Descriptive configuration files for Ruby written in Ruby.
145
94
  test_files: []
146
-
data/tmp.rb DELETED
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift 'lib'
4
- require 'loquacious'
5
-
6
- config = Loquacious.configuration_for('test') {}
7
-
8
- Loquacious.defaults_for('test') {
9
- bar(Proc.new { config.foo + '.bar' })
10
- foo 'foo'
11
- }
12
-
13
- $stdout.puts "foo => #{config.foo}"
14
- $stdout.puts "bar => #{config.bar}"
15
-