virtus 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
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: