virtus 0.5.2 → 0.5.3

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.
Files changed (52) hide show
  1. data/.rspec +2 -0
  2. data/.travis.yml +3 -0
  3. data/Changelog.md +9 -0
  4. data/Gemfile +2 -22
  5. data/Gemfile.devtools +44 -0
  6. data/README.md +78 -1
  7. data/Rakefile +3 -4
  8. data/config/flay.yml +2 -2
  9. data/config/mutant.yml +3 -0
  10. data/lib/virtus.rb +2 -1
  11. data/lib/virtus/attribute.rb +1 -1
  12. data/lib/virtus/attribute/array.rb +1 -0
  13. data/lib/virtus/attribute/class.rb +1 -1
  14. data/lib/virtus/attribute/hash.rb +84 -0
  15. data/lib/virtus/attribute/set.rb +1 -0
  16. data/lib/virtus/coercion/string.rb +6 -2
  17. data/lib/virtus/instance_methods.rb +8 -1
  18. data/lib/virtus/version.rb +1 -1
  19. data/spec/integration/default_values_spec.rb +22 -2
  20. data/spec/integration/hash_attributes_coercion_spec.rb +50 -0
  21. data/spec/shared/freeze_method_behavior.rb +1 -1
  22. data/spec/spec_helper.rb +6 -14
  23. data/spec/unit/virtus/attribute/hash/class_methods/merge_options_spec.rb +33 -0
  24. data/spec/unit/virtus/attribute/hash/coerce_spec.rb +20 -0
  25. data/spec/unit/virtus/attribute/hash/key_type_spec.rb +10 -0
  26. data/spec/unit/virtus/attribute/hash/value_type_spec.rb +10 -0
  27. data/spec/unit/virtus/coercion/string/class_methods/to_float_spec.rb +12 -0
  28. data/spec/unit/virtus/coercion/string/class_methods/to_integer_spec.rb +12 -0
  29. data/spec/unit/virtus/extensions/attribute_spec.rb +26 -0
  30. data/spec/unit/virtus/instance_methods/attributes_spec.rb +3 -1
  31. data/spec/unit/virtus/instance_methods/initialize_spec.rb +11 -5
  32. data/spec/unit/virtus/options/accept_options_spec.rb +1 -1
  33. data/spec/unit/virtus/options/accepted_options_spec.rb +1 -1
  34. data/spec/unit/virtus/options/options_spec.rb +1 -1
  35. data/spec/unit/virtus/type_lookup/determine_type_spec.rb +1 -1
  36. data/virtus.gemspec +4 -4
  37. metadata +76 -100
  38. data/lib/virtus/support/descendants_tracker.rb +0 -44
  39. data/spec/rcov.opts +0 -7
  40. data/spec/unit/virtus/attribute/object/class_methods/descendants_spec.rb +0 -22
  41. data/spec/unit/virtus/descendants_tracker/add_descendant_spec.rb +0 -24
  42. data/spec/unit/virtus/descendants_tracker/descendants_spec.rb +0 -22
  43. data/tasks/metrics/ci.rake +0 -7
  44. data/tasks/metrics/flay.rake +0 -41
  45. data/tasks/metrics/flog.rake +0 -43
  46. data/tasks/metrics/heckle.rake +0 -208
  47. data/tasks/metrics/metric_fu.rake +0 -29
  48. data/tasks/metrics/reek.rake +0 -9
  49. data/tasks/metrics/roodi.rake +0 -15
  50. data/tasks/metrics/yardstick.rake +0 -23
  51. data/tasks/spec.rake +0 -45
  52. data/tasks/yard.rake +0 -9
@@ -1,6 +1,6 @@
1
1
  shared_examples_for 'a #freeze method' do
2
2
  let(:sample_exception) do
3
- begin
3
+ begin
4
4
  object.dup.freeze.instance_variable_set(:@foo,:bar)
5
5
  rescue => exception
6
6
  exception
@@ -1,14 +1,13 @@
1
- begin
2
- require 'rspec' # try for RSpec 2
3
- rescue LoadError
4
- require 'spec' # try for RSpec 1
5
- RSpec = Spec::Runner
6
- end
7
-
1
+ require 'rspec'
8
2
  require 'virtus'
9
3
 
10
4
  ENV['TZ'] = 'UTC'
11
5
 
6
+ if ENV['COVERAGE']
7
+ require 'simplecov'
8
+ SimpleCov.start
9
+ end
10
+
12
11
  # require spec support files and shared behavior
