active_attr 0.2.0 → 0.2.1

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.

Potentially problematic release.


This version of active_attr might be problematic. Click here for more details.

@@ -1,4 +1,5 @@
1
1
  rvm:
2
2
  - ree
3
3
  - 1.9.2
4
+ - 1.9.3
4
5
  bundler_args: --without development
File without changes
@@ -1,3 +1,13 @@
1
+ # ActiveAttr 0.2.1 (unreleased) #
2
+
3
+ * Added AttributeDefinition#<=>
4
+ * Added AttributeDefinition#to_sym
5
+ * Added Attributes#[]
6
+ * Added Attributes#[]=
7
+ * Attributes#attributes now returns the results of overridden getters
8
+ * Attributes.inspect and Attributes#inspect are now in alphabetical order
9
+ * Overridden attribute getters and setters can now call super
10
+
1
11
  # ActiveAttr 0.2.0 (October 3, 2011) #
2
12
 
3
13
  * ActiveAttr now autoloads nested classes and modules
data/README.md CHANGED
@@ -10,7 +10,9 @@ the wheel.
10
10
  [1]: http://travis-ci.org/cgriego/active_attr
11
11
  [2]: https://secure.travis-ci.org/cgriego/active_attr.png?branch=master
12
12
 
13
- ## Attributes ##
13
+ ## Modules ##
14
+
15
+ ### Attributes ###
14
16
 
15
17
  Including the Attributes module into your class gives you a DSL for defining
16
18
  the attributes of your model.
@@ -27,7 +29,7 @@ the attributes of your model.
27
29
  p.last_name = "Griego"
28
30
  p.attributes #=> {"first_name"=>"Chris", "last_name"=>"Griego"}
29
31
 
30
- ## BasicModel ##
32
+ ### BasicModel ###
31
33
 
32
34
  Including the BasicModel module into your class gives you the bare minimum
33
35
  required for your model to meet the ActiveModel API requirements.
@@ -41,7 +43,7 @@ required for your model to meet the ActiveModel API requirements.
41
43
  p.valid? #=> true
42
44
  p.errors.full_messages #=> []
43
45
 
44
- ## MassAssignment ##
46
+ ### MassAssignment ###
45
47
 
46
48
  Including the MassAssignment module into your class gives you methods for bulk
47
49
  initializing and updating the attributes of your model. Any unknown attributes
@@ -51,9 +53,21 @@ attribute.
51
53
 
52
54
  class Person
53
55
  include ActiveAttr::MassAssignment
56
+ attr_accessor :first_name, :last_name
54
57
  end
55
58
 
56
59
  p = Person.new(:first_name => "Chris")
57
60
  p.attributes = { :last_name => "Griego" }
58
61
  p.first_name #=> "Chris"
59
62
  p.last_name #=> "Griego"
63
+
64
+ ## RSpec Integration ##
65
+
66
+ ActiveAttr comes with matchers and RSpec integration to assist you in testing
67
+ your models.
68
+
69
+ require "active_attr/rspec"
70
+
71
+ describe Person do
72
+ it { should have_attribute(:first_name) }
73
+ end
@@ -6,23 +6,25 @@ module ActiveAttr
6
6
  #
7
7
  # @since 0.2.0
8
8
  class AttributeDefinition
9
+ include Comparable
10
+
9
11
  # The attribute name
10
12
  # @since 0.2.0
11
13
  attr_reader :name
12
14
 
13
- # Performs equality checking of the attribute definition
15
+ # Compare attribute definitions
14
16
  #
15
- # @example Compare for equality.
16
- # attribute_definition == other
17
+ # @example
18
+ # attribute_definition <=> other
17
19
  #
18
- # @param [AttributeDefinition, Object] other The other attribute definition to compare with.
20
+ # @param [ActiveAttr::AttributeDefinition, Object] other The other attribute definition to compare with.
19
21
  #
20
- # @return [true, false] True if attribute name is equal and other is instance of the same Class, false if not.
22
+ # @return [-1, 0, 1, nil]
21
23
  #
22
- # @since 0.2.0
23
- def ==(attribute)
24
- return false unless attribute.instance_of? self.class
25
- name == attribute.name
24
+ # @since 0.2.1
25
+ def <=>(other)
26
+ return nil unless other.instance_of? self.class
27
+ self.name.to_s <=> other.name.to_s
26
28
  end
27
29
 
28
30
  # Creates a new AttributeDefinition
@@ -32,7 +34,7 @@ module ActiveAttr
32
34
  #
33
35
  # @param [Symbol, String, #to_sym] attribute name
34
36
  #
35
- # @return [AttributeDefinition]
37
+ # @return [ActiveAttr::AttributeDefinition]
36
38
  #
37
39
  # @since 0.2.0
38
40
  def initialize(name, options={})
@@ -40,7 +42,7 @@ module ActiveAttr
40
42
  @name = name.to_sym
41
43
  end
42
44
 
43
- # Returns the attribute name
45
+ # The attribute name
44
46
  #
45
47
  # @return [String] the attribute name
46
48
  #
@@ -48,5 +50,15 @@ module ActiveAttr
48
50
  def to_s
49
51
  name.to_s
50
52
  end
53
+ alias_method :inspect, :to_s
54
+
55
+ # The attribute name
56
+ #
57
+ # @return [Symbol] the attribute name
58
+ #
59
+ # @since 0.2.1
60
+ def to_sym
61
+ name
62
+ end
51
63
  end
52
64
  end
@@ -1,4 +1,5 @@
1
1
  require "active_attr/attribute_definition"
2
+ require "active_model"
2
3
  require "active_support/concern"
3
4
 
4
5
  module ActiveAttr
@@ -17,13 +18,19 @@ module ActiveAttr
17
18
  # @since 0.2.0
18
19
  module Attributes
19
20
  extend ActiveSupport::Concern
21
+ include ActiveModel::AttributeMethods
22
+
23
+ included do
24
+ attribute_method_suffix ""
25
+ attribute_method_suffix "="
26
+ end
20
27
 
21
28
  # Performs equality checking on the result of attributes and its type.
22
29
  #
23
30
  # @example Compare for equality.
24
31
  # model == other
25
32
  #
26
- # @param [Attributes, Object] other The other model to compare with.
33
+ # @param [ActiveAttr::Attributes, Object] other The other model to compare with.
27
34
  #
28
35
  # @return [true, false] True if attributes are equal and other is instance of the same Class, false if not.
29
36
  #
@@ -38,10 +45,16 @@ module ActiveAttr
38
45
  # @example Get attributes
39
46
  # person.attributes # => {"name"=>"Ben Poweski"}
40
47
  #
41
- # @return [Hash] The Hash of attributes
48
+ # @return [Hash] The Hash of all attributes
42
49
  #
43
50
  # @since 0.2.0
44
51
  def attributes
52
+ attribute_names = self.class.attributes.map { |definition| definition.name.to_s }
53
+ Hash[attribute_names.map { |key| [key, send(key)] }]
54
+ end
55
+
56
+ # @since 0.2.1
57
+ def initialize(*args)
45
58
  @attributes ||= {}
46
59
  end
47
60
 
@@ -54,11 +67,13 @@ module ActiveAttr
54
67
  #
55
68
  # @since 0.2.0
56
69
  def inspect
57
- attribute_descriptions = self.class.attributes.map do |attribute|
70
+ attribute_descriptions = self.class.attributes.sort.map do |attribute|
58
71
  "#{attribute.name.to_s}: #{read_attribute(attribute.name).inspect}"
59
- end
72
+ end.join(", ")
73
+
74
+ attribute_descriptions = " " + attribute_descriptions unless attribute_descriptions.empty?
60
75
 
61
- "#<#{self.class.name} #{attribute_descriptions.join(", ")}>"
76
+ "#<#{self.class.name}#{attribute_descriptions}>"
62
77
  end
63
78
 
64
79
  # Read a value from the model's attributes. If the value does not exist
@@ -73,8 +88,11 @@ module ActiveAttr
73
88
  #
74
89
  # @since 0.2.0
75
90
  def read_attribute(name)
76
- attributes[name.to_s]
91
+ @attributes[name.to_s]
77
92
  end
