loquacious 1.7.1 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
+ == 1.8.0 / 2011-06-03
2
+
3
+ Enhancements
4
+ - Support for defalut values on configuration properties
5
+
1
6
  == 1.7.1 / 2011-02-11
2
7
 
3
8
  Bug Fixes
@@ -1,6 +1,6 @@
1
1
  = Loquacious
2
2
  by Tim Pease
3
- http://codeforpeople.rubyforge.org/loquacious
3
+ http://rubygems.org/gems/loquacious
4
4
 
5
5
  == DESCRIPTION:
6
6
 
@@ -104,32 +104,28 @@ they can appear above the attribute and value on their own line.
104
104
 
105
105
  desc "Configuration options for ActiveRecord::Base."
106
106
  active_record {
107
- desc <<-__
107
+ colorize_logging true, :desc => <<-__
108
108
  Determines whether to use ANSI codes to colorize the logging statements committed
109
109
  by the connection adapter. These colors make it much easier to overview things
110
110
  during debugging (when used through a reader like +tail+ and on a black background),
111
111
  but may complicate matters if you use software like syslog. This is true, by default.
112
112
  __
113
- colorize_logging true
114
113
 
115
- desc <<-__
114
+ default_timezone :local, :desc => <<-__
116
115
  Determines whether to use Time.local (using :local) or Time.utc (using :utc)
117
116
  when pulling dates and times from the database. This is set to :local by default.
118
117
  __
119
- default_timezone :local
120
118
  }
121
119
 
122
- desc <<-__
120
+ log_level :info, :desc => <<-__
123
121
  The log level to use for the default Rails logger. In production mode,
124
122
  this defaults to :info. In development mode, it defaults to :debug.
125
123
  __
126
- log_level :info
127
124
 
128
- desc <<-__
125
+ log_path 'log/development.log', :desc => <<-__
129
126
  The path to the log file to use. Defaults to log/\#{environment}.log
130
127
  (e.g. log/development.log or log/production.log).
131
128
  __
132
- log_path 'log/development.log'
133
129
  }
134
130
 
135
131
  help = Configuration.help_for :nested
@@ -170,14 +166,13 @@ they can appear above the attribute and value on their own line.
170
166
  include Loquacious
171
167
 