13
12
  Dir[File.expand_path('../shared/**/*.rb', __FILE__)].each { |file| require file }
14
13
 
@@ -35,10 +34,3 @@ RSpec.configure do |config|
35
34
  end
36
35
 
37
36
  end
38
-
39
- # change the heckle timeout to be 5 seconds
40
- if defined?(::Heckle)
41
- class ::Heckle
42
- @@timeout = 5
43
- end
44
- end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Hash, '.merge_options' do
4
+ subject { described_class.merge_options(type, options) }
5
+
6
+ let(:type) { { String => Integer } }
7
+ let(:options) { { :opt => 'val' } }
8
+
9
+ context 'when `type` responds to `size`' do
10
+ context 'when size is == 1' do
11
+ specify { subject[:opt].should == 'val' }
12
+ specify { subject[:key_type].should == String }
13
+ specify { subject[:value_type].should == Integer }
14
+ end
15
+
16
+ context 'when size is > 1' do
17
+ let(:type) { { :opt1 => 'val1', :opt2 => 'val2' } }
18
+
19
+ it 'should raise ArgumentError' do
20
+ message = "more than one [key => value] pair in `#{type.inspect}`"
21
+ expect { subject }.to raise_error(ArgumentError, message)
22
+ end
23
+ end
24
+ end
25
+
26
+ context 'when `type` does not respond to `size`' do
27
+ before do
28
+ type.should_receive(:respond_to?).with(:size).and_return(false)
29
+ end
30
+
31
+ it { should be_eql(options) }
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Hash, '#coerce' do
4
+ subject { object.coerce(input_value) }
5
+
6
+ let(:options) { { :key_type => String, :value_type => Float } }
7
+ let(:object) { Virtus::Attribute::Hash.new('stuff', options) }
8
+
9
+ context 'respond to `inject`' do
10
+ let(:input_value) { { :one => '1', 'two' => 2 } }
11
+
12
+ it { should eql('one' => 1.0, 'two' => 2.0) }
13
+ end
14
+
15
+ context 'does not respond to `inject`' do
16
+ let(:input_value) { :symbol }
17
+
18
+ it { should be(:symbol) }
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Hash, '#key_type' do
4
+ subject { object.key_type }
5
+
6
+ let(:object) { Virtus::Attribute.build(:meta, Hash[key_type => String]) }
7
+ let(:key_type) { Symbol }
8
+
9
+ it { should be(key_type) }
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Attribute::Hash, '#value_type' do
4
+ subject { object.value_type }
5
+
6
+ let(:object) { Virtus::Attribute.build(:meta, Hash[Symbol => value_type]) }
7
+ let(:value_type) { String }
8
+
9
+ it { should be(value_type) }
10
+ end
@@ -27,6 +27,11 @@ describe Virtus::Coercion::String, '.to_float' do
27
27
  '.1e-1' => 0.01,
28
28
  '.1E+1' => 1.0,
29
29
  '.1E-1' => 0.01,
30
+ '1e1' => 10.0,
31
+ '1E+1' => 10.0,
32
+ '+1e-1' => 0.1,
33
+ '-1E1' => -10.0,
34
+ '-1e-1' => -0.1,
30
35
  }.each do |value, expected|
31
36
  context "with #{value.inspect}" do
32
37
  let(:string) { value }
@@ -42,4 +47,11 @@ describe Virtus::Coercion::String, '.to_float' do
42
47
 
43
48
  it { should equal(string) }
44
49
  end
50
+
51
+ context 'string starts with e' do
52
+ let(:string) { 'e1' }
53
+
54
+ # In further version it will raise exception
55
+ it { should == 'e1' }
56
+ end
45
57
  end
@@ -30,6 +30,11 @@ describe Virtus::Coercion::String, '.to_integer' do
30
30
  '.1e-1' => 0,
31
31
  '.1E+1' => 1,
32
32
  '.1E-1' => 0,
33
+ '1e1' => 10,
34
+ '1E+1' => 10,
35
+ '+1e-1' => 0,
36
+ '-1E1' => -10,
37
+ '-1e-1' => 0,
33
38
  min_float.to_s => min_float.to_i,
34
39
  max_float.to_s => max_float.to_i,
35
40
  }.each do |value, expected|
@@ -53,4 +58,11 @@ describe Virtus::Coercion::String, '.to_integer' do
53
58
 
54
59
  it { should == 334490140000101135 }
55
60
  end
61
+
62
+ context 'string starts with e' do
63
+ let(:string) { 'e1' }
64
+
65
+ # In further version it will raise exception
66
+ it { should == 'e1' }
67
+ end
56
68
  end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::Extensions, '#attribute' do