93
+ alias_method :[], :read_attribute
94
+ alias_method :attribute, :read_attribute
95
+ private :attribute
78
96
 
79
97
  # Write a single attribute to the model's attribute hash.
80
98
  #
@@ -86,8 +104,11 @@ module ActiveAttr
86
104
  #
87
105
  # @since 0.2.0
88
106
  def write_attribute(name, value)
89
- attributes[name.to_s] = value
107
+ @attributes[name.to_s] = value
90
108
  end
109
+ alias_method :[]=, :write_attribute
110
+ alias_method :attribute=, :write_attribute
111
+ private :attribute=
91
112
 
92
113
  module ClassMethods
93
114
  # Defines all the attributes that are to be returned from the attributes instance method.
@@ -102,12 +123,10 @@ module ActiveAttr
102
123
  #
103
124
  # @since 0.2.0
104
125
  def attribute(name, options={})
105
- attribute_definition = AttributeDefinition.new(name, options)
106
- attributes << attribute_definition
107
- method_name = attribute_definition.name
108
-
109
- define_method("#{method_name}=") { |value| write_attribute(name, value) }
110
- define_method(method_name) { read_attribute(name) }
126
+ AttributeDefinition.new(name, options).tap do |attribute_definition|
127
+ attributes << attribute_definition
128
+ define_attribute_method attribute_definition.name
129
+ end
111
130
  end
112
131
 
113
132
  # Returns an Array of AttributeDefinition instances
@@ -115,7 +134,7 @@ module ActiveAttr
115
134
  # @example Get attribute definitions
116
135
  # Person.attributes
117
136
  #
118
- # @return [Array<AttributeDefinition>] The Array of AttributeDefinition instances
137
+ # @return [Array<ActiveAttr::AttributeDefinition>] The Array of AttributeDefinition instances
119
138
  #
120
139
  # @since 0.2.0
121
140
  def attributes
@@ -131,7 +150,9 @@ module ActiveAttr
131
150
  #
132
151
  # @since 0.2.0
133
152
  def inspect
134
- "#{self.name}(#{attributes.map { |a| a.to_s }.join(", ")})"
153
+ inspected_attributes = attributes.sort.map { |attr| attr.inspect }
154
+ attributes_list = "(#{inspected_attributes.join(", ")})" unless inspected_attributes.empty?
155
+ "#{self.name}#{attributes_list}"
135
156
  end
136
157
  end
137
158
  end
@@ -9,7 +9,7 @@ module ActiveAttr
9
9
  #
10
10
  # @param [Symbol, String, #to_sym] attribute_name
11
11
  #
12
- # @return [HaveAttributeMatcher]
12
+ # @return [ActiveAttr::HaveAttributeMatcher]
13
13
  #
14
14
  # @since 0.2.0
15
15
  def have_attribute(attribute_name)
@@ -1,5 +1,5 @@
1
1
  module ActiveAttr
2
2
  # Complete version string
3
3
  # @since 0.1.0
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
@@ -5,6 +5,24 @@ module ActiveAttr
5
5
  describe AttributeDefinition do
6
6
  subject { described_class.new(:amount) }
7
7
 
8
+ describe "#<=>" do
9
+ it "is nil if the right side is not an #{described_class}" do
10
+ (subject <=> nil).should be_nil
11
+ end
12
+
13
+ it "prefers neither when both sides use the same attribute name" do
14
+ (subject <=> subject).should == 0
15
+ end
16
+
17
+ it "prefers the left side when the left side name sorts alphabetically before the right side name" do
18
+ (described_class.new(:amount) <=> described_class.new(:quantity)).should == -1
19
+ end
20
+
21
+ it "prefers the right side when the right side name sorts alphabetically before the left side name" do
22
+ (described_class.new(:quantity) <=> described_class.new(:amount)).should == 1
23
+ end
24
+ end
25
+
8
26
  describe "#==" do
9
27
  it "returns true when the attribute name is equal" do
10
28
  described_class.new(:amount).should == described_class.new(:amount)
@@ -33,13 +51,25 @@ module ActiveAttr
33
51
  end
34
52
  end
35
53
 
54
+ describe "#inspect" do
55
+ it "renders the name" do
56
+ subject.inspect.should == "amount"
57
+ end
58
+ end
59
+
36
60
  describe "#name" do
37
61
  it { should respond_to(:name) }
38
62
  end
39
63
 
40
64
  describe "#to_s" do
41
- it "renders the name" do
42
- subject.to_s.should == subject.name.to_s
65
+ it "renders the name as a String" do
66
+ subject.to_s.should == "amount"
67
+ end
68
+ end
69
+
70
+ describe "#to_sym" do
71
+ it "renders the name as a Symbol" do
72
+ subject.to_sym.should == :amount
43
73
  end
44
74
  end
45
75
  end
@@ -3,18 +3,36 @@ require "active_attr/attributes"
3
3
 
4
4
  module ActiveAttr
5
5
  describe Attributes do
6
- let(:model_class) do
6
+ subject { model_class.new }
7
+
8
+ let :model_class do
7
9
  Class.new do
8
10
  include Attributes
9
11
  attribute :name
12
+ attribute :amount
13
+
14
+ def self.name
15
+ "Foo"
16
+ end
17
+
18
+ def amount
19
+ super
20
+ end
21
+
22
+ def amount=(*args)
23
+ super
24
+ end
25
+
26
+ def initialize(name=nil)
27
+ super
28
+ write_attribute(:name, name)
29
+ end
10
30
  end
11
31
  end
12
32
 
13
- subject do
33
+ let :attributeless do
14
34
  Class.new do
15
35
  include Attributes
16
- attribute :name
17
- attribute :amount
18
36
 
19
37
  def self.name
20
38
  "Foo"
@@ -23,59 +41,58 @@ module ActiveAttr
23
41
  end
24
42
 
25
43
  describe ".attribute" do
26
- let(:instance) { subject.new }
27
-
28
44
  it "creates an attribute with no options" do
29
- subject.attributes.should include(AttributeDefinition.new(:name))
45
+ model_class.attributes.should include(AttributeDefinition.new(:name))
30
46
  end
31
47
 
32
- it "defined an attribute reader that calls #read_attribute" do
33
- instance.should_receive(:read_attribute).with(:name)
34
- instance.name
48
+ it "returns the attribute definition" do
49
+ Class.new(model_class).attribute(:address).should == AttributeDefinition.new(:address)
35
50
  end
36
51
 
37
- it "defines an attribute writer method that calls #write_attribute" do
38
- instance.should_receive(:write_attribute).with(:name, "Ben")
39
- instance.name = "Ben"
52
+ it "defines an attribute reader that calls #attribute" do
53
+ subject.should_receive(:attribute).with("name")
54
+ subject.name
55
+ end
56
+
57
+ it "defines an attribute reader that can be called via super" do
58
+ subject.should_receive(:attribute).with("amount")
59
+ subject.amount
60
+ end
61
+
62
+ it "defines an attribute writer that calls #attribute=" do
63
+ subject.should_receive(:attribute=).with("name", "Ben")
64
+ subject.name = "Ben"
65
+ end
66
+
67
+ it "defines an attribute writer that can be called via super" do
68
+ subject.should_receive(:attribute=).with("amount", 1)
69
+ subject.amount = 1
40
70
  end
41
71
  end
42
72
 
43
73
  describe ".attributes" do
44
- it { should respond_to(:attributes) }
74
+ it { model_class.should respond_to(:attributes) }
45
75
 
46
76
  context "when no attributes exist" do
47
- subject do
48
- Class.new { include Attributes }.attributes
49
- end
50
-
51
- it "returns an empty Array" do
52
- should == []
53
- end
77
+ it { attributeless.attributes.should be_empty }
54
78
  end
55
79
  end
56
80
 
57
81
  describe ".inspect" do
58
82
  it "renders the class name" do
59
- subject.inspect.should match "Foo"
83
+ model_class.inspect.should match /^Foo\(.*\)$/
60
84
  end
61
85
 