172
168
  Configuration.for(:gutters) {
173
- desc <<-__
169
+ log_path "log/development.log", :desc => <<-__
174
170
  The path to the log file to use. Defaults to log/\#{environment}.log
175
171
  (e.g. log/development.log or log/production.log).
176
172
  |
177
173
  | config.log_path = File.join(ROOT, "log", "\#{environment}.log
178
174
  |
179
175
  __
180
- log_path "log/development.log"
181
176
 
182
177
  log_level :warn, :desc => <<-__
183
178
  |The log level to use for the default Rails logger. In production mode,
@@ -212,7 +207,7 @@ they can appear above the attribute and value on their own line.
212
207
 
213
208
  (The MIT License)
214
209
 
215
- Copyright (c) 2009-2010
210
+ Copyright (c) 2009-2011
216
211
 
217
212
  Permission is hereby granted, free of charge, to any person obtaining
218
213
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -12,13 +12,12 @@ Bones {
12
12
  name 'loquacious'
13
13
  authors 'Tim Pease'
14
14
  email 'tim.pease@gmail.com'
15
- url 'http://gemcutter.org/gems/loquacious'
15
+ url 'http://rubygems.org/gems/loquacious'
16
16
  readme_file 'README.rdoc'
17
- ignore_file '.gitignore'
18
17
  spec.opts << '--color'
19
18
  use_gmail
20
19
 
21
- depend_on 'rspec', :development => true
20
+ depend_on 'rspec', '~> 2.6', :development => true
22
21
  }
23
22
 
24
23
  task 'ann:prereqs' do
@@ -1,20 +1,19 @@
1
1
  # Using Ruby heredocs for descriptions, the Loquacious configuration will
2
2
  # strip out leading whitespace but preserve line breaks. Gutter lines can be
3
3
  # used to mark where leading whitespace should be preserved. This is useful
4
- # is you need to provide example code in your descriptions.
4
+ # if you need to provide example code in your descriptions.
5
5
 
6
6
  require 'loquacious'
7
7
  include Loquacious
8
8
 
9
9
  Configuration.for(:gutters) {
10
- desc <<-__
10
+ log_path "log/development.log", :desc => <<-__
11
11
  The path to the log file to use. Defaults to log/\#{environment}.log
12
12
  (e.g. log/development.log or log/production.log).
13
13
  |
14
14
  | config.log_path = File.join(ROOT, "log", "\#{environment}.log
15
15
  |
16
16
  __
17
- log_path "log/development.log"
18
17
 
19
18
  log_level :warn, :desc => <<-__
20
19
  |The log level to use for the default Rails logger. In production mode,
@@ -15,32 +15,28 @@ Configuration.for(:nested) {
15
15
 
16
16
  desc "Configuration options for ActiveRecord::Base."
17
17
  active_record {
18
- desc <<-__
18
+ colorize_logging true, :desc => <<-__
19
19
  Determines whether to use ANSI codes to colorize the logging statements committed
20
20
  by the connection adapter. These colors make it much easier to overview things
21
21
  during debugging (when used through a reader like +tail+ and on a black background),
22
22
  but may complicate matters if you use software like syslog. This is true, by default.
23
23
  __
24
- colorize_logging true
25
24
 
26
- desc <<-__
25
+ default_timezone :local, :desc => <<-__
27
26
  Determines whether to use Time.local (using :local) or Time.utc (using :utc)
28
27
  when pulling dates and times from the database. This is set to :local by default.
29
28
  __
30
- default_timezone :local
31
29
  }
32
30
 
33
- desc <<-__
31
+ log_level :info, :desc => <<-__
34
32
  The log level to use for the default Rails logger. In production mode,
35
33
  this defaults to :info. In development mode, it defaults to :debug.
36
34
  __
37
- log_level :info
38
35
 
39
- desc <<-__
36
+ log_path 'log/development.log', :desc => <<-__
40
37
  The path to the log file to use. Defaults to log/\#{environment}.log
41
38
  (e.g. log/development.log or log/production.log).
42
39
  __
43
- log_path 'log/development.log'
44
40
  }
45
41
 
46
42
  help = Configuration.help_for :nested
@@ -25,6 +25,18 @@ module Loquacious
25
25
  alias :config_for :configuration_for
26
26
  alias :config :configuration_for
27
27
 
28
+ # Set the default properties for the configuration associated with the
29
+ # given _name_. A _block_ must be provided to this method.
30
+ #
31
+ # The same _name_ can be used multiple times with different configuration
32
+ # blocks. Each block will add or modify the configuration; i.e. the
33
+ # configurations are additive.
34
+ #
35
+ def defaults_for( name, &block )
36
+ ::Loquacious::Configuration.defaults_for(name, &block)
37
+ end
38
+ alias :defaults :defaults_for
39
+
28
40
  # Returns a Help instance for the configuration associated with the
29
41
  # given _name_. See the Help#initialize method for the options that
30
42
  # can be used with this method.
@@ -82,6 +94,7 @@ module Loquacious
82
94
  # Loquacious.remove :gem # courtesy of rubygems
83
95
  # Loquacious.remove :test, :file # courtesy of rake
84
96
  # Loquacious.remove :main # courtesy of main
97
+ # Loquacious.remove :timeout # courtesy of timeout
85
98
  #
86
99
  def remove( *args )
87
100
  args.each { |name|
@@ -1,7 +1,20 @@
1
1
 
2
2
  module Loquacious
3
3
 
4
+ # A Configuration provides a "blank slate" for storing configuration
5
+ # properties along with descriptions and default values. Configurations are
6
+ # accessed by name, and hence, the configuration properties can be retrieved
7
+ # from any location in your code.
4
8
  #
9
+ # Each property has an associated description that can be displayed to the
10
+ # user via the Configuration::Help class. This is the main point of the
11
+ # Loquacious library - tell the user what all yoru configruation properties
12
+ # actually do!
13
+ #
14
+ # Each configurationp property can also have a default value that is
15
+ # returned if no value has been set for that property. Each property should
16
+ # hae a sensible default - the user should not have to configure every
17
+ # property in order to use a piece of code.
5
18
  #
6
19
  class Configuration
7
20
 
@@ -28,12 +41,36 @@ module Loquacious
28
41
  end
29
42
 
30
43
  if @table.has_key? name
31
- DSL.new(@table[name], &block)
44
+ DSL.evaluate(:config => @table[name], &block)
32
45
  else
33
46
  @table[name] = DSL.evaluate(&block)
34
47
  end
35
48
  end
36
49
 
50
+ # call-seq:
51
+ # Configuration.defaults_for( name ) { block }
52
+ #
53
+ # Set the default values for the configuration associated with the given
54
+ # _name_. A _block_ is required by this method.
55
+ #
56
+ # Default values do not interfere with normal configuration values. If
57
+ # both are defined for a particualr configruation setting, then the
58
+ # regular configuration value will be returned.
59
+ #
60
+ # Defaults allow the user to define configuration values before the
61
+ # library defaults have been loaded. They prevent library defaults from
62
+ # overriding user settings.
63
+ #
64
+ def defaults_for( name, &block )
65
+ raise "defaults require a block" if block.nil?
66
+
67
+ if @table.has_key? name
68
+ DSL.evaluate(:config => @table[name], :defaults_mode => true, &block)
69
+ else
70
+ @table[name] = DSL.evaluate(:defaults_mode => true, &block)
71
+ end
72
+ end
73
+
37
74
  # call-seq:
38
75
  # Configuration.help_for( name, opts = {} )
39
76
  #
@@ -64,12 +101,25 @@ module Loquacious
64
101
  # Accessor for the description hash.
65
102
  attr_reader :__desc
66
103
 
104
+ # Accessor for configuration values
105
+ attr_reader :__values
106
+
107
+ # Accessor for configuration defaults
108
+ attr_reader :__defaults
109
+
110
+ # Flag to switch the configuration object into defaults mode. This allows
111
+ # default values to be set instead regular values.
112
+ attr_accessor :__defaults_mode
113
+
67
114
  # Create a new configuration object and initialize it using an optional
68
115
  # _block_ of code.
69
116
  #
70
117
  def initialize( &block )
71
118
  @__desc = Hash.new
72
- self.merge!(DSL.evaluate(&block)) if block
119
+ @__values = Hash.new
120
+ @__defaults = Hash.new
121
+ @__defaults_mode = false
122
+ DSL.evaluate(:config => self, &block) if block
73
123
  end
74
124
 
75
125
  # When invoked, an attribute reader and writer are defined for the
@@ -81,31 +131,40 @@ module Loquacious
81
131
  def method_missing( method, *args, &block )
82
132
  m = method.to_s.delete('=').to_sym
83
133
 
84
- __eigenclass_eval "attr_writer :#{m}"
85
- __eigenclass_eval <<-CODE
134
+ __eigenclass_eval "def #{m}=( value ) @__values[#{m.inspect}] = value; end", __FILE__, __LINE__
135
+ __eigenclass_eval <<-CODE, __FILE__, __LINE__+1
86
136
  def #{m}( *args, &block )
137
+ value = @__values[#{m.inspect}]
138
+
87
139
  if args.empty? and !block
88
- return @#{m} if @#{m}.kind_of?(Configuration)
89
- return @#{m}.respond_to?(:call) ? @#{m}.call : @#{m}
140
+ return value if value.kind_of?(Configuration)
141
+ value = @__defaults[#{m.inspect}] if value.kind_of?(Loquacious::Undefined) and @__defaults.has_key? #{m.inspect}
142
+ return value.respond_to?(:call) ? value.call : value
90
143
  end
91
144
 
92
- v = (1 == args.length ? args.first : args)
93
- v = DSL.evaluate(&block) if block
94
-
95
- if @#{m}.kind_of?(Configuration)
96
- @#{m}.merge! v
145
+ if block
146
+ v = DSL.evaluate(:defaults_mode => __defaults_mode, &block)
147
+ if value.kind_of?(Configuration)
148
+ value.merge! v
149
+ else
150
+ @__values[#{m.inspect}] = v
151
+ end
97
152
  else
98
- @#{m} = v
153
+ v = (1 == args.length ? args.first : args)
154
+ if __defaults_mode
155
+ @__defaults[#{m.inspect}] = v
156
+ else
157
+ @__values[#{m.inspect}] = v
158
+ end
99
159
  end
100
160
 
101
- return @#{m} if @#{m}.kind_of?(Configuration)
102
- return @#{m}.respond_to?(:call) ? @#{m}.call : @#{m}
161
+ return self.#{m}
103
162
  end
104
163
  CODE
105
164
 
106
165
  __desc[m] = nil unless __desc.has_key? m
107
166
 
108
- default = (args.empty? and !block) ? Loquacious::Undefined.new(m.to_s) : nil
167
+ default = ((__defaults_mode or args.empty?) and !block) ? Loquacious::Undefined.new(m.to_s) : nil
109
168
  self.__send("#{m}=", default)
110
169
  self.__send("#{m}", *args, &block)
111
170
  end
@@ -123,9 +182,9 @@ module Loquacious
123
182
  # Evaluate the given _code_ string in the context of this object's
124
183
  # eigenclass (singleton class).
125
184
  #
126
- def __eigenclass_eval( code )
185
+ def __eigenclass_eval( code, file, line )
127
186
  ec = class << self; self; end
128
- ec.module_eval code
187
+ ec.module_eval code, file, line
129
188
  rescue StandardError
130
189
  Kernel.raise Error, "cannot evalutate this code:\n#{code}\n"
131
190
  end
@@ -141,14 +200,26 @@ module Loquacious
141
200
  return self if other.equal? self
142
201
  Kernel.raise Error, "can only merge another Configuration" unless other.kind_of?(Configuration)
143
202
 
203
+ other_values = other.__values
204
+ other_defaults = other.__defaults
205
+
144
206
  other.__desc.each do |key,desc|
145
- value = other.__send(key)
146
- if self.__send(key).kind_of?(Configuration)
147
- self.__send(key).merge! value
148
- else
149
- self.__send("#{key}=", value)
207
+ value = @__values[key]
208
+ other_value = other_values[key]
209
+
210
+ if value.kind_of?(Configuration) and other_value.kind_of?(Configuration)
211
+ value.merge! other_value
212
+ elsif !other_value.kind_of?(Loquacious::Undefined)
213
+ @__values[key] = other_value
214
+ end
215
+
216
+ if other_defaults.has_key? key
217
+ @__defaults[key] = other_defaults[key]
218
+ end
219
+
220
+ if desc
221
+ __desc[key] = desc
150
222
  end
151
- __desc[key] = desc
152
223
  end
153
224
 
154
225
  self
@@ -192,7 +263,7 @@ module Loquacious
192
263
  end
193
264
  Kernel.methods.each do |m|
194
265
  next if m[::Loquacious::KEEPERS]
195
- module_eval <<-CODE
266
+ module_eval <<-CODE, __FILE__, __LINE__+1
196
267
  def #{m}( *args, &block )
197
268
  self.method_missing('#{m}', *args, &block)
198
269
  end
@@ -203,8 +274,8 @@ module Loquacious
203
274
  # Create a new DSL and evaluate the given _block_ in the context of
204
275
  # the DSL. Returns a newly created configuration object.
205
276
  #
206
- def self.evaluate( &block )
207
- dsl = self.new(&block)
277
+ def self.evaluate( opts = {}, &block )
278
+ dsl = self.new(opts, &block)
208
279
  dsl.__config
209
280
  end
210
281
 
@@ -214,10 +285,13 @@ module Loquacious
214
285
  # Creates a new DSL and evaluates the given _block_ in the context of
215
286
  # the DSL.
216
287
  #
217
- def initialize( config = nil, &block )
288
+ def initialize( opts = {}, &block )
218
289
  @description = nil
219
- @__config = config || Configuration.new
290
+ @__config = opts[:config] || Configuration.new
291
+ @__config.__defaults_mode = opts.key?(:defaults_mode) ? opts[:defaults_mode] : false
220
292
  instance_eval(&block)
293
+ ensure
294
+ @__config.__defaults_mode = false
221
295
  end
222
296
 
223
297
  # Dynamically adds the given _method_ to the configuration as an
@@ -2,10 +2,6 @@
2
2
  require File.expand_path('spec_helper', File.dirname(__FILE__))
3
3
 
4
4
  describe Loquacious::Configuration do
5
- before(:all) do
6
- @respond_to = Object.instance_method(:respond_to?)
7
- end
8
-
9
5
  before(:each) do
10
6
  @obj = Loquacious::Configuration.new
11
7
  end
@@ -30,13 +26,12 @@ describe Loquacious::Configuration do
30
26
  end
31
27
 
32
28
  it 'should deine attribute accessors when first used' do
33
- m = @respond_to.bind(@obj)
34
- m.call(:foo).should == false
35
- m.call(:foo=).should == false
29
+ @obj.respond_to?(:foo).should == false
30
+ @obj.respond_to?(:foo=).should == false
36
31
 
37
32
  @obj.foo
38
- m.call(:foo).should == true
39
- m.call(:foo=).should == true
33
+ @obj.respond_to?(:foo).should == true
34
+ @obj.respond_to?(:foo=).should == true
40
35
  end
41
36
 
42
37
  it 'should provide a hash object for storing method descriptions' do
@@ -97,6 +92,7 @@ describe Loquacious::Configuration do
97
92
 
98
93
  it 'should not be affected by loading other modules like timeout' do
99
94
  require 'timeout'
95
+ Loquacious.remove :timeout
100
96
  cfg = Loquacious::Configuration.new {
101
97
  timeout 10
102
98
  foo 'bar'
@@ -135,7 +131,7 @@ describe Loquacious::Configuration do
135
131
  obj.first.should == 'foo'
136
132
  obj.second.bar.should be_nil
137
133
 
138
- Loquacious::Configuration::DSL.new(obj) {
134
+ Loquacious::Configuration::DSL.evaluate(:config => obj) {
139
135
  first 'bar'
140
136
  second.bar 'no longer nil'
141
137
  }
@@ -161,7 +157,7 @@ describe Loquacious::Configuration do
161
157
  obj.__desc[:second].should == 'the second value'
162
158
  obj.second.__desc[:bar].should == 'time to go drinking'
163
159
 
164
- Loquacious::Configuration::DSL.new(obj) {
160
+ Loquacious::Configuration::DSL.evaluate(:config => obj) {
165
161
  first 'bar'
166
162
  second.bar 'no longer nil'
167
163
  }
@@ -275,8 +271,149 @@ describe Loquacious::Configuration do
275
271
  other.__desc[:first].should == " This is the first thing we are defining in this config.\n It has a multiline comment."
276
272
  other.__desc[:second].should == "This is a short explanation\n\nExample:\n do this then that\n followed by this line"
277
273
  end
274
+ end
275
+
276
+ # -----------------------------------------------------------------------
277
+ describe 'when working with defaults' do
278
+ before :each do
279
+ Loquacious::Configuration.instance_variable_get(:@table).clear
280
+ end
281
+
282
+ it 'returns default values when no other value exists' do
283
+ Loquacious::Configuration.defaults_for('test') {
284
+ first 'foo', :desc => 'the first value'
285
+ desc 'the second value'
286
+ second {
287
+ bar nil, :desc => 'time to go drinking'
288
+ }
289
+ }
290
+
291
+ c = Loquacious::Configuration.for 'test'
292
+ c.first.should == 'foo'
293
+ c.second.bar.should be_nil
294
+ end
295
+
296
+ it 'does not overwrite existing configuration values' do
297
+ c = Loquacious::Configuration.for('test') {
298
+ first 1
299
+ thrid 3
300
+ }
301
+
302
+ Loquacious::Configuration.defaults_for('test') {
303
+ first 'foo', :desc => 'the first value'
304
+ desc 'the second value'
305
+ second {
306
+ bar nil, :desc => 'time to go drinking'
307
+ }
308
+ }
309
+
310
+ c.first.should == 1
311
+ c.third.should == 3
312
+ c.second.bar.should be_nil
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'
317
+ c.__desc[:thrid].should be_nil
318
+ end
319
+
320
+ it 'does not overwrite nested configuration values' do
321
+ c = Loquacious::Configuration.for('test') {
322
+ first 1
323
+ second {
324
+ bar 'pub'
325
+ baz {
326
+ buz 'random text'
327
+ boo 'who'
328
+ }
329
+ }
330
+ thrid 3
331
+ }
278
332
 
333
+ Loquacious::Configuration.defaults_for('test') {
334
+ first 'foo', :desc => 'the first value'
335
+ desc 'the second value'
336
+ second {
337
+ bar 'h-bar', :desc => 'time to go drinking'
338
+ desc 'getting weird'
339
+ baz {
340
+ buz 'buz', :desc => 'post drinking feeling'
341
+ boo nil, :desc => 'no need to cry about it'
342
+ }
343
+ }
344
+ }
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'
351
+
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'
361
+ c.__desc[:thrid].should be_nil
362
+ end
363
+
364
+ it 'supports differing default type' do
365
+ c = Loquacious::Configuration.for('test') {
366
+ first 1
367
+ second {
368
+ bar 'pub'
369
+ desc 'overwrite me'
370
+ baz {
371
+ buz 'random text'
372
+ boo 'who'
373
+ }
374
+ }
375
+ thrid 3
376
+ }
377
+
378
+ Loquacious::Configuration.defaults_for('test') {
379
+ first 'foo', :desc => 'the first value'
380
+ desc 'the second value'
381
+ second {
382
+ bar 'h-bar', :desc => 'time to go drinking'
383
+ baz nil, :desc => 'deprecated'
384
+ }
385
+ }
386
+
387
+ c.second.baz.buz.should == 'random text'
388
+ c.second.baz.boo.should == 'who'
389
+
390
+ c.second.baz = Loquacious::Undefined.new('second.bar')
391
+ c.second.baz.should be_nil
392
+ c.second.__desc[:baz].should == 'deprecated'
393
+ end
394
+
395
+ it 'properly handles Proc default values' do
396
+ c = Loquacious::Configuration.for('test') {
397
+ first 1
398
+ second {
399
+ bar 'pub'
400
+ }
401
+ thrid 3
402
+ }
403
+
404
+ Loquacious::Configuration.defaults_for('test') {
405
+ first 'foo', :desc => 'the first value'
406
+ desc 'the second value'
407
+ second {
408
+ bar 'h-bar', :desc => 'time to go drinking'
409
+ baz(Proc.new { c.third * 12 }, :desc => 'proc will be evaluated')
410
+ }
411
+ }
412
+
413
+ c.second.baz.should == 36
414
+ c.second.__desc[:baz].should == 'proc will be evaluated'
415
+ end
279
416
  end
417
+
280
418
  end
281
419
 
282
- # EOF
@@ -1,7 +1,7 @@
1
1
 
2
2
  require File.expand_path('../lib/loquacious', File.dirname(__FILE__))
3
3
 
4
- Spec::Runner.configure do |config|
4
+ RSpec.configure do |config|
5
5
  # == Mock Framework
6
6
  #
7
7
  # RSpec uses it's own mocking framework by default. If you prefer to
@@ -59,4 +59,3 @@ class StringIO
59
59
  end
60
60
  end
61
61
 
62
- # EOF
@@ -1 +1 @@
1
- 1.7.1
1
+ 1.8.0
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loquacious
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 55
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 7
9
- - 1
10
- version: 1.7.1
8
+ - 8
9
+ - 0
10
+ version: 1.8.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tim Pease
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-11 00:00:00 -07:00
18
+ date: 2011-06-03 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -24,14 +24,13 @@ dependencies:
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ">="
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
- hash: 25
29
+ hash: 15
30
30
  segments:
31
- - 1
32
- - 3
33
- - 1
34
- version: 1.3.1
31
+ - 2
32
+ - 6
33
+ version: "2.6"
35
34
  type: :development
36
35
  version_requirements: *id001
37
36
  description: |-
@@ -108,7 +107,7 @@ files:
108
107
  - spec/string_spec.rb
109
108
  - version.txt
110
109
  has_rdoc: true
111
- homepage: http://gemcutter.org/gems/loquacious
110
+ homepage: http://rubygems.org/gems/loquacious
112
111
  licenses: []
113
112
 
114
113
  post_install_message: