active_attr 0.5.0.alpha2 → 0.5.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.

Potentially problematic release.


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

Files changed (30) hide show
  1. data/.rvmrc +29 -3
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +14 -1
  4. data/Gemfile +2 -1
  5. data/README.md +21 -14
  6. data/lib/active_attr/chainable_initialization.rb +2 -2
  7. data/lib/active_attr/matchers/have_attribute_matcher.rb +84 -22
  8. data/lib/active_attr/model.rb +2 -0
  9. data/lib/active_attr/query_attributes.rb +1 -2
  10. data/lib/active_attr/typecasted_attributes.rb +22 -6
  11. data/lib/active_attr/typecasting.rb +19 -7
  12. data/lib/active_attr/typecasting/big_decimal_typecaster.rb +36 -0
  13. data/lib/active_attr/typecasting/boolean.rb +2 -0
  14. data/lib/active_attr/typecasting/boolean_typecaster.rb +26 -4
  15. data/lib/active_attr/typecasting/date_time_typecaster.rb +19 -2
  16. data/lib/active_attr/typecasting/date_typecaster.rb +18 -2
  17. data/lib/active_attr/typecasting/float_typecaster.rb +18 -2
  18. data/lib/active_attr/typecasting/integer_typecaster.rb +19 -2
  19. data/lib/active_attr/typecasting/object_typecaster.rb +16 -0
  20. data/lib/active_attr/typecasting/string_typecaster.rb +18 -2
  21. data/lib/active_attr/version.rb +1 -1
  22. data/spec/functional/active_attr/matchers/have_attribute_matcher_spec.rb +364 -0
  23. data/spec/functional/active_attr/model_spec.rb +6 -0
  24. data/spec/functional/active_attr/typecasted_attributes_spec.rb +18 -8
  25. data/spec/unit/active_attr/matchers/have_attribute_matcher_spec.rb +19 -144
  26. data/spec/unit/active_attr/matchers_spec.rb +23 -0
  27. data/spec/unit/active_attr/typecasting/big_decimal_typecaster_spec.rb +39 -0
  28. data/spec/unit/active_attr/typecasting/date_time_typecaster_spec.rb +3 -2
  29. data/spec/unit/active_attr/typecasting_spec.rb +5 -0
  30. metadata +30 -20
@@ -11,6 +11,7 @@ module ActiveAttr
11
11
 
12
12
  attribute :first_name
13
13
  attribute :last_name
14
+ attribute :age, :type => Integer
14
15
 
15
16
  attr_protected :last_name
16
17
 
@@ -84,6 +85,11 @@ module ActiveAttr
84
85
  model_class.human_attribute_name(:first_name).should == "First name"
85
86
  end
86
87
 
88
+ it "typecasts attributes" do
89
+ subject.age = "29"
90
+ subject.age.should eql 29
91
+ end
92
+
87
93
  context "attribute defaults" do
88
94
  let :model_class do
89
95
  Class.new do
@@ -1,6 +1,5 @@
1
1
  require "spec_helper"
2
2
  require "active_attr/typecasted_attributes"
3
- require "active_attr/mass_assignment"
4
3
 
5
4
  module ActiveAttr
6
5
  describe TypecastedAttributes do
@@ -11,13 +10,14 @@ module ActiveAttr
11
10
  include TypecastedAttributes
12
11
 
13
12
  attribute :typeless
14
- attribute :object, :type => Object
15
- attribute :boolean, :type => Typecasting::Boolean
16
- attribute :date, :type => Date
17
- attribute :date_time, :type => DateTime
18
- attribute :float, :type => Float
19
- attribute :integer, :type => Integer
20
- attribute :string, :type => String
13
+ attribute :object, :type => Object
14
+ attribute :big_decimal, :type => BigDecimal
15
+ attribute :boolean, :type => Typecasting::Boolean
16
+ attribute :date, :type => Date
17
+ attribute :date_time, :type => DateTime
18
+ attribute :float, :type => Float
19
+ attribute :integer, :type => Integer
20
+ attribute :string, :type => String
21
21
  end
22
22
  end
23
23
 
@@ -32,6 +32,11 @@ module ActiveAttr
32
32
  subject.object.should be_nil
33
33
  end
34
34
 
35
+ it "a BigDecimal attribute returns nil" do
36
+ subject.big_decimal = nil
37
+ subject.big_decimal.should be_nil
38
+ end
39
+
35
40
  it "a Boolean attribute returns nil" do
36
41
  subject.boolean = nil
37
42
  subject.boolean.should be_nil
@@ -76,6 +81,11 @@ module ActiveAttr
76
81
  subject.object.should equal value
77
82
  end
78
83
 
84
+ it "a BigDecimal attribute returns a BigDecimal" do
85
+ subject.big_decimal = "1.1"
86
+ subject.big_decimal.should eql BigDecimal.new("1.1")
87
+ end
88
+
79
89
  it "a Boolean attribute returns a Boolean" do
80
90
  subject.boolean = "false"
81
91
  subject.boolean.should eql false
@@ -1,84 +1,37 @@
1
1
  require "spec_helper"
2
- require "active_attr/attributes"
3
2
  require "active_attr/matchers/have_attribute_matcher"
4
3
 
5
4
  module ActiveAttr
6
- describe Matchers do
7
- let(:dsl) { Object.new.extend described_class }
8
- subject { dsl }
9
-
10
- it { should respond_to(:have_attribute).with(1).argument }
11
-
12
- describe "#have_attribute" do
13
- subject { dsl.have_attribute(:first_name) }
14
-
15
- it "builds a HaveAttributeMatcher" do
16
- should be_a_kind_of Matchers::HaveAttributeMatcher
17
- end
18
-
19
- it "uses the given attribute name to construct the matcher" do
20
- subject.send(:attribute_name).should == :first_name
21
- end
22
- end
23
- end
24
-
25
5
  module Matchers
26
6
  describe HaveAttributeMatcher do
27
- let :model_class do
28
- Class.new do
29
- include Attributes
30
- attribute :first_name, :default => "John"
31
- attribute :last_name
32
- attribute :admin, :default => false
33
-
34
- def self.to_s
35
- "Person"
36
- end
37
- end
7
+ describe ".class" do
8
+ it { described_class.should respond_to(:new).with(1).argument }
38
9
  end
39
10
 
40
- subject { positive_matcher }
41
- let(:positive_matcher) { described_class.new(:first_name) }
42
- let(:negative_matcher) { described_class.new(:age) }
43
- let(:positive_matcher_with_default) { described_class.new(:first_name).with_default_value_of("John") }
44
- let(:positive_matcher_with_false_default) { described_class.new(:admin).with_default_value_of(false) }
45
- let(:negative_matcher_with_wrong_default) { described_class.new(:first_name).with_default_value_of("Doe") }
46
- let(:negative_matcher_with_default_no_attribute) { described_class.new(:age).with_default_value_of(21) }
47
- let(:negative_matcher_with_nil_default) { described_class.new(:first_name).with_default_value_of(nil) }
48
-
49
- it { described_class.should respond_to(:new).with(1).argument }
50
-
51
11
  describe "#description" do
52
12
  it "returns a description appropriate to the expectation" do
53
- subject.description.should == "have attribute named first_name"
13
+ described_class.new(:first_name).description.should == "has attribute named first_name"
54
14
  end
55
15
 
56
16
  it "mentions the default value if set" do
57
- positive_matcher_with_default.description.should == %{have attribute named first_name with a default value of "John"}
17
+ described_class.new(:first_name).with_default_value_of("John").description.should == %{has attribute named first_name with a default value of "John"}
58
18
  end
59
19
 
60
- it "mentions the default value if set to false" do
61
- positive_matcher_with_false_default.description.should == %{have attribute named admin with a default value of false}
20
+ it "mentions the default value if set to nil" do
21
+ described_class.new(:first_name).with_default_value_of(nil).description.should == %{has attribute named first_name with a default value of nil}
62
22
  end
63
- end
64
23
 
65
- describe "#failure_message" do
66
- it "returns a failure message appropriate to the expectation and subject" do
67
- negative_matcher.tap do |matcher|
68
- matcher.matches? model_class
69
- end.failure_message.should == "Expected Person to have attribute named age"
24
+ it "mentions the default value if set to false" do
25
+ described_class.new(:admin).with_default_value_of(false).description.should == %{has attribute named admin with a default value of false}
70
26
  end
71
27
 
72
- it "mentions the default value if set" do
73
- negative_matcher_with_wrong_default.tap do |matcher|
74
- matcher.matches? model_class
75
- end.failure_message.should == %{Expected Person to have attribute named first_name with a default value of "Doe"}
28
+ it "mentions the type if set" do
29
+ described_class.new(:first_name).of_type(String).description.should == %{has attribute named first_name of type String}
76
30
  end
77
31
 
78
- it "mentions the default value if set to false" do
79
- negative_matcher_with_nil_default.tap do |matcher|
80
- matcher.matches? model_class
81
- end.failure_message.should == %{Expected Person to have attribute named first_name with a default value of nil}
32
+ it "mentions both the type and default if both are set" do
33
+ description = described_class.new(:first_name).of_type(String).with_default_value_of("John").description
34
+ description.should == %{has attribute named first_name of type String with a default value of "John"}
82
35
  end
83
36
  end
84
37
 
@@ -88,93 +41,15 @@ module ActiveAttr
88
41
  end
89
42
  end
90
43
 
91
- describe "#matches?" do
92
- let(:model_instance) { model_class.new }
93
-
94
- it "is true with an instance of a model class that has the attribute" do
95
- positive_matcher.matches?(model_instance).should be_true
96
- end
97
-
98
- it "is true with a model class that has the attribute" do
99
- positive_matcher.matches?(model_class).should be_true
100
- end
101
-
102
- it "is false with an instance of a model class that does not have the attribute" do
103
- negative_matcher.matches?(model_instance).should be_false
104
- end
105
-
106
- it "is false with a model class that does not have the attribute" do
107
- negative_matcher.matches?(model_class).should be_false
108
- end
109
-
110
- context "when the matcher specifies a default value" do
111
- it "is true with an instance of a model class that has the attribute with the default value" do
112
- positive_matcher_with_default.matches?(model_class).should be_true
113
- end
114
-
115
- it "is true with a model class that has the attribute with the default value" do
116
- positive_matcher_with_default.matches?(model_class).should be_true
117
- end
118
-
119
- it "is false with an instance of a model class that does not have the attribute" do
120
- negative_matcher_with_default_no_attribute.matches?(model_instance).should be_false
121
- end
122
-
123
- it "is false with a model class that does not have the attribute" do
124
- negative_matcher_with_default_no_attribute.matches?(model_class).should be_false
125
- end
126
-
127
- it "is false with an instance of a model class that has the attribute but not with the specified default value" do
128
- negative_matcher_with_wrong_default.matches?(model_instance).should be_false
129
- end
130
-
131
- it "is false with a model class that has the attribute but not with the specified default value" do
132
- negative_matcher_with_wrong_default.matches?(model_class).should be_false
133
- end
134
-
135
- it "is true with an instance of a model class that has the attribute with the default value of false" do
136
- positive_matcher_with_false_default.matches?(model_class).should be_true
137
- end
138
-
139
- it "is true with a model class that has the attribute with the default value where the default value is false" do
140
- positive_matcher_with_false_default.matches?(model_class).should be_true
141
- end
142
-
143
- it "is true with an instance of a model class that has the attribute with the default value where the default value is false" do
144
- positive_matcher_with_false_default.matches?(model_class).should be_true
145
- end
146
-
147
- it "is true with a model class that has the attribute with the default value false" do
148
- positive_matcher_with_false_default.matches?(model_class).should be_true
149
- end
150
-
151
- it "is false with an instance of a model class that has the attribute but not with the specified default value where the specified default value is nil" do
152
- negative_matcher_with_nil_default.matches?(model_instance).should be_false
153
- end
154
-
155
- it "is false with a model class that has the attribute but not with the specified default value where the specified default value is nil" do
156
- negative_matcher_with_nil_default.matches?(model_class).should be_false
157
- end
44
+ describe "#of_type" do
45
+ it "chains" do
46
+ described_class.new(:first_name).of_type(String).should be_a_kind_of described_class
158
47
  end
159
48
  end
160
49
 
161
- describe "#negative_failure_message" do
162
- it "returns a failure message appropriate to the expectation and subject" do
163
- positive_matcher.tap do |matcher|
164
- matcher.matches? model_class
165
- end.negative_failure_message.should == "Expected Person to not have attribute named first_name"
166
- end
167
-
168
- it "mentions the default value if set" do
169
- positive_matcher_with_default.tap do |matcher|
170
- matcher.matches? model_class
171
- end.negative_failure_message.should == %{Expected Person to not have attribute named first_name with a default value of "John"}
172
- end
173
-
174
- it "mentions the default value if set to false" do
175
- positive_matcher_with_false_default.tap do |matcher|
176
- matcher.matches? model_class
177
- end.negative_failure_message.should == %{Expected Person to not have attribute named admin with a default value of false}
50
+ describe "#with_default_value_of" do
51
+ it "chains" do
52
+ described_class.new(:first_name).with_default_value_of(nil).should be_a_kind_of described_class
178
53
  end
179
54
  end
180
55
  end
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+ require "active_attr/matchers"
3
+
4
+ module ActiveAttr
5
+ describe Matchers do
6
+ let(:dsl) { Object.new.extend described_class }
7
+ subject { dsl }
8
+
9
+ it { should respond_to(:have_attribute).with(1).argument }
10
+
11
+ describe "#have_attribute" do
12
+ subject { dsl.have_attribute(:first_name) }
13
+
14
+ it "builds a HaveAttributeMatcher" do
15
+ should be_a_kind_of Matchers::HaveAttributeMatcher
16
+ end
17
+
18
+ it "uses the given attribute name to construct the matcher" do
19
+ subject.send(:attribute_name).should == :first_name
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,39 @@
1
+ require "spec_helper"
2
+ require "active_attr/typecasting/big_decimal_typecaster"
3
+
4
+ module ActiveAttr
5
+ module Typecasting
6
+ describe BigDecimalTypecaster do
7
+ describe "#call" do
8
+ it "returns the original BigDecimal for a BigDecimal" do
9
+ value = BigDecimal.new("2.0")
10
+ subject.call(value).should equal value
11
+ end
12
+
13
+ it "casts nil to a zero BigDecimal" do
14
+ subject.call(nil).should eql BigDecimal.new("0.0")
15
+ end
16
+
17
+ it "casts a numeric String to a BigDecimal" do
18
+ subject.call("2").should eql BigDecimal.new("2.0")
19
+ end
20
+
21
+ it "casts a alpha String to a zero BigDecimal" do
22
+ subject.call("bob").should eql BigDecimal.new("0.0")
23
+ end
24
+
25
+ it "casts a Rational to a BigDecimal" do
26
+ subject.call(Rational(1, 2)).should eql BigDecimal.new("0.5")
27
+ end
28
+
29
+ it "casts a Float to a BigDecimal" do
30
+ subject.call(1.2).should eql BigDecimal.new("1.2")
31
+ end
32
+
33
+ it "cases an Integer to a BigDecimal" do
34
+ subject.call(2).should eql BigDecimal.new("2.0")
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -27,8 +27,9 @@ module ActiveAttr
27
27
  end
28
28
 
29
29
  it "casts a local Time to a DateTime with a matching offset" do
30
- result = subject.call(Time.local(2012, 1, 1, 12, 0, 0))
31
- result.should eql DateTime.new(2012, 1, 1, 12, 0, 0, Rational(Time.now.utc_offset, 86400))
30
+ value = Time.local(2012, 1, 1, 12, 0, 0)
31
+ result = subject.call(value)
32
+ result.should eql DateTime.new(2012, 1, 1, 12, 0, 0, Rational(value.utc_offset, 86400))
32
33
  result.should be_instance_of DateTime
33
34
  end
34
35
 
@@ -48,6 +48,11 @@ module ActiveAttr
48
48
  subject { model.typecast_value(type, value) }
49
49
  let(:value) { mock }
50
50
 
51
+ it "calls BigDecimalTypecaster when typecasting to BigDecimal" do
52
+ Typecasting::BigDecimalTypecaster.any_instance.should_receive(:call).with(value)
53
+ model.typecast_value(BigDecimal, value)
54
+ end
55
+
51
56
  it "calls BooleanTypecaster when typecasting to Boolean" do
52
57
  Typecasting::BooleanTypecaster.any_instance.should_receive(:call).with(value)
53
58
  model.typecast_value(Typecasting::Boolean, value)
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_attr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0.alpha2
5
- prerelease: 6
4
+ version: 0.5.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Chris Griego
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-02-02 00:00:00.000000000Z
13
+ date: 2012-03-12 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
17
- requirement: &70095293529660 !ruby/object:Gem::Requirement
17
+ requirement: &70109482810160 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -25,10 +25,10 @@ dependencies:
25
25
  version: '4.1'
26
26
  type: :runtime
27
27
  prerelease: false
28
- version_requirements: *70095293529660
28
+ version_requirements: *70109482810160
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: activesupport
31
- requirement: &70095293527620 !ruby/object:Gem::Requirement
31
+ requirement: &70109482808160 !ruby/object:Gem::Requirement
32
32
  none: false
33
33
  requirements:
34
34
  - - ! '>='
@@ -39,10 +39,10 @@ dependencies:
39
39
  version: '4.1'
40
40
  type: :runtime
41
41
  prerelease: false
42
- version_requirements: *70095293527620
42
+ version_requirements: *70109482808160
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: bundler
45
- requirement: &70095293526420 !ruby/object:Gem::Requirement
45
+ requirement: &70109482806600 !ruby/object:Gem::Requirement
46
46
  none: false
47
47
  requirements:
48
48
  - - ~>
@@ -50,10 +50,10 @@ dependencies:
50
50
  version: '1.0'
51
51
  type: :development
52
52
  prerelease: false
53
- version_requirements: *70095293526420
53
+ version_requirements: *70109482806600
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: factory_girl
56
- requirement: &70095293525540 !ruby/object:Gem::Requirement
56
+ requirement: &70109482805800 !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
59
  - - ~>
@@ -61,10 +61,10 @@ dependencies:
61
61
  version: '2.2'
62
62
  type: :development
63
63
  prerelease: false
64
- version_requirements: *70095293525540
64
+ version_requirements: *70109482805800
65
65
  - !ruby/object:Gem::Dependency
66
66
  name: rake
67
- requirement: &70095293524360 !ruby/object:Gem::Requirement
67
+ requirement: &70109482804840 !ruby/object:Gem::Requirement
68
68
  none: false
69
69
  requirements:
70
70
  - - ~>
@@ -72,10 +72,10 @@ dependencies:
72
72
  version: 0.9.0
73
73
  type: :development
74
74
  prerelease: false
75
- version_requirements: *70095293524360
75
+ version_requirements: *70109482804840
76
76
  - !ruby/object:Gem::Dependency
77
77
  name: rspec
78
- requirement: &70095293523040 !ruby/object:Gem::Requirement
78
+ requirement: &70109482803980 !ruby/object:Gem::Requirement
79
79
  none: false
80
80
  requirements:
81
81
  - - ~>
@@ -83,10 +83,10 @@ dependencies:
83
83
  version: '2.6'
84
84
  type: :development
85
85
  prerelease: false
86
- version_requirements: *70095293523040
86
+ version_requirements: *70109482803980
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: tzinfo
89
- requirement: &70095293522260 !ruby/object:Gem::Requirement
89
+ requirement: &70109482803280 !ruby/object:Gem::Requirement
90
90
  none: false
91
91
  requirements:
92
92
  - - ~>
@@ -94,7 +94,7 @@ dependencies:
94
94
  version: 0.3.29
95
95
  type: :development
96
96
  prerelease: false
97
- version_requirements: *70095293522260
97
+ version_requirements: *70109482803280
98
98
  description: Create plain old ruby models without reinventing the wheel.
99
99
  email:
100
100
  - cgriego@gmail.com
@@ -137,6 +137,7 @@ files:
137
137
  - lib/active_attr/rspec.rb
138
138
  - lib/active_attr/typecasted_attributes.rb
139
139
  - lib/active_attr/typecasting.rb
140
+ - lib/active_attr/typecasting/big_decimal_typecaster.rb
140
141
  - lib/active_attr/typecasting/boolean.rb
141
142
  - lib/active_attr/typecasting/boolean_typecaster.rb
142
143
  - lib/active_attr/typecasting/date_time_typecaster.rb
@@ -150,6 +151,7 @@ files:
150
151
  - spec/functional/active_attr/attribute_defaults_spec.rb
151
152
  - spec/functional/active_attr/attributes_spec.rb
152
153
  - spec/functional/active_attr/chainable_initialization_spec.rb
154
+ - spec/functional/active_attr/matchers/have_attribute_matcher_spec.rb
153
155
  - spec/functional/active_attr/model_spec.rb
154
156
  - spec/functional/active_attr/query_attributes_spec.rb
155
157
  - spec/functional/active_attr/typecasted_attributes_spec.rb
@@ -168,8 +170,10 @@ files:
168
170
  - spec/unit/active_attr/mass_assignment_security_spec.rb
169
171
  - spec/unit/active_attr/mass_assignment_spec.rb
170
172
  - spec/unit/active_attr/matchers/have_attribute_matcher_spec.rb
173
+ - spec/unit/active_attr/matchers_spec.rb
171
174
  - spec/unit/active_attr/query_attributes_spec.rb
172
175
  - spec/unit/active_attr/typecasted_attributes_spec.rb
176
+ - spec/unit/active_attr/typecasting/big_decimal_typecaster_spec.rb
173
177
  - spec/unit/active_attr/typecasting/boolean_spec.rb
174
178
  - spec/unit/active_attr/typecasting/boolean_typecaster_spec.rb
175
179
  - spec/unit/active_attr/typecasting/date_time_typecaster_spec.rb
@@ -195,13 +199,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
199
  version: '0'
196
200
  segments:
197
201
  - 0
198
- hash: -2101862700506728193
202
+ hash: -2941939635939237766
199
203
  required_rubygems_version: !ruby/object:Gem::Requirement
200
204
  none: false
201
205
  requirements:
202
- - - ! '>'
206
+ - - ! '>='
203
207
  - !ruby/object:Gem::Version
204
- version: 1.3.1
208
+ version: '0'
209
+ segments:
210
+ - 0
211
+ hash: -2941939635939237766
205
212
  requirements: []
206
213
  rubyforge_project: active_attr
207
214
  rubygems_version: 1.8.10
@@ -212,6 +219,7 @@ test_files:
212
219
  - spec/functional/active_attr/attribute_defaults_spec.rb
213
220
  - spec/functional/active_attr/attributes_spec.rb
214
221
  - spec/functional/active_attr/chainable_initialization_spec.rb
222
+ - spec/functional/active_attr/matchers/have_attribute_matcher_spec.rb
215
223
  - spec/functional/active_attr/model_spec.rb
216
224
  - spec/functional/active_attr/query_attributes_spec.rb
217
225
  - spec/functional/active_attr/typecasted_attributes_spec.rb
@@ -230,8 +238,10 @@ test_files:
230
238
  - spec/unit/active_attr/mass_assignment_security_spec.rb
231
239
  - spec/unit/active_attr/mass_assignment_spec.rb
232
240
  - spec/unit/active_attr/matchers/have_attribute_matcher_spec.rb
241
+ - spec/unit/active_attr/matchers_spec.rb
233
242
  - spec/unit/active_attr/query_attributes_spec.rb
234
243
  - spec/unit/active_attr/typecasted_attributes_spec.rb
244
+ - spec/unit/active_attr/typecasting/big_decimal_typecaster_spec.rb
235
245
  - spec/unit/active_attr/typecasting/boolean_spec.rb
236
246
  - spec/unit/active_attr/typecasting/boolean_typecaster_spec.rb
237
247
  - spec/unit/active_attr/typecasting/date_time_typecaster_spec.rb