62
- it "renders the attribute name and type" do
63
- subject.inspect.should match subject.attributes.map { |a| a.name }.join(", ")
86
+ it "renders the attribute names in alphabetical order" do
87
+ model_class.inspect.should match "(amount, name)"
64
88
  end
65
- end
66
-
67
- describe "#==" do
68
- let(:model_class) do
69
- Class.new do
70
- include Attributes
71
- attribute :name
72
89
 
73
- def initialize(name)
74
- write_attribute(:name, name)
75
- end
76
- end
90
+ it "doesn't format the inspection string for attributes if the model does not have any" do
91
+ attributeless.inspect.should == "Foo"
77
92
  end
93
+ end
78
94
 
95
+ describe "#==" do
79
96
  subject { model_class.new("Ben") }
80
97
 
81
98
  it "returns true when all attributes are equal" do
@@ -89,52 +106,96 @@ module ActiveAttr
89
106
 
90
107
  describe "#attributes" do
91
108
  context "when no attributes are defined" do
92
- subject { Class.new { include Attributes } }
93
-
94
109
  it "returns an empty Hash" do
95
- subject.new.attributes.should == {}
110
+ attributeless.new.attributes.should == {}
96
111
  end
97
112
  end
98
- end
99
113
 
100
- describe "#inspect" do
101
- let(:instance) { subject.new.tap { |obj| obj.name = "Ben" } }
114
+ context "when an attribute is defined" do
115
+ it "returns the key value pairs" do
116
+ subject.name = "Ben"
117
+ subject.attributes.should include("name" => "Ben")
118
+ end
119
+
120
+ it "returns a new Hash " do
121
+ subject.attributes.merge!("name" => "Bob")
122
+ subject.attributes.should_not include("name" => "Bob")
123
+ end
102
124
 
103
- it "includes the class name and all attribute values" do
104
- instance.inspect.should == %q{#<Foo name: "Ben", amount: nil>}
125
+ it "returns all attributes" do
126
+ subject.attributes.keys.should =~ %w(amount name)
127
+ end
128
+ end
129
+
130
+ context "when a getter is overridden" do
131
+ before do
132
+ subject.extend Module.new {
133
+ def name
134
+ "Benjamin"
135
+ end
136
+ }
137
+ end
138
+
139
+ it "uses the overridden implementation" do
140
+ subject.name = "Ben"
141
+ subject.attributes.should include("name" => "Benjamin")
142
+ end
105
143
  end
106
144
  end
107
145
 
108
- describe "#read_attribute" do
109
- let(:name) { "Bob" }
110
- subject { model_class.new.tap { |s| s.write_attribute(:name, name) } }
146
+ describe "#inspect" do
147
+ before { subject.name = "Ben" }
111
148
 
112
- it "returns the attribute using a Symbol" do
113
- subject.read_attribute(:name).should == name
149
+ it "includes the class name and all attribute values in alphabetical order by attribute name" do
150
+ subject.inspect.should == %q{#<Foo amount: nil, name: "Ben">}
114
151
  end
115
152
 
116
- it "returns the attribute using a String" do
117
- subject.read_attribute('name').should == name
153
+ it "doesn't format the inspection string for attributes if the model does not have any" do
154
+ attributeless.new.inspect.should == %q{#<Foo>}
118
155
  end
119
156
  end
120
157
 
121
- describe "#write_attribute" do
122
- subject { model_class.new }
158
+ [:[], :read_attribute].each do |method|
159
+ describe "##{method}" do
160
+ context "when an attribute is not set" do
161
+ it "returns nil" do
162
+ subject.send(method, :name).should == nil
163
+ end
164
+ end
165
+
166
+ context "when an attribute is set" do
167
+ let(:name) { "Bob" }
123
168
 
124
- it "raises ArgumentError with one argument" do
125
- expect { subject.write_attribute(:name) }.to raise_error(ArgumentError)
126
- end
169
+ before { subject.write_attribute(:name, name) }
127
170
 
128
- it "raises ArgumentError with no arguments" do
129
- expect { subject.write_attribute }.to raise_error(ArgumentError)
130
- end
171
+ it "returns the attribute using a Symbol" do
172
+ subject.send(method, :name).should == name
173
+ end
131
174
 
132
- it "assigns sets an attribute using a Symbol and value" do
133
- expect { subject.write_attribute(:name, "Ben") }.to change(subject, :attributes).from({}).to("name" => "Ben")
175
+ it "returns the attribute using a String" do
176
+ subject.send(method, 'name').should == name
177
+ end
178
+ end
134
179
  end
180
+ end
135
181
 
136
- it "assigns sets an attribute using a String and value" do
137
- expect { subject.write_attribute('name', "Ben") }.to change(subject, :attributes).from({}).to("name" => "Ben")
182
+ [:[]=, :write_attribute].each do |method|
183
+ describe "##{method}" do
184
+ it "raises ArgumentError with one argument" do
185
+ expect { subject.send(method, :name) }.to raise_error(ArgumentError)
186
+ end
187
+
188
+ it "raises ArgumentError with no arguments" do
189
+ expect { subject.send(method) }.to raise_error(ArgumentError)
190
+ end
191
+
192
+ it "assigns sets an attribute using a Symbol and value" do
193
+ expect { subject.send(method, :name, "Ben") }.to change { subject.attributes["name"] }.from(nil).to("Ben")
194
+ end
195
+
196
+ it "assigns sets an attribute using a String and value" do
197
+ expect { subject.send(method, 'name', "Ben") }.to change { subject.attributes["name"] }.from(nil).to("Ben")
198
+ end
138
199
  end
139
200
  end
140
201
  end
@@ -3,7 +3,7 @@ require "active_attr/basic_model"
3
3
 
4
4
  module ActiveAttr
5
5
  describe BasicModel do
6
- let(:model_class) do
6
+ let :model_class do
7
7
  Class.new do
8
8
  include BasicModel
9
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_attr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,12 +10,12 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-03 00:00:00.000000000 -05:00
13
+ date: 2011-10-19 00:00:00.000000000 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activemodel
18
- requirement: &70212822508240 !ruby/object:Gem::Requirement
18
+ requirement: &70255008815760 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ~>
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: '3.1'
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *70212822508240
26
+ version_requirements: *70255008815760
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
- requirement: &70212822507140 !ruby/object:Gem::Requirement
29
+ requirement: &70255008814840 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ~>
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: '3.1'
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *70212822507140
37
+ version_requirements: *70255008814840
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: bundler
40
- requirement: &70212822506320 !ruby/object:Gem::Requirement
40
+ requirement: &70255008813600 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ~>
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: '1.0'
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *70212822506320
48
+ version_requirements: *70255008813600
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rake
51
- requirement: &70212822505480 !ruby/object:Gem::Requirement
51
+ requirement: &70255008812200 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ~>
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: 0.9.0
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *70212822505480
59
+ version_requirements: *70255008812200
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rspec
62
- requirement: &70212822504100 !ruby/object:Gem::Requirement
62
+ requirement: &70255008809320 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ~>
@@ -67,7 +67,7 @@ dependencies:
67
67
  version: '2.6'
68
68
  type: :development
69
69
  prerelease: false
70
- version_requirements: *70212822504100
70
+ version_requirements: *70255008809320
71
71
  description: Create plain old ruby models without reinventing the wheel.
72
72
  email:
73
73
  - cgriego@gmail.com
@@ -76,11 +76,11 @@ executables: []
76
76
  extensions: []
77
77
  extra_rdoc_files: []
78
78
  files:
79
- - .document
80
79
  - .gitignore
81
80
  - .rspec
82
81
  - .rvmrc
83
82
  - .travis.yml
83
+ - .yardopts
84
84
  - CHANGELOG.md
85
85
  - Gemfile
86
86
  - Guardfile
@@ -127,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
127
  version: '0'
128
128
  segments:
129
129
  - 0
130
- hash: 4452087611638543141
130
+ hash: -3746970680425630982
131
131
  required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  none: false
133
133
  requirements:
@@ -136,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
136
  version: '0'
137
137
  segments:
138
138
  - 0
139
- hash: 4452087611638543141
139
+ hash: -3746970680425630982
140
140
  requirements: []
141
141
  rubyforge_project: active_attr
142
142
  rubygems_version: 1.5.2