4
+ subject { object.attribute(name, type) }
5
+
6
+ let(:object) { Class.new { extend Virtus::Extensions } }
7
+ let(:descendant) { Class.new(object) }
8
+ let(:name) { :name }
9
+ let(:type) { Virtus::Attribute::String }
10
+
11
+ def assert_attribute_added(klass, name, attribute_class)
12
+ klass.should_not be_public_method_defined(name)
13
+ subject
14
+ klass.should_not be_public_method_defined(name)
15
+ end
16
+
17
+ it { should be(object) }
18
+
19
+ it 'adds the attribute to the class' do
20
+ assert_attribute_added(object, name, type)
21
+ end
22
+
23
+ it 'adds the attribute to the descendant' do
24
+ assert_attribute_added(descendant, name, type)
25
+ end
26
+ end
@@ -131,7 +131,9 @@ describe Virtus::InstanceMethods do
131
131
  let(:attribute_values) { '' }
132
132
 
133
133
  it 'raises an exception' do
134
- expect { subject }.to raise_error(NoMethodError)
134
+ expect {
135
+ subject
136
+ }.to raise_error(NoMethodError, 'Expected "" to respond to #to_hash')
135
137
  end
136
138
  end
137
139
  end
@@ -25,16 +25,22 @@ describe Virtus::InstanceMethods, '#initialize' do
25
25
  end
26
26
 
27
27
  context 'with an argument that responds to #to_hash' do
28
- subject { described_class.new(:name => name) }
29
-
30
- let(:name) { stub('name') }
28
+ subject { described_class.new(attributes) }
29
+
30
+ let(:attributes) do
31
+ Class.new do
32
+ def to_hash
33
+ {:name => 'John'}
34
+ end
35
+ end.new
36
+ end
31
37
 
32
38
  it 'sets attributes' do
33
- subject.name.should be(name)
39
+ subject.name.should == 'John'
34
40
  end
35
41
  end
36
42
 
37
- context' with an argument that does not respond to #to_hash' do
43
+ context 'with an argument that does not respond to #to_hash' do
38
44
  subject { described_class.new(Object.new) }
39
45
 
40
46
  specify { expect { subject }.to raise_error(NoMethodError) }
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Virtus::Options, '#accept_options' do
4
4
  class Model
5
- extend Virtus::DescendantsTracker
5
+ extend DescendantsTracker
6
6
  extend Virtus::Options
7
7
  end
8
8
 
@@ -7,7 +7,7 @@ describe Virtus::Options, '#accepted_options' do
7
7
 
8
8
  let(:object) do
9
9
  Class.new do
10
- extend Virtus::DescendantsTracker
10
+ extend DescendantsTracker
11
11
  extend Virtus::Options
12
12
  end
13
13
  end
@@ -5,7 +5,7 @@ describe Virtus::Options, '#options' do
5
5
 
6
6
  let(:object) do
7
7
  Class.new do
8
- extend Virtus::Options, Virtus::DescendantsTracker
8
+ extend Virtus::Options, DescendantsTracker
9
9
  end
10
10
  end
11
11
 
@@ -5,7 +5,7 @@ describe Virtus::TypeLookup, '#determine_type' do
5
5
 
6
6
  let!(:object) do
7
7
  Class.new do
8
- extend Virtus::DescendantsTracker
8
+ extend DescendantsTracker
9
9
  extend Virtus::TypeLookup
10
10
  end
11
11
  end
@@ -16,9 +16,9 @@ Gem::Specification.new do |gem|
16
16
  gem.test_files = `git ls-files -- {spec}/*`.split("\n")
17
17
  gem.extra_rdoc_files = %w[LICENSE README.md TODO]
18
18
 
19
- gem.add_runtime_dependency('backports', '~> 2.6.1')
19
+ gem.add_dependency('backports', '~> 2.6.1')
20
+ gem.add_dependency('descendants_tracker', '~> 0.0.1')
20
21
 
21
- gem.add_development_dependency('rake', '~> 0.9.2')
22
- gem.add_development_dependency('rspec', '~> 1.3.2')
23
- gem.add_development_dependency('guard-rspec', '~> 1.0.0')
22
+ gem.add_development_dependency('rake', '~> 0.9.2')
23
+ gem.add_development_dependency('rspec', '~> 2.12')
24
24
  end
metadata CHANGED
@@ -1,105 +1,99 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: virtus
3
- version: !ruby/object:Gem::Version
4
- hash: 15
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 5
9
- - 2
10
- version: 0.5.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Piotr Solnica
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-09-01 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-12-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: backports
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.6.1
22
+ type: :runtime
22
23
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
24
25
  none: false
25
- requirements:
26
+ requirements:
26
27
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 21
29
- segments:
30
- - 2
31
- - 6
32
- - 1
28
+ - !ruby/object:Gem::Version
33
29
  version: 2.6.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: descendants_tracker
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.0.1
34
38
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: rake
38
39
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.0.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
40
49
  none: false
41
- requirements:
50
+ requirements:
42
51
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 63
45
- segments:
46
- - 0
47
- - 9
48
- - 2
52
+ - !ruby/object:Gem::Version
49
53
  version: 0.9.2
50
54
  type: :development
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: rspec
54
55
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
56
65
  none: false
57
- requirements:
66
+ requirements:
58
67
  - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 31
61
- segments:
62
- - 1
63
- - 3
64
- - 2
65
- version: 1.3.2
68
+ - !ruby/object:Gem::Version
69
+ version: '2.12'
66
70
  type: :development
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: guard-rspec
70
71
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
72
73
  none: false
73
- requirements:
74
+ requirements:
74
75
  - - ~>
75
- - !ruby/object:Gem::Version
76
- hash: 23
77
- segments:
78
- - 1
79
- - 0
80
- - 0
81
- version: 1.0.0
82
- type: :development
83
- version_requirements: *id004
76
+ - !ruby/object:Gem::Version
77
+ version: '2.12'
84
78
  description: Attributes on Steroids for Plain Old Ruby Objects
85
- email:
79
+ email:
86
80
  - piotr.solnica@gmail.com
87
81
  executables: []
88
-
89
82
  extensions: []
90
-
91
- extra_rdoc_files:
83
+ extra_rdoc_files:
92
84
  - LICENSE
93
85
  - README.md
94
86
  - TODO
95
- files:
87
+ files:
96
88
  - .gitignore
97
89
  - .pelusa.yml
90
+ - .rspec
98
91
  - .rvmrc
99
92
  - .travis.yml
100
93
  - .yardopts
101
94
  - Changelog.md
102
95
  - Gemfile
96
+ - Gemfile.devtools
103
97
  - Guardfile
104
98
  - LICENSE
105
99
  - README.md
@@ -107,6 +101,7 @@ files:
107
101
  - TODO
108
102
  - config/flay.yml
109
103
  - config/flog.yml
104
+ - config/mutant.yml
110
105
  - config/roodi.yml
111
106
  - config/site.reek
112
107
  - config/yardstick.yml
@@ -157,7 +152,6 @@ files:
157
152
  - lib/virtus/extensions.rb
158
153
  - lib/virtus/instance_methods.rb
159
154
  - lib/virtus/module_extensions.rb
160
- - lib/virtus/support/descendants_tracker.rb
161
155
  - lib/virtus/support/equalizer.rb
162
156
  - lib/virtus/support/options.rb
163
157
  - lib/virtus/support/type_lookup.rb
@@ -169,6 +163,7 @@ files:
169
163
  - spec/integration/defining_attributes_spec.rb
170
164
  - spec/integration/embedded_value_spec.rb
171
165
  - spec/integration/extending_objects_spec.rb
166
+ - spec/integration/hash_attributes_coercion_spec.rb
172
167
  - spec/integration/mass_assignment_with_accessors_spec.rb
173
168
  - spec/integration/overriding_virtus_spec.rb
174
169
  - spec/integration/struct_as_embedded_value_spec.rb
@@ -176,7 +171,6 @@ files:
176
171
  - spec/integration/value_object_with_custom_constructor_spec.rb
177
172
  - spec/integration/virtus/instance_level_attributes_spec.rb
178
173
  - spec/integration/virtus/value_object_spec.rb
179
- - spec/rcov.opts
180
174
  - spec/shared/constants_helpers.rb
181
175
  - spec/shared/freeze_method_behavior.rb
182
176
  - spec/shared/idempotent_method_behaviour.rb
@@ -230,13 +224,16 @@ files:
230
224
  - spec/unit/virtus/attribute/embedded_value/from_struct/coerce_spec.rb
231
225
  - spec/unit/virtus/attribute/float/coerce_spec.rb
232
226
  - spec/unit/virtus/attribute/get_spec.rb
227
+ - spec/unit/virtus/attribute/hash/class_methods/merge_options_spec.rb
228
+ - spec/unit/virtus/attribute/hash/coerce_spec.rb
229
+ - spec/unit/virtus/attribute/hash/key_type_spec.rb
230
+ - spec/unit/virtus/attribute/hash/value_type_spec.rb
233
231
  - spec/unit/virtus/attribute/inspect_spec.rb
234
232
  - spec/unit/virtus/attribute/integer/coerce_spec.rb
235
233
  - spec/unit/virtus/attribute/name_spec.rb
236
234
  - spec/unit/virtus/attribute/numeric/class_methods/descendants_spec.rb
237
235
  - spec/unit/virtus/attribute/numeric/class_methods/max_spec.rb
238
236
  - spec/unit/virtus/attribute/numeric/class_methods/min_spec.rb
239
- - spec/unit/virtus/attribute/object/class_methods/descendants_spec.rb
240
237
  - spec/unit/virtus/attribute/options_spec.rb
241
238
  - spec/unit/virtus/attribute/public_reader_spec.rb
242
239
  - spec/unit/virtus/attribute/public_writer_spec.rb
@@ -314,13 +311,12 @@ files:
314
311
  - spec/unit/virtus/coercion/time_coercions/to_string_spec.rb
315
312
  - spec/unit/virtus/coercion/time_coercions/to_time_spec.rb
316
313
  - spec/unit/virtus/coercion/true_class/class_methods/to_string_spec.rb
317
- - spec/unit/virtus/descendants_tracker/add_descendant_spec.rb
318
- - spec/unit/virtus/descendants_tracker/descendants_spec.rb
319
314
  - spec/unit/virtus/equalizer/append_spec.rb
320
315
  - spec/unit/virtus/equalizer/class_method/new_spec.rb
321
316
  - spec/unit/virtus/equalizer/methods/eql_spec.rb
322
317
  - spec/unit/virtus/equalizer/methods/equal_value_spec.rb
323
318
  - spec/unit/virtus/extensions/allowed_writer_methods_spec.rb
319
+ - spec/unit/virtus/extensions/attribute_spec.rb
324
320
  - spec/unit/virtus/instance_methods/attributes_spec.rb
325
321
  - spec/unit/virtus/instance_methods/element_reference_spec.rb
326
322
  - spec/unit/virtus/instance_methods/element_set_spec.rb
@@ -340,50 +336,30 @@ files:
340
336
  - spec/unit/virtus/value_object/initialize_spec.rb
341
337
  - spec/unit/virtus/value_object/instance_methods/clone_spec.rb
342
338
  - spec/unit/virtus/value_object/instance_methods/with_spec.rb
343
- - tasks/metrics/ci.rake
344
- - tasks/metrics/flay.rake
345
- - tasks/metrics/flog.rake
346
- - tasks/metrics/heckle.rake
347
- - tasks/metrics/metric_fu.rake
348
- - tasks/metrics/reek.rake
349
- - tasks/metrics/roodi.rake
350
- - tasks/metrics/yardstick.rake
351
- - tasks/spec.rake
352
- - tasks/yard.rake
353
339
  - virtus.gemspec
354
340
  homepage: https://github.com/solnic/virtus
355
341
  licenses: []
356
-
357
342
  post_install_message:
358
343
  rdoc_options: []
359
-
360
- require_paths:
344
+ require_paths:
361
345
  - lib
362
- required_ruby_version: !ruby/object:Gem::Requirement
346
+ required_ruby_version: !ruby/object:Gem::Requirement
363
347
  none: false
364
- requirements:
365
- - - ">="
366
- - !ruby/object:Gem::Version
367
- hash: 3
368
- segments:
369
- - 0
370
- version: "0"
371
- required_rubygems_version: !ruby/object:Gem::Requirement
348
+ requirements:
349
+ - - ! '>='
350
+ - !ruby/object:Gem::Version
351
+ version: '0'
352
+ required_rubygems_version: !ruby/object:Gem::Requirement
372
353
  none: false
373
- requirements:
374
- - - ">="
375
- - !ruby/object:Gem::Version
376
- hash: 3
377
- segments:
378
- - 0
379
- version: "0"
354
+ requirements:
355
+ - - ! '>='
356
+ - !ruby/object:Gem::Version
357
+ version: '0'
380
358
  requirements: []
381
-
382
359
  rubyforge_project:
383
- rubygems_version: 1.8.15
360
+ rubygems_version: 1.8.24
384
361
  signing_key:
385
362
  specification_version: 3
386
363
  summary: Attributes on Steroids for Plain Old Ruby Objects
387
364
  test_files: []
388
-
389
365
  has_rdoc: