money-rails 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da75b2a1634ec1a097db7c1349ee114d31719717
4
- data.tar.gz: f379ae29deed8c86a05a3810f2c842194133aa5f
3
+ metadata.gz: 6c8b379f2b72435fdb82e4b5022a947ac6470ddb
4
+ data.tar.gz: 1a4286158053e24e3eac5da3475b014b6251518e
5
5
  SHA512:
6
- metadata.gz: 9377d3b7acbbfa3d2929a42cbfc8e4144d29dc77bf5843b11728bdf74d33c1dc1aeb4d899935ec9ca7eca461d0a4f19467c7147f32ee83e3fc0392702e1346a3
7
- data.tar.gz: 79b80154056efb1d9ed494a837c08f5251b018b3641e8e4e811645c86d2a9ca2826116d266216592718eb73c77f109b9e8766a02a199e5edaff54622944a1523
6
+ metadata.gz: f82ac9627b0e16100aa8d09fae383f86bc2398f632ff32e30af6f326636da2d183f863286d62b2ece83322eecc89f311cec63649d2b061191a7a1336b0ff182b
7
+ data.tar.gz: 79a411fa93a7a6a9ccda5ad9132b32b5973a9b2f991e116b1d05a6d86f0ba3358765f1b70375aa117f795fae0d9d5fc1d95abd2398c9af9e35457810dec02af1
data/README.md CHANGED
@@ -465,6 +465,11 @@ monetize(:price_cents).should be_true
465
465
  ```
466
466
  This will ensure that a column called `price_cents` is being monetized.
467
467
 
468
+ ```
469
+ monetize(:price_cents).allow_nil.should be_true
470
+ ```
471
+ By using `allow_nil` you can specify money attributes that accept nil values.
472
+
468
473
  ```
469
474
  monetize(:price_cents).as(:discount_value).should be_true
470
475
  ```
data/Rakefile CHANGED
@@ -44,6 +44,9 @@ namespace :spec do
44
44
  desc "Run Tests against mongoid (version 2)"
45
45
  task(:mongoid2) { run_with_gemfile 'gemfiles/mongoid2.gemfile' }
46
46
 
47
+ desc "Run Tests against rails 4.1"
48
+ task(:rails41) { run_with_gemfile 'gemfiles/rails41.gemfile' }
49
+
47
50
  desc "Run Tests against rails 4"
48
51
  task(:rails4) { run_with_gemfile 'gemfiles/rails4.gemfile' }
49
52
 
@@ -53,8 +56,8 @@ namespace :spec do
53
56
  desc "Run Tests against mongoid 2 & 3"
54
57
  task :mongoid => [:mongoid2, :mongoid3]
55
58
 
56
- desc "Run Tests against rails 3 & 4"
57
- task :rails => [:rails3, :rails4]
59
+ desc "Run Tests against rails 3 & 4 & 4.1"
60
+ task :rails => [:rails3, :rails4, :rails41]
58
61
 
59
62
  desc "Run Tests against all ORMs"
60
63
  task :all => [:rails, :mongoid]
@@ -2,48 +2,81 @@ require 'rspec/expectations'
2
2
 
3
3
  module MoneyRails
4
4
  module TestHelpers
5
- extend RSpec::Matchers::DSL
5
+ def monetize(attribute)
6
+ MonetizeMatcher.new(attribute)
7
+ end
6
8
 
7
- matcher :monetize do |attr|
9
+ class MonetizeMatcher
10
+ def initialize(attribute)
11
+ @attribute = attribute
12
+ end
8
13
 
9
- chain(:with_currency) do |currency|
14
+ def with_currency(currency)
10
15
  @currency_iso = currency
16
+ self
11
17
  end
12
18
 
13
- chain(:as) do |virt_attr|
19
+ def as(virt_attr)
14
20
  @as = virt_attr
21
+ self
22
+ end
23
+
24
+ def allow_nil
25
+ @allow_nil = true
26
+ self
15
27
  end
16
28
 
17
- match do |target|
29
+ def matches?(actual)
30
+ @actual = actual
31
+
32
+ money_attr = @as.presence || @attribute.to_s.sub(/_cents$/, "")
33
+
18
34
  matched = true
19
- money_attr = @as.presence || attr.to_s.sub(/_cents$/, "")
20
- matched = false if !target.respond_to?(money_attr) ||
21
- !target.send(money_attr).instance_of?(Money) ||
22
- (@currency_iso &&
23
- target.send(money_attr.to_sym).currency.id != @currency_iso)
35
+
36
+ if actual.respond_to?(money_attr)
37
+ if @allow_nil
38
+ matched &&= actual.send(money_attr).nil?
39
+ actual.send("#{money_attr}=", 0)
40
+ end
41
+ matched &&= actual.send(money_attr).instance_of?(Money)
42
+
43
+ if @currency_iso
44
+ matched &&= actual.send(money_attr.to_sym).currency.id == @currency_iso
45
+ end
46
+ else
47
+ matched = false
48
+ end
49
+
24
50
  matched
25
51
  end
26
52
 
27
- description do
28
- description = "monetize #{attr}"
29
- description << " as #{@as}" if @as
30
- description << " with currency #{@currency_iso}" if @currency_iso
31
- description
53
+ def description
54
+ desc = "monetize #{@attribute}"
55
+ desc << " as #{@as}" if @as
56
+ desc << " with currency #{@currency_iso}" if @currency_iso
57
+ desc
32
58
  end
33
59
 
34
- failure_message_for_should do |actual|
35
- msg = "expected that #{attr} of #{actual} would be monetized"
60
+ def failure_message # RSpec 3.x
61
+ msg = "expected that #{@attribute} of #{@actual} would be monetized"
36
62
  msg << " as #{@as}" if @as
37
63
  msg << " with currency #{@currency_iso}" if @currency_iso
38
64
  msg
39
65
  end
66
+ alias_method :failure_message_for_should, :failure_message # RSpec 1.2, 2.x, and minitest-matchers
40
67
 
41
- failure_message_for_should_not do |actual|
42
- msg = "expected that #{attr} of #{actual} would not be monetized"
68
+ def failure_message_when_negated # RSpec 3.x
69
+ msg = "expected that #{@attribute} of #{@actual} would not be monetized"
43
70
  msg << " as #{@as}" if @as
44
71
  msg << " with currency #{@currency_iso}" if @currency_iso
45
72
  msg
46
73
  end
74
+ alias_method :failure_message_for_should_not, :failure_message_when_negated # RSpec 1.2, 2.x, and minitest-matchers
75
+ alias_method :negative_failure_message, :failure_message_when_negated # RSpec 1.1
47
76
  end
48
77
  end
49
78
  end
79
+
80
+ RSpec.configure do |config|
81
+ config.include MoneyRails::TestHelpers
82
+ end
@@ -1,3 +1,3 @@
1
1
  module MoneyRails
2
- VERSION = "0.11.0"
2
+ VERSION = "0.12.0"
3
3
  end
@@ -36,19 +36,19 @@ if defined? ActiveRecord
36
36
  describe 'amount' do
37
37
  subject { Item.columns_hash['price_cents'] }
38
38
 
39
- its (:default) { should eq 0 }
40
- its (:null) { should be_false }
41
- its (:type) { should eq :integer }
39
+ it { expect(subject.default).to eq(0) }
40
+ it { expect(subject.null).to be(false) }
41
+ it { expect(subject.type).to eq(:integer) }
42
42
  end
43
43
 
44
44
  describe 'currency' do
45
45
  subject { Item.columns_hash['price_currency'] }
46
46
 
47
47
  # set in spec/dummy/config/initializers/money.rb
48
- its (:default) { should eq 'EUR' }
48
+ it { expect(subject.default).to eq('EUR') }
49
49
 
50
- its (:null) { should be_false }
51
- its (:type) { should eq :string }
50
+ it { expect(subject.null).to be(false) }
51
+ it { expect(subject.type).to eq(:string) }
52
52
  end
53
53
  end
54
54
 
@@ -61,11 +61,11 @@ if defined? ActiveRecord
61
61
  describe 'amount' do
62
62
  subject { Item.columns_hash['prefix_price_with_full_options_postfix'] }
63
63
 
64
- its (:default) { should eq 1 }
65
- its (:null) { should be_true }
66
- its (:type) { should eq :decimal }
67
- its (:precision) { should eq 4 }
68
- its (:scale) { should eq 2 }
64
+ it { expect(subject.default).to eq(1) }
65
+ it { expect(subject.null).to be(true) }
66
+ it { expect(subject.type).to eq(:decimal) }
67
+ it { expect(subject.precision).to eq(4) }
68
+ it { expect(subject.scale).to eq(2) }
69
69
  end
70
70
 
71
71
  describe 'currency' do
@@ -37,19 +37,19 @@ if defined? ActiveRecord
37
37
  describe 'amount' do
38
38
  subject { Item.columns_hash['price_cents'] }
39
39
 
40
- its (:default) { should eq 0 }
41
- its (:null) { should be_false }
42
- its (:type) { should eq :integer }
40
+ it { expect(subject.default).to eq(0) }
41
+ it { expect(subject.null).to be(false) }
42
+ it { expect(subject.type).to eq(:integer) }
43
43
  end
44
44
 
45
45
  describe 'currency' do
46
46
  subject { Item.columns_hash['price_currency'] }
47
47
 
48
48
  # set in spec/dummy/config/initializers/money.rb
49
- its (:default) { should eq 'EUR' }
50
-
51
- its (:null) { should be_false }
52
- its (:type) { should eq :string }
49
+ it { expect(subject.default).to eq('EUR') }
50
+
51
+ it { expect(subject.null).to be(false) }
52
+ it { expect(subject.type).to eq(:string) }
53
53
  end
54
54
  end
55
55
 
@@ -62,11 +62,11 @@ if defined? ActiveRecord
62
62
  describe 'amount' do
63
63
  subject { Item.columns_hash['prefix_price_with_full_options_postfix'] }
64
64
 
65
- its (:default) { should eq 1 }
66
- its (:null) { should be_true }
67
- its (:type) { should eq :decimal }
68
- its (:precision) { should eq 4 }
69
- its (:scale) { should eq 2 }
65
+ it { expect(subject.default).to eq(1) }
66
+ it { expect(subject.null).to be(true) }
67
+ it { expect(subject.type).to eq(:decimal) }
68
+ it { expect(subject.precision).to eq(4) }
69
+ it { expect(subject.scale).to eq(2) }
70
70
  end
71
71
 
72
72
  describe 'currency' do
@@ -31,19 +31,19 @@ if defined? ActiveRecord
31
31
 
32
32
  it "assigns the correct value from a Money object" do
33
33
  product.price = Money.new(3210, "USD")
34
- product.save.should be_true
34
+ product.save.should eq(true)
35
35
  product.price_cents.should == 3210
36
36
  end
37
37
 
38
38
  it "assigns the correct value from a Money object using create" do
39
39
  product = Product.create(:price => Money.new(3210, "USD"), :discount => 150,
40
40
  :bonus_cents => 200, :optional_price => 100)
41
- product.valid?.should be_true
41
+ product.valid?.should eq(true)
42
42
  product.price_cents.should == 3210
43
43
  end
44
44
 
45
45
  it "updates correctly from a Money object using update_attributes" do
46
- product.update_attributes(:price => Money.new(215, "USD")).should be_true
46
+ product.update_attributes(:price => Money.new(215, "USD")).should eq(true)
47
47
  product.price_cents.should == 215
48
48
  end
49
49
 
@@ -60,15 +60,15 @@ if defined? ActiveRecord
60
60
 
61
61
  it "uses numericality validation" do
62
62
  product.price_cents = "foo"
63
- product.save.should be_false
63
+ product.save.should eq(false)
64
64
 
65
65
  product.price_cents = 2000
66
- product.save.should be_true
66
+ product.save.should eq(true)
67
67
  end
68
68
 
69
69
  it "skips numericality validation when disabled" do
70
70
  product.invalid_price_cents = 'not_valid'
71
- product.save.should be_true
71
+ product.save.should eq(true)
72
72
  end
73
73
 
74
74
  context "when MoneyRails.raise_error_on_money_parsing is true" do
@@ -87,144 +87,144 @@ if defined? ActiveRecord
87
87
  end
88
88
 
89
89
  it "respects numericality validation when using update_attributes" do
90
- product.update_attributes(:price_cents => "some text").should be_false
91
- product.update_attributes(:price_cents => 2000).should be_true
90
+ product.update_attributes(:price_cents => "some text").should eq(false)
91
+ product.update_attributes(:price_cents => 2000).should eq(true)
92
92
  end
93
93
 
94
94
  it "uses numericality validation on money attribute" do
95
95
  product.price = "some text"
96
- product.save.should be_false
96
+ product.save.should eq(false)
97
97
 
98
98
  product.price = Money.new(320, "USD")
99
- product.save.should be_true
99
+ product.save.should eq(true)
100
100
 
101
101
  product.sale_price = "12.34"
102
102
  product.sale_price_currency_code = 'EUR'
103
- product.valid?.should be_true
103
+ product.valid?.should eq(true)
104
104
  end
105
105
 
106
106
  it "fails validation with the proper error message if money value is invalid decimal" do
107
107
  product.price = "12.23.24"
108
- product.save.should be_false
108
+ product.save.should eq(false)
109
109
  product.errors[:price].first.should match(/Must be a valid/)
110
110
  end
111
111
 
112
112
  it "fails validation with the proper error message if money value is nothing but periods" do
113
113
  product.price = "..."
114
- product.save.should be_false
114
+ product.save.should eq(false)
115
115
  product.errors[:price].first.should match(/Must be a valid/)
116
116
  end
117
117
 
118
118
  it "fails validation with the proper error message if money value has invalid thousands part" do
119
119
  product.price = "12,23.24"
120
- product.save.should be_false
120
+ product.save.should eq(false)
121
121
  product.errors[:price].first.should match(/Must be a valid/)
122
122
  end
123
123
 
124
124
  it "passes validation if money value is a Float and the currency decimal mark is not period" do
125
125
  # The corresponding String would be "12,34" euros
126
126
  service.discount = 12.34
127
- service.save.should be_true
127
+ service.save.should eq(true)
128
128
  end
129
129
 
130
130
  it "passes validation if money value is a Float" do
131
131
  product.price = 12.34
132
- product.save.should be_true
132
+ product.save.should eq(true)
133
133
  end
134
134
 
135
135
  it "passes validation if money value is an Integer" do
136
136
  product.price = 12
137
- product.save.should be_true
137
+ product.save.should eq(true)
138
138
  end
139
139
 
140
140
  it "fails validation with the proper error message using numericality validations" do
141
141
  product.price_in_a_range = "-12"
142
- product.valid?.should be_false
142
+ product.valid?.should eq(false)
143
143
  product.errors[:price_in_a_range].first.should match(/Must be greater than zero and less than \$100/)
144
144
 
145
145
  product.price_in_a_range = Money.new(-1200, "USD")
146
- product.valid?.should be_false
146
+ product.valid?.should eq(false)
147
147
  product.errors[:price_in_a_range].first.should match(/Must be greater than zero and less than \$100/)
148
148
 
149
149
  product.price_in_a_range = "0"
150
- product.valid?.should be_false
150
+ product.valid?.should eq(false)
151
151
  product.errors[:price_in_a_range].first.should match(/Must be greater than zero and less than \$100/)
152
152
 
153
153
  product.price_in_a_range = "12"
154
- product.valid?.should be_true
154
+ product.valid?.should eq(true)
155
155
 
156
156
  product.price_in_a_range = Money.new(1200, "USD")
157
- product.valid?.should be_true
157
+ product.valid?.should eq(true)
158
158
 
159
159
  product.price_in_a_range = "101"
160
- product.valid?.should be_false
160
+ product.valid?.should eq(false)
161
161
  product.errors[:price_in_a_range].first.should match(/Must be greater than zero and less than \$100/)
162
162
 
163
163
  product.price_in_a_range = Money.new(10100, "USD")
164
- product.valid?.should be_false
164
+ product.valid?.should eq(false)
165
165
  product.errors[:price_in_a_range].first.should match(/Must be greater than zero and less than \$100/)
166
166
  end
167
167
 
168
168
  it "fails validation with the proper error message using validates :money" do
169
169
  product.validates_method_amount = "-12"
170
- product.valid?.should be_false
170
+ product.valid?.should eq(false)
171
171
  product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
172
172
 
173
173
  product.validates_method_amount = Money.new(-1200, "USD")
174
- product.valid?.should be_false
174
+ product.valid?.should eq(false)
175
175
  product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
176
176
 
177
177
  product.validates_method_amount = "0"
178
- product.valid?.should be_false
178
+ product.valid?.should eq(false)
179
179
  product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
180
180
 
181
181
  product.validates_method_amount = "12"
182
- product.valid?.should be_true
182
+ product.valid?.should eq(true)
183
183
 
184
184
  product.validates_method_amount = Money.new(1200, "USD")
185
- product.valid?.should be_true
185
+ product.valid?.should eq(true)
186
186
 
187
187
  product.validates_method_amount = "101"
188
- product.valid?.should be_false
188
+ product.valid?.should eq(false)
189
189
  product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
190
190
 
191
191
  product.validates_method_amount = Money.new(10100, "USD")
192
- product.valid?.should be_false
192
+ product.valid?.should eq(false)
193
193
  product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
194
194
  end
195
195
 
196
196
  it "fails validation with the proper error message on the cents field " do
197
197
  product.price_in_a_range = "-12"
198
- product.valid?.should be_false
198
+ product.valid?.should eq(false)
199
199
  product.errors[:price_in_a_range_cents].first.should match(/greater than 0/)
200
200
 
201
201
  product.price_in_a_range = "0"
202
- product.valid?.should be_false
202
+ product.valid?.should eq(false)
203
203
  product.errors[:price_in_a_range_cents].first.should match(/greater than 0/)
204
204
 
205
205
  product.price_in_a_range = "12"
206
- product.valid?.should be_true
206
+ product.valid?.should eq(true)
207
207
 
208
208
  product.price_in_a_range = "101"
209
- product.valid?.should be_false
209
+ product.valid?.should eq(false)
210
210
  product.errors[:price_in_a_range_cents].first.should match(/less than or equal to 10000/)
211
211
  end
212
212
 
213
213
  it "fails validation when a non number string is given" do
214
214
  product = Product.create(:price_in_a_range => "asd")
215
- product.valid?.should be_false
215
+ product.valid?.should eq(false)
216
216
  product.errors[:price_in_a_range].first.should match(/greater than zero/)
217
217
 
218
218
  product = Product.create(:price_in_a_range => "asd23")
219
- product.valid?.should be_false
219
+ product.valid?.should eq(false)
220
220
  product.errors[:price_in_a_range].first.should match(/greater than zero/)
221
221
 
222
222
  product = Product.create(:price => "asd")
223
- product.valid?.should be_false
223
+ product.valid?.should eq(false)
224
224
  product.errors[:price].first.should match(/is not a number/)
225
225
 
226
226
  product = Product.create(:price => "asd23")
227
- product.valid?.should be_false
227
+ product.valid?.should eq(false)
228
228
  product.errors[:price].first.should match(/is not a number/)
229
229
  end
230
230
 
@@ -242,17 +242,17 @@ if defined? ActiveRecord
242
242
 
243
243
  it "passes validation if money value has correct format" do
244
244
  product.price = "12,230.24"
245
- product.save.should be_true
245
+ product.save.should eq(true)
246
246
  end
247
247
 
248
248
  it "passes validation if there is a whitespace between the currency symbol and amount" do
249
249
  product.price = "$ 123,456.78"
250
- product.save.should be_true
250
+ product.save.should eq(true)
251
251
  end
252
252
 
253
253
  it "respects numericality validation when using update_attributes on money attribute" do
254
- product.update_attributes(:price => "some text").should be_false
255
- product.update_attributes(:price => Money.new(320, 'USD')).should be_true
254
+ product.update_attributes(:price => "some text").should eq(false)
255
+ product.update_attributes(:price => Money.new(320, 'USD')).should eq(true)
256
256
  end
257
257
 
258
258
  it "uses i18n currency format when validating" do
@@ -263,7 +263,7 @@ if defined? ActiveRecord
263
263
  "12.00".to_money.should == Money.new(1200, :eur)
264
264
  transaction = Transaction.new(amount: "12.00", tax: "13.00")
265
265
  transaction.amount_cents.should == 1200
266
- transaction.valid?.should be_true
266
+ transaction.valid?.should eq(true)
267
267
 
268
268
  # reset locale setting
269
269
  I18n.locale = old_locale
@@ -277,7 +277,7 @@ if defined? ActiveRecord
277
277
  "12,00".to_money.should == Money.new(1200, :eur)
278
278
  transaction = Transaction.new(amount: "12,00", tax: "13,00")
279
279
  transaction.amount_cents.should == 1200
280
- transaction.valid?.should be_true
280
+ transaction.valid?.should eq(true)
281
281
 
282
282
  # reset locale setting
283
283
  I18n.locale = old_locale
@@ -285,12 +285,12 @@ if defined? ActiveRecord
285
285
 
286
286
  it "doesn't allow nil by default" do
287
287
  product.price_cents = nil
288
- product.save.should be_false
288
+ product.save.should eq(false)
289
289
  end
290
290
 
291
291
  it "allows nil if optioned" do
292
292
  product.optional_price = nil
293
- product.save.should be_true
293
+ product.save.should eq(true)
294
294
  product.optional_price.should be_nil
295
295
  end
296
296
 
@@ -319,7 +319,7 @@ if defined? ActiveRecord
319
319
  it "does not reset money_before_type_cast attr if save operation fails" do
320
320
  product.bonus = ""
321
321
  product.bonus_money_before_type_cast.should == ""
322
- product.save.should be_false
322
+ product.save.should eq(false)
323
323
  product.bonus_money_before_type_cast.should == ""
324
324
  end
325
325
 
@@ -338,90 +338,90 @@ if defined? ActiveRecord
338
338
 
339
339
  it "assigns correctly Money objects to the attribute" do
340
340
  product.price = Money.new(2500, :USD)
341
- product.save.should be_true
341
+ product.save.should eq(true)
342
342
  product.price.cents.should == 2500
343
343
  product.price.currency_as_string.should == "USD"
344
344
  end
345
345
 
346
346
  it "assigns correctly Fixnum objects to the attribute" do
347
347
  product.price = 25
348
- product.save.should be_true
348
+ product.save.should eq(true)
349
349
  product.price.cents.should == 2500
350
350
  product.price.currency_as_string.should == "USD"
351
351
 
352
352
  service.discount = 2
353
- service.save.should be_true
353
+ service.save.should eq(true)
354
354
  service.discount.cents.should == 200
355
355
  service.discount.currency_as_string.should == "EUR"
356
356
  end
357
357
 
358
358
  it "assigns correctly String objects to the attribute" do
359
359
  product.price = "25"
360
- product.save.should be_true
360
+ product.save.should eq(true)
361
361
  product.price.cents.should == 2500
362
362
  product.price.currency_as_string.should == "USD"
363
363
 
364
364
  service.discount = "2"
365
- service.save.should be_true
365
+ service.save.should eq(true)
366
366
  service.discount.cents.should == 200
367
367
  service.discount.currency_as_string.should == "EUR"
368
368
  end
369
369
 
370
370
  it "overrides default, model currency with the value of :with_currency in fixnum assignments" do
371
371
  product.bonus = 25
372
- product.save.should be_true
372
+ product.save.should eq(true)
373
373
  product.bonus.cents.should == 2500
374
374
  product.bonus.currency_as_string.should == "GBP"
375
375
 
376
376
  service.charge = 2
377
- service.save.should be_true
377
+ service.save.should eq(true)
378
378
  service.charge.cents.should == 200
379
379
  service.charge.currency_as_string.should == "USD"
380
380
  end
381
381
 
382
382
  it "overrides default, model currency with the value of :with_currency in string assignments" do
383
383
  product.bonus = "25"
384
- product.save.should be_true
384
+ product.save.should eq(true)
385
385
  product.bonus.cents.should == 2500
386
386
  product.bonus.currency_as_string.should == "GBP"
387
387
 
388
388
  service.charge = "2"
389
- service.save.should be_true
389
+ service.save.should eq(true)
390
390
  service.charge.cents.should == 200
391
391
  service.charge.currency_as_string.should == "USD"
392
392
  end
393
393
 
394
394
  it "overrides default currency with model currency, in fixnum assignments" do
395
395
  product.discount_value = 5
396
- product.save.should be_true
396
+ product.save.should eq(true)
397
397
  product.discount_value.cents.should == 500
398
398
  product.discount_value.currency_as_string.should == "USD"
399
399
  end
400
400
 
401
401
  it "overrides default currency with model currency, in string assignments" do
402
402
  product.discount_value = "5"
403
- product.save.should be_true
403
+ product.save.should eq(true)
404
404
  product.discount_value.cents.should == 500
405
405
  product.discount_value.currency_as_string.should == "USD"
406
406
  end
407
407
 
408
408
  it "falls back to default currency, in fixnum assignments" do
409
409
  service.discount = 5
410
- service.save.should be_true
410
+ service.save.should eq(true)
411
411
  service.discount.cents.should == 500
412
412
  service.discount.currency_as_string.should == "EUR"
413
413
  end
414
414
 
415
415
  it "falls back to default currency, in string assignments" do
416
416
  service.discount = "5"
417
- service.save.should be_true
417
+ service.save.should eq(true)
418
418
  service.discount.cents.should == 500
419
419
  service.discount.currency_as_string.should == "EUR"
420
420
  end
421
421
 
422
422
  it "sets field to nil, in nil assignments if allow_nil is set" do
423
423
  product.optional_price = nil
424
- product.save.should be_true
424
+ product.save.should eq(true)
425
425
  product.optional_price.should be_nil
426
426
  end
427
427
 
@@ -429,13 +429,13 @@ if defined? ActiveRecord
429
429
  pr = Product.new(:optional_price => nil, :price_cents => 5320,
430
430
  :discount => 350, :bonus_cents => 320)
431
431
  pr.optional_price.should be_nil
432
- pr.save.should be_true
432
+ pr.save.should eq(true)
433
433
  pr.optional_price.should be_nil
434
434
  end
435
435
 
436
436
  it "sets field to nil, in blank assignments if allow_nil is set" do
437
437
  product.optional_price = ""
438
- product.save.should be_true
438
+ product.save.should eq(true)
439
439
  product.optional_price.should be_nil
440
440
  end
441
441
 
@@ -526,7 +526,7 @@ if defined? ActiveRecord
526
526
 
527
527
  it "assigns correctly Money objects to the attribute" do
528
528
  transaction.amount = Money.new(2500, :eur)
529
- transaction.save.should be_true
529
+ transaction.save.should eq(true)
530
530
  transaction.amount.cents.should == Money.new(2500, :eur).cents
531
531
  transaction.amount.currency_as_string.should == "EUR"
532
532
  end
@@ -1,7 +1,4 @@
1
1
  class DummyProduct < ActiveRecord::Base
2
-
3
- attr_accessible :currency, :price_cents, :price
4
-
5
2
  # Use as model level currency
6
3
  register_currency :gbp
7
4
 
@@ -1,11 +1,4 @@
1
1
  class Product < ActiveRecord::Base
2
-
3
- attr_accessible :price_cents, :discount, :bonus_cents,
4
- :price, :discount_value, :bonus, :optional_price_cents, :optional_price,
5
- :sale_price, :sale_price_amount, :sale_price_currency_code,
6
- :price_in_a_range_cents, :price_in_a_range, :invalid_price_cents,
7
- :validates_method_amount, :validates_method_amount_cents
8
-
9
2
  # Use USD as model level currency
10
3
  register_currency :usd
11
4
 
@@ -1,7 +1,4 @@
1
1
  class Service < ActiveRecord::Base
2
-
3
- attr_accessible :charge_cents, :discount_cents, :charge, :discount
4
-
5
2
  monetize :charge_cents, :with_currency => :usd
6
3
 
7
4
  monetize :discount_cents
@@ -1,13 +1,11 @@
1
1
  class Transaction < ActiveRecord::Base
2
-
3
- attr_accessible :amount_cents, :currency, :tax_cents, :amount, :tax
4
-
5
2
  monetize :amount_cents, :with_model_currency => :currency
3
+
6
4
  monetize :tax_cents, :with_model_currency => :currency
7
5
 
8
6
  monetize :total_cents, :with_model_currency => :currency
7
+
9
8
  def total_cents
10
9
  return amount_cents + tax_cents
11
10
  end
12
-
13
11
  end
@@ -52,12 +52,6 @@ module Dummy
52
52
  # like if you have constraints or database-specific column types
53
53
  # config.active_record.schema_format = :sql
54
54
 
55
- # Enforce whitelist mode for mass assignment.
56
- # This will create an empty whitelist of attributes available for mass-assignment for all models
57
- # in your app. As such, your models will need to explicitly whitelist or blacklist accessible
58
- # parameters by using an attr_accessible or attr_protected declaration.
59
- config.active_record.whitelist_attributes = true
60
-
61
55
  # Enable the asset pipeline
62
56
  config.assets.enabled = true
63
57
 
@@ -6,8 +6,8 @@ Dummy::Application.configure do
6
6
  # since you don't have to restart the web server when you make code changes.
7
7
  config.cache_classes = false
8
8
 
9
- # Log error messages when you accidentally call methods on nil.
10
- config.whiny_nils = true
9
+ # Do not eager load code on boot.
10
+ config.eager_load = false
11
11
 
12
12
  # Show full error reports and disable caching
13
13
  config.consider_all_requests_local = true
@@ -22,13 +22,6 @@ Dummy::Application.configure do
22
22
  # Only use best-standards-support built into browsers
23
23
  config.action_dispatch.best_standards_support = :builtin
24
24
 
25
- # Raise exception on mass assignment protection for Active Record models
26
- config.active_record.mass_assignment_sanitizer = :strict
27
-
28
- # Log the query plan for queries taking more than this (works
29
- # with SQLite, MySQL, and PostgreSQL)
30
- config.active_record.auto_explain_threshold_in_seconds = 0.5
31
-
32
25
  # Do not compress assets
33
26
  config.assets.compress = false
34
27
 
@@ -4,6 +4,12 @@ Dummy::Application.configure do
4
4
  # Code is not reloaded between requests
5
5
  config.cache_classes = true
6
6
 
7
+ # Eager load code on boot. This eager loads most of Rails and
8
+ # your application in memory, allowing both threaded web servers
9
+ # and those relying on copy on write to perform better.
10
+ # Rake tasks automatically ignore this option for performance.
11
+ config.eager_load = true
12
+
7
13
  # Full error reports are disabled and caching is turned on
8
14
  config.consider_all_requests_local = false
9
15
  config.action_controller.perform_caching = true
@@ -60,8 +66,4 @@ Dummy::Application.configure do
60
66
 
61
67
  # Send deprecation notices to registered listeners
62
68
  config.active_support.deprecation = :notify
63
-
64
- # Log the query plan for queries taking more than this (works
65
- # with SQLite, MySQL, and PostgreSQL)
66
- # config.active_record.auto_explain_threshold_in_seconds = 0.5
67
69
  end
@@ -7,7 +7,11 @@ Dummy::Application.configure do
7
7
  # and recreated between test runs. Don't rely on the data there!
8
8
  config.cache_classes = true
9
9
 
10
+ # Do not eager load code on boot. This avoids loading your whole application
11
+ # just for the purpose of running a single test. If you are using a tool that
12
+ # preloads Rails for running tests, you may have to set it to true.
10
13
  config.eager_load = false
14
+
11
15
  # Configure static asset server for tests with Cache-Control for performance
12
16
  config.serve_static_assets = true
13
17
  config.static_cache_control = "public, max-age=3600"
@@ -27,9 +31,6 @@ Dummy::Application.configure do
27
31
  # ActionMailer::Base.deliveries array.
28
32
  config.action_mailer.delivery_method = :test
29
33
 
30
- # Raise exception on mass assignment protection for Active Record models
31
- config.active_record.mass_assignment_sanitizer = :strict
32
-
33
34
  # Print deprecation notices to the stderr
34
35
  config.active_support.deprecation = :stderr
35
36
  end
@@ -9,43 +9,43 @@
9
9
  # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
10
  # you'll amass, the slower it'll run and the greater likelihood for issues).
11
11
  #
12
- # It's strongly recommended that you check this file into your version control system.
12
+ # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20140110194016) do
14
+ ActiveRecord::Schema.define(:version => 20140110194016) do
15
15
 
16
- create_table "dummy_products", force: true do |t|
16
+ create_table "dummy_products", :force => true do |t|
17
17
  t.string "currency"
18
18
  t.integer "price_cents"
19
- t.datetime "created_at"
20
- t.datetime "updated_at"
19
+ t.datetime "created_at", :null => false
20
+ t.datetime "updated_at", :null => false
21
21
  end
22
22
 
23
- create_table "products", force: true do |t|
23
+ create_table "products", :force => true do |t|
24
24
  t.integer "price_cents"
25
25
  t.integer "discount"
26
- t.datetime "created_at"
27
- t.datetime "updated_at"
26
+ t.datetime "created_at", :null => false
27
+ t.datetime "updated_at", :null => false
28
28
  t.integer "bonus_cents"
29
29
  t.integer "optional_price_cents"
30
- t.integer "sale_price_amount", default: 0, null: false
30
+ t.integer "sale_price_amount", :default => 0, :null => false
31
31
  t.string "sale_price_currency_code"
32
32
  t.integer "price_in_a_range_cents"
33
33
  t.integer "validates_method_amount_cents"
34
34
  end
35
35
 
36
- create_table "services", force: true do |t|
36
+ create_table "services", :force => true do |t|
37
37
  t.integer "charge_cents"
38
38
  t.integer "discount_cents"
39
- t.datetime "created_at"
40
- t.datetime "updated_at"
39
+ t.datetime "created_at", :null => false
40
+ t.datetime "updated_at", :null => false
41
41
  end
42
42
 
43
- create_table "transactions", force: true do |t|
43
+ create_table "transactions", :force => true do |t|
44
44
  t.integer "amount_cents"
45
45
  t.integer "tax_cents"
46
46
  t.string "currency"
47
- t.datetime "created_at"
48
- t.datetime "updated_at"
47
+ t.datetime "created_at", :null => false
48
+ t.datetime "updated_at", :null => false
49
49
  end
50
50
 
51
51
  end
@@ -20,5 +20,6 @@ RSpec.configure do |config|
20
20
  # automatically. This will be the default behavior in future versions of
21
21
  # rspec-rails.
22
22
  config.infer_base_class_for_anonymous_controllers = false
23
+ config.infer_spec_type_from_file_location!
23
24
  config.treat_symbols_as_metadata_keys_with_true_values = true
24
25
  end
@@ -9,7 +9,7 @@ if defined? ActiveRecord
9
9
 
10
10
  let(:product) do
11
11
  Product.create(:price_cents => 3000, :discount => 150,
12
- :bonus_cents => 200, :optional_price => 100,
12
+ :bonus_cents => 200,
13
13
  :sale_price_amount => 1200)
14
14
  end
15
15
 
@@ -22,6 +22,10 @@ if defined? ActiveRecord
22
22
  product.should monetize(:discount).as(:discount_value)
23
23
  end
24
24
 
25
+ it "matches model attribute with nil value specified by :allow_nil chain" do
26
+ product.should monetize(:optional_price).allow_nil
27
+ end
28
+
25
29
  it "matches model attribute with currency specified by :with_currency chain" do
26
30
  product.should monetize(:bonus_cents).with_currency(:gbp)
27
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Loupasakis
@@ -10,106 +10,106 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-05-23 00:00:00.000000000 Z
13
+ date: 2014-06-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
+ prerelease: false
16
17
  name: money
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 6.1.1
17
23
  requirement: !ruby/object:Gem::Requirement
18
24
  requirements:
19
- - - "~>"
25
+ - - ~>
20
26
  - !ruby/object:Gem::Version
21
27
  version: 6.1.1
22
28
  type: :runtime
29
+ - !ruby/object:Gem::Dependency
23
30
  prerelease: false
31
+ name: monetize
24
32
  version_requirements: !ruby/object:Gem::Requirement
25
33
  requirements:
26
- - - "~>"
34
+ - - ~>
27
35
  - !ruby/object:Gem::Version
28
- version: 6.1.1
29
- - !ruby/object:Gem::Dependency
30
- name: monetize
36
+ version: 0.3.0
31
37
  requirement: !ruby/object:Gem::Requirement
32
38
  requirements:
33
- - - "~>"
39
+ - - ~>
34
40
  - !ruby/object:Gem::Version
35
41
  version: 0.3.0
36
42
  type: :runtime
43
+ - !ruby/object:Gem::Dependency
37
44
  prerelease: false
45
+ name: activesupport
38
46
  version_requirements: !ruby/object:Gem::Requirement
39
47
  requirements:
40
- - - "~>"
48
+ - - '>='
41
49
  - !ruby/object:Gem::Version
42
- version: 0.3.0
43
- - !ruby/object:Gem::Dependency
44
- name: activesupport
50
+ version: '3.0'
45
51
  requirement: !ruby/object:Gem::Requirement
46
52
  requirements:
47
- - - ">="
53
+ - - '>='
48
54
  - !ruby/object:Gem::Version
49
55
  version: '3.0'
50
56
  type: :runtime
57
+ - !ruby/object:Gem::Dependency
51
58
  prerelease: false
59
+ name: railties
52
60
  version_requirements: !ruby/object:Gem::Requirement
53
61
  requirements:
54
- - - ">="
62
+ - - '>='
55
63
  - !ruby/object:Gem::Version
56
64
  version: '3.0'
57
- - !ruby/object:Gem::Dependency
58
- name: railties
59
65
  requirement: !ruby/object:Gem::Requirement
60
66
  requirements:
61
- - - ">="
67
+ - - '>='
62
68
  - !ruby/object:Gem::Version
63
69
  version: '3.0'
64
70
  type: :runtime
71
+ - !ruby/object:Gem::Dependency
65
72
  prerelease: false
73
+ name: rails
66
74
  version_requirements: !ruby/object:Gem::Requirement
67
75
  requirements:
68
- - - ">="
76
+ - - '>='
69
77
  - !ruby/object:Gem::Version
70
78
  version: '3.0'
71
- - !ruby/object:Gem::Dependency
72
- name: rails
73
79
  requirement: !ruby/object:Gem::Requirement
74
80
  requirements:
75
- - - ">="
81
+ - - '>='
76
82
  - !ruby/object:Gem::Version
77
83
  version: '3.0'
78
84
  type: :development
85
+ - !ruby/object:Gem::Dependency
79
86
  prerelease: false
87
+ name: rspec-rails
80
88
  version_requirements: !ruby/object:Gem::Requirement
81
89
  requirements:
82
- - - ">="
90
+ - - ~>
83
91
  - !ruby/object:Gem::Version
84
- version: '3.0'
85
- - !ruby/object:Gem::Dependency
86
- name: rspec-rails
92
+ version: '2.10'
87
93
  requirement: !ruby/object:Gem::Requirement
88
94
  requirements:
89
- - - "~>"
95
+ - - ~>
90
96
  - !ruby/object:Gem::Version
91
97
  version: '2.10'
92
98
  type: :development
99
+ - !ruby/object:Gem::Dependency
93
100
  prerelease: false
101
+ name: database_cleaner
94
102
  version_requirements: !ruby/object:Gem::Requirement
95
103
  requirements:
96
- - - "~>"
104
+ - - '>='
97
105
  - !ruby/object:Gem::Version
98
- version: '2.10'
99
- - !ruby/object:Gem::Dependency
100
- name: database_cleaner
106
+ version: 0.8.0
101
107
  requirement: !ruby/object:Gem::Requirement
102
108
  requirements:
103
- - - ">="
109
+ - - '>='
104
110
  - !ruby/object:Gem::Version
105
111
  version: 0.8.0
106
112
  type: :development
107
- prerelease: false
108
- version_requirements: !ruby/object:Gem::Requirement
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- version: 0.8.0
113
113
  description: This library provides integration of RubyMoney - Money gem with Rails
114
114
  email:
115
115
  - alup.rubymoney@gmail.com
@@ -209,12 +209,12 @@ require_paths:
209
209
  - lib
210
210
  required_ruby_version: !ruby/object:Gem::Requirement
211
211
  requirements:
212
- - - ">="
212
+ - - '>='
213
213
  - !ruby/object:Gem::Version
214
214
  version: '0'
215
215
  required_rubygems_version: !ruby/object:Gem::Requirement
216
216
  requirements:
217
- - - ">="
217
+ - - '>='
218
218
  - !ruby/object:Gem::Version
219
219
  version: '0'
220
220
  requirements: []
@@ -282,3 +282,4 @@ test_files:
282
282
  - spec/spec_helper.rb
283
283
  - spec/support/database_cleaner.rb
284
284
  - spec/test_helpers_spec.rb
285
+ has_rdoc: