money-rails 0.9.0 → 0.10.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.
- data/CHANGELOG.md +1 -0
- data/README.md +42 -16
- data/Rakefile +29 -38
- data/lib/money-rails.rb +2 -0
- data/lib/money-rails/active_model/validator.rb +4 -1
- data/lib/money-rails/active_record/monetizable.rb +19 -6
- data/lib/money-rails/configuration.rb +18 -0
- data/lib/money-rails/mongoid/money.rb +6 -1
- data/lib/money-rails/mongoid/two.rb +6 -1
- data/lib/money-rails/version.rb +1 -1
- data/money-rails.gemspec +2 -1
- data/spec/active_record/monetizable_spec.rb +74 -0
- data/spec/configuration_spec.rb +18 -0
- data/spec/dummy/app/models/product.rb +9 -1
- data/spec/dummy/config/application.rb +5 -0
- data/spec/dummy/config/boot.rb +8 -5
- data/spec/dummy/config/environments/test.rb +1 -0
- data/spec/dummy/db/migrate/20140110194016_add_validates_method_amount_cents_to_products.rb +5 -0
- data/spec/dummy/db/schema.rb +16 -18
- data/spec/dummy/db/structure.sql +3 -1
- data/spec/mongoid/three_spec.rb +16 -0
- data/spec/mongoid/two_spec.rb +16 -0
- data/spec/spec_helper.rb +5 -1
- metadata +116 -99
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
# RubyMoney - Money-Rails [](http://coderwall.com/alup)
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/money-rails)
|
3
4
|
[](http://travis-ci.org/RubyMoney/money-rails)
|
4
5
|
[](https://gemnasium.com/RubyMoney/money-rails)
|
5
6
|
[](https://codeclimate.com/github/RubyMoney/money-rails)
|
7
|
+
[](http://opensource.org/licenses/MIT)
|
6
8
|
|
7
9
|
## Introduction
|
8
10
|
|
@@ -40,17 +42,6 @@ $ rails g money_rails:initializer
|
|
40
42
|
There, you can define the default currency value and set other
|
41
43
|
configuration parameters for the rails app.
|
42
44
|
|
43
|
-
### Setup for money-rails development
|
44
|
-
|
45
|
-
Our tests are executed with several ORMs - see `Rakefile` for details. To install all required gems run these:
|
46
|
-
|
47
|
-
bundle install --gemfile=gemfiles/mongoid2.gemfile
|
48
|
-
bundle install --gemfile=gemfiles/mongoid3.gemfile
|
49
|
-
bundle install --gemfile=gemfiles/rails3.gemfile
|
50
|
-
bundle install --gemfile=gemfiles/rails4.gemfile
|
51
|
-
|
52
|
-
Then you can run the test suite with `rake`,
|
53
|
-
|
54
45
|
## Usage
|
55
46
|
|
56
47
|
### ActiveRecord
|
@@ -292,8 +283,9 @@ currency, whereas ```product.discount.currency_as_string # => EUR ```
|
|
292
283
|
All the previous options do not require any extra model field to hold
|
293
284
|
currency values. If you need to provide differrent currency per model
|
294
285
|
instance, then you need to add a column with the name ```currency```
|
295
|
-
in your db table.
|
296
|
-
|
286
|
+
in your db table. You should specify ```with_model_currency``` as an argument
|
287
|
+
to the ```monetize``` macro.
|
288
|
+
Money-rails will use this knowledge to override the model level and global
|
297
289
|
default values. Non-nil instance currency values also override attribute
|
298
290
|
currency values, so they have the highest precedence.
|
299
291
|
|
@@ -306,8 +298,8 @@ class Transaction < ActiveRecord::Base
|
|
306
298
|
# Use model level currency
|
307
299
|
register_currency :gbp
|
308
300
|
|
309
|
-
monetize :amount_cents
|
310
|
-
monetize :tax_cents
|
301
|
+
monetize :amount_cents, with_model_currency: :amount_currency
|
302
|
+
monetize :tax_cents, with_model_currency: :tax_currency
|
311
303
|
|
312
304
|
end
|
313
305
|
|
@@ -371,6 +363,21 @@ MoneyRails.configure do |config|
|
|
371
363
|
# :decimal_mark => ","
|
372
364
|
# }
|
373
365
|
|
366
|
+
# Specify a rounding mode
|
367
|
+
# Any one of:
|
368
|
+
#
|
369
|
+
# BigDecimal::ROUND_UP,
|
370
|
+
# BigDecimal::ROUND_DOWN,
|
371
|
+
# BigDecimal::ROUND_HALF_UP,
|
372
|
+
# BigDecimal::ROUND_HALF_DOWN,
|
373
|
+
# BigDecimal::ROUND_HALF_EVEN,
|
374
|
+
# BigDecimal::ROUND_CEILING,
|
375
|
+
# BigDecimal::ROUND_FLOOR
|
376
|
+
#
|
377
|
+
# set to BigDecimal::ROUND_HALF_EVEN by default
|
378
|
+
#
|
379
|
+
config.rounding_mode = BigDecimal::ROUND_HALF_UP
|
380
|
+
|
374
381
|
# Set money formatted output globally.
|
375
382
|
# Default value is nil meaning "ignore this option".
|
376
383
|
# Options are nil, true, false.
|
@@ -399,6 +406,7 @@ end
|
|
399
406
|
* ```sign_before_symbol```: Force `Money#format` to place the negative sign before the currency symbol.
|
400
407
|
* ```amount_column```: Provide values for the amount column (holding the fractional part of a money object).
|
401
408
|
* ```currency_column```: Provide default values or even disable (`present: false`) the currency column.
|
409
|
+
* ```rounding_mode```: Set Money.rounding_mode to one of the BigDecimal constants
|
402
410
|
|
403
411
|
### Helpers
|
404
412
|
|
@@ -484,6 +492,24 @@ For examples on using the test_helpers look at
|
|
484
492
|
|
485
493
|
You can see a full list of the currently supported interpreters in [travis.yml](http://github.com/RubyMoney/money-rails/blob/master/.travis.yml)
|
486
494
|
|
495
|
+
## Contributing
|
496
|
+
|
497
|
+
### Steps
|
498
|
+
|
499
|
+
1. Fork the repo
|
500
|
+
2. Run the tests
|
501
|
+
3. Make your changes
|
502
|
+
4. Test your changes
|
503
|
+
5. Create a Pull Request
|
504
|
+
|
505
|
+
### How to run the tests
|
506
|
+
|
507
|
+
Our tests are executed with several ORMs - see `Rakefile` for details. To install all required gems run `rake spec:all` That command will take care of installing all required gems for all the different Gemfiles and then running the test suite with the installed bundle.
|
508
|
+
|
509
|
+
You can also run the test suite against a specific ORM or Rails version, `rake -T` will give you an idea of the possible task (take a look at the tasks under the spec: namespace).
|
510
|
+
|
511
|
+
If you are testing against mongoid, make sure to have the mongod process running before executing the suite, (E.g. `sudo mongod --quiet`)
|
512
|
+
|
487
513
|
## Maintainers
|
488
514
|
|
489
515
|
* Andreas Loupasakis (https://github.com/alup)
|
@@ -492,4 +518,4 @@ You can see a full list of the currently supported interpreters in [travis.yml](
|
|
492
518
|
|
493
519
|
## License
|
494
520
|
|
495
|
-
MIT License. Copyright 2012-
|
521
|
+
MIT License. Copyright 2012-2014 RubyMoney.
|
data/Rakefile
CHANGED
@@ -11,6 +11,10 @@ rescue Bundler::BundlerError => e
|
|
11
11
|
exit e.status_code
|
12
12
|
end
|
13
13
|
|
14
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
15
|
+
|
16
|
+
load 'rails/tasks/engine.rake' if File.exists?(APP_RAKEFILE)
|
17
|
+
|
14
18
|
require 'rake'
|
15
19
|
require 'rspec/core/rake_task'
|
16
20
|
|
@@ -18,56 +22,43 @@ RSpec::Core::RakeTask.new
|
|
18
22
|
|
19
23
|
task :default => "spec:all"
|
20
24
|
task :test => :spec
|
25
|
+
task :spec => :prepare_test_env
|
26
|
+
|
27
|
+
desc "Prepare money-rails engine test environment"
|
28
|
+
task :prepare_test_env do
|
29
|
+
Rake.application['app:db:drop:all'].invoke
|
30
|
+
Rake.application['app:db:migrate'].invoke
|
31
|
+
Rake.application['app:db:test:prepare'].invoke
|
32
|
+
end
|
33
|
+
|
34
|
+
def run_with_gemfile(gemfile)
|
35
|
+
sh "BUNDLE_GEMFILE='#{gemfile}' bundle install --quiet"
|
36
|
+
sh "BUNDLE_GEMFILE='#{gemfile}' bundle exec rake -t spec"
|
37
|
+
end
|
21
38
|
|
22
39
|
namespace :spec do
|
40
|
+
|
23
41
|
desc "Run Tests against mongoid (version 3)"
|
24
|
-
task
|
25
|
-
sh "BUNDLE_GEMFILE='gemfiles/mongoid3.gemfile' bundle --quiet"
|
26
|
-
sh "BUNDLE_GEMFILE='gemfiles/mongoid3.gemfile' bundle exec rake -t spec"
|
27
|
-
end
|
42
|
+
task(:mongoid3) { run_with_gemfile 'gemfiles/mongoid3.gemfile' }
|
28
43
|
|
29
44
|
desc "Run Tests against mongoid (version 2)"
|
30
|
-
task
|
31
|
-
sh "BUNDLE_GEMFILE='gemfiles/mongoid2.gemfile' bundle --quiet"
|
32
|
-
sh "BUNDLE_GEMFILE='gemfiles/mongoid2.gemfile' bundle exec rake -t spec"
|
33
|
-
end
|
45
|
+
task(:mongoid2) { run_with_gemfile 'gemfiles/mongoid2.gemfile' }
|
34
46
|
|
35
47
|
desc "Run Tests against rails 4"
|
36
|
-
task
|
37
|
-
sh "BUNDLE_GEMFILE='gemfiles/rails4.gemfile' bundle --quiet"
|
38
|
-
sh "BUNDLE_GEMFILE='gemfiles/rails4.gemfile' bundle exec rake -t spec"
|
39
|
-
end
|
48
|
+
task(:rails4) { run_with_gemfile 'gemfiles/rails4.gemfile' }
|
40
49
|
|
41
50
|
desc "Run Tests against rails 3"
|
42
|
-
task
|
43
|
-
sh "BUNDLE_GEMFILE='gemfiles/rails3.gemfile' bundle --quiet"
|
44
|
-
sh "BUNDLE_GEMFILE='gemfiles/rails3.gemfile' bundle exec rake -t spec"
|
45
|
-
end
|
51
|
+
task(:rails3) { run_with_gemfile 'gemfiles/rails3.gemfile' }
|
46
52
|
|
47
|
-
desc "Run Tests against
|
48
|
-
task :
|
49
|
-
|
50
|
-
|
51
|
-
|
53
|
+
desc "Run Tests against mongoid 2 & 3"
|
54
|
+
task :mongoid => [:mongoid2, :mongoid3]
|
55
|
+
|
56
|
+
desc "Run Tests against rails 3 & 4"
|
57
|
+
task :rails => [:rails3, :rails4]
|
52
58
|
|
53
59
|
desc "Run Tests against all ORMs"
|
54
|
-
task :all
|
55
|
-
|
56
|
-
sh "BUNDLE_GEMFILE='gemfiles/mongoid3.gemfile' bundle --quiet"
|
57
|
-
sh "BUNDLE_GEMFILE='gemfiles/mongoid3.gemfile' bundle exec rake -t spec"
|
58
|
-
|
59
|
-
# Mongoid 2
|
60
|
-
sh "BUNDLE_GEMFILE='gemfiles/mongoid2.gemfile' bundle --quiet"
|
61
|
-
sh "BUNDLE_GEMFILE='gemfiles/mongoid2.gemfile' bundle exec rake -t spec"
|
62
|
-
|
63
|
-
# rails 4
|
64
|
-
sh "BUNDLE_GEMFILE='gemfiles/rails4.gemfile' bundle --quiet"
|
65
|
-
sh "BUNDLE_GEMFILE='gemfiles/rails4.gemfile' bundle exec rake -t spec"
|
66
|
-
|
67
|
-
# rails 3
|
68
|
-
sh "BUNDLE_GEMFILE='gemfiles/rails3.gemfile' bundle --quiet"
|
69
|
-
sh "BUNDLE_GEMFILE='gemfiles/rails3.gemfile' bundle exec rake -t spec"
|
70
|
-
end
|
60
|
+
task :all => [:rails, :mongoid]
|
61
|
+
|
71
62
|
end
|
72
63
|
|
73
64
|
desc "Update CONTRIBUTORS file"
|
data/lib/money-rails.rb
CHANGED
@@ -39,7 +39,7 @@ module MoneyRails
|
|
39
39
|
symbol = I18n.t('number.currency.format.unit', default: currency.symbol)
|
40
40
|
|
41
41
|
raw_value = raw_value.to_s.strip.gsub(symbol, "")
|
42
|
-
abs_raw_value = raw_value.gsub(/^-/, "")
|
42
|
+
abs_raw_value = raw_value.strip.gsub(/^-/, "")
|
43
43
|
|
44
44
|
decimal_pieces = abs_raw_value.split(decimal_mark)
|
45
45
|
|
@@ -78,3 +78,6 @@ module MoneyRails
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
81
|
+
|
82
|
+
# Compatibility with ActiveModel validates method which matches option keys to their validator class
|
83
|
+
ActiveModel::Validations::MoneyValidator = MoneyRails::ActiveModel::MoneyValidator
|
@@ -140,22 +140,35 @@ module MoneyRails
|
|
140
140
|
if options[:allow_nil] && value.blank?
|
141
141
|
money = nil
|
142
142
|
else
|
143
|
-
|
144
|
-
money = value
|
145
|
-
|
146
|
-
|
143
|
+
if value.is_a?(Money)
|
144
|
+
money = value
|
145
|
+
else
|
146
|
+
begin
|
147
|
+
money = value.to_money(send("currency_for_#{name}"))
|
148
|
+
rescue NoMethodError
|
149
|
+
return nil
|
150
|
+
rescue ArgumentError
|
151
|
+
raise if MoneyRails.raise_error_on_money_parsing
|
152
|
+
return nil
|
153
|
+
end
|
147
154
|
end
|
148
155
|
end
|
149
156
|
|
150
157
|
# Update cents
|
151
158
|
send("#{subunit_name}=", money.try(:cents))
|
152
159
|
|
160
|
+
money_currency = money.try(:currency)
|
161
|
+
|
153
162
|
# Update currency iso value if there is an instance currency attribute
|
154
163
|
if instance_currency_name.present? &&
|
155
164
|
self.respond_to?("#{instance_currency_name}=")
|
156
165
|
|
157
|
-
send("#{instance_currency_name}=",
|
158
|
-
|
166
|
+
send("#{instance_currency_name}=", money_currency.try(:iso_code))
|
167
|
+
else
|
168
|
+
current_currency = send("currency_for_#{name}")
|
169
|
+
if money_currency && current_currency != money_currency
|
170
|
+
raise "Can't change readonly currency '#{current_currency}' to '#{money_currency}' for field '#{name}'"
|
171
|
+
end
|
159
172
|
end
|
160
173
|
|
161
174
|
# Save and return the new Money object
|
@@ -45,6 +45,19 @@ module MoneyRails
|
|
45
45
|
currency_column.merge! default: iso_code
|
46
46
|
end
|
47
47
|
|
48
|
+
def rounding_mode=(mode)
|
49
|
+
valid_modes = [
|
50
|
+
BigDecimal::ROUND_UP,
|
51
|
+
BigDecimal::ROUND_DOWN,
|
52
|
+
BigDecimal::ROUND_HALF_UP,
|
53
|
+
BigDecimal::ROUND_HALF_DOWN,
|
54
|
+
BigDecimal::ROUND_HALF_EVEN,
|
55
|
+
BigDecimal::ROUND_CEILING,
|
56
|
+
BigDecimal::ROUND_FLOOR
|
57
|
+
]
|
58
|
+
raise ArgumentError, "#{mode} is not a valid rounding mode" unless valid_modes.include?(mode)
|
59
|
+
Money.rounding_mode = mode
|
60
|
+
end
|
48
61
|
# Set default bank object
|
49
62
|
#
|
50
63
|
# example (given that eu_central_bank is in Gemfile):
|
@@ -76,5 +89,10 @@ module MoneyRails
|
|
76
89
|
|
77
90
|
mattr_accessor :sign_before_symbol
|
78
91
|
@@sign_before_symbol = nil
|
92
|
+
|
93
|
+
# Configure whether to raise exception when an improper value
|
94
|
+
# is going to be converted to a Money object.
|
95
|
+
mattr_accessor :raise_error_on_money_parsing
|
96
|
+
@@raise_error_on_money_parsing = false
|
79
97
|
end
|
80
98
|
end
|
@@ -3,7 +3,7 @@ class Money
|
|
3
3
|
# Converts an object of this instance into a database friendly value.
|
4
4
|
def mongoize
|
5
5
|
{
|
6
|
-
:cents => cents.mongoize,
|
6
|
+
:cents => cents.mongoize.to_f,
|
7
7
|
:currency_iso => currency.iso_code.mongoize
|
8
8
|
}
|
9
9
|
end
|
@@ -30,7 +30,12 @@ class Money
|
|
30
30
|
object.symbolize_keys! if object.respond_to?(:symbolize_keys!)
|
31
31
|
::Money.new(object[:cents], object[:currency_iso]).mongoize
|
32
32
|
when object.respond_to?(:to_money) then
|
33
|
+
begin
|
33
34
|
object.to_money.mongoize
|
35
|
+
rescue ArgumentError
|
36
|
+
raise if MoneyRails.raise_error_on_money_parsing
|
37
|
+
nil
|
38
|
+
end
|
34
39
|
else object
|
35
40
|
end
|
36
41
|
end
|
@@ -22,7 +22,12 @@ class Money
|
|
22
22
|
:currency_iso => object.currency.iso_code
|
23
23
|
}
|
24
24
|
when object.respond_to?(:to_money)
|
25
|
-
|
25
|
+
begin
|
26
|
+
serialize(object.to_money)
|
27
|
+
rescue ArgumentError
|
28
|
+
raise if MoneyRails.raise_error_on_money_parsing
|
29
|
+
nil
|
30
|
+
end
|
26
31
|
else nil
|
27
32
|
end
|
28
33
|
end
|
data/lib/money-rails/version.rb
CHANGED
data/money-rails.gemspec
CHANGED
@@ -26,7 +26,8 @@ Gem::Specification.new do |s|
|
|
26
26
|
|
27
27
|
s.require_path = "lib"
|
28
28
|
|
29
|
-
s.add_dependency "money", "~> 6.
|
29
|
+
s.add_dependency "money", "~> 6.1.1"
|
30
|
+
s.add_dependency "monetize", "~> 0.3.0"
|
30
31
|
s.add_dependency "activesupport", ">= 3.0"
|
31
32
|
s.add_dependency "railties", ">= 3.0"
|
32
33
|
|
@@ -47,6 +47,13 @@ if defined? ActiveRecord
|
|
47
47
|
product.price_cents.should == 215
|
48
48
|
end
|
49
49
|
|
50
|
+
it "should raise error if can't change currency" do
|
51
|
+
product = Product.new
|
52
|
+
expect {
|
53
|
+
product.price = Money.new(10, "RUB")
|
54
|
+
}.to raise_error("Can't change readonly currency 'USD' to 'RUB' for field 'price'")
|
55
|
+
end
|
56
|
+
|
50
57
|
it "respects :as argument" do
|
51
58
|
product.discount_value.should == Money.new(150, "USD")
|
52
59
|
end
|
@@ -64,6 +71,21 @@ if defined? ActiveRecord
|
|
64
71
|
product.save.should be_true
|
65
72
|
end
|
66
73
|
|
74
|
+
context "when MoneyRails.raise_error_on_money_parsing is true" do
|
75
|
+
before { MoneyRails.raise_error_on_money_parsing = true }
|
76
|
+
after { MoneyRails.raise_error_on_money_parsing = false }
|
77
|
+
|
78
|
+
it "raises exception when a String value with hyphen is assigned" do
|
79
|
+
expect { product.invalid_price = "10-235" }.to raise_error
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "when MoneyRails.raise_error_on_money_parsing is false (default)" do
|
84
|
+
it "does not raise exception when a String value with hyphen is assigned" do
|
85
|
+
expect { product.invalid_price = "10-235" }.not_to raise_error
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
67
89
|
it "respects numericality validation when using update_attributes" do
|
68
90
|
product.update_attributes(:price_cents => "some text").should be_false
|
69
91
|
product.update_attributes(:price_cents => 2000).should be_true
|
@@ -143,6 +165,34 @@ if defined? ActiveRecord
|
|
143
165
|
product.errors[:price_in_a_range].first.should match(/Must be greater than zero and less than \$100/)
|
144
166
|
end
|
145
167
|
|
168
|
+
it "fails validation with the proper error message using validates :money" do
|
169
|
+
product.validates_method_amount = "-12"
|
170
|
+
product.valid?.should be_false
|
171
|
+
product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
|
172
|
+
|
173
|
+
product.validates_method_amount = Money.new(-1200, "USD")
|
174
|
+
product.valid?.should be_false
|
175
|
+
product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
|
176
|
+
|
177
|
+
product.validates_method_amount = "0"
|
178
|
+
product.valid?.should be_false
|
179
|
+
product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
|
180
|
+
|
181
|
+
product.validates_method_amount = "12"
|
182
|
+
product.valid?.should be_true
|
183
|
+
|
184
|
+
product.validates_method_amount = Money.new(1200, "USD")
|
185
|
+
product.valid?.should be_true
|
186
|
+
|
187
|
+
product.validates_method_amount = "101"
|
188
|
+
product.valid?.should be_false
|
189
|
+
product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
|
190
|
+
|
191
|
+
product.validates_method_amount = Money.new(10100, "USD")
|
192
|
+
product.valid?.should be_false
|
193
|
+
product.errors[:validates_method_amount].first.should match(/Must be greater than zero and less than \$100/)
|
194
|
+
end
|
195
|
+
|
146
196
|
it "fails validation with the proper error message on the cents field " do
|
147
197
|
product.price_in_a_range = "-12"
|
148
198
|
product.valid?.should be_false
|
@@ -195,6 +245,11 @@ if defined? ActiveRecord
|
|
195
245
|
product.save.should be_true
|
196
246
|
end
|
197
247
|
|
248
|
+
it "passes validation if there is a whitespace between the currency symbol and amount" do
|
249
|
+
product.price = "$ 123,456.78"
|
250
|
+
product.save.should be_true
|
251
|
+
end
|
252
|
+
|
198
253
|
it "respects numericality validation when using update_attributes on money attribute" do
|
199
254
|
product.update_attributes(:price => "some text").should be_false
|
200
255
|
product.update_attributes(:price => Money.new(320, 'USD')).should be_true
|
@@ -389,11 +444,30 @@ if defined? ActiveRecord
|
|
389
444
|
product = Product.create(:sale_price_amount => 1234)
|
390
445
|
product.sale_price.currency_as_string == 'USD'
|
391
446
|
end
|
447
|
+
|
392
448
|
it "is overridden by instance currency column" do
|
393
449
|
product = Product.create(:sale_price_amount => 1234,
|
394
450
|
:sale_price_currency_code => 'CAD')
|
395
451
|
product.sale_price.currency_as_string.should == 'CAD'
|
396
452
|
end
|
453
|
+
|
454
|
+
it 'can change currency of custom column' do
|
455
|
+
product = Product.create!(
|
456
|
+
:price => Money.new(10,'USD'),
|
457
|
+
:bonus => Money.new(10,'GBP'),
|
458
|
+
:discount => 10,
|
459
|
+
:sale_price_amount => 1234,
|
460
|
+
:sale_price_currency_code => 'USD')
|
461
|
+
|
462
|
+
product.sale_price.currency_as_string.should == 'USD'
|
463
|
+
|
464
|
+
product.sale_price = Money.new 456, 'CAD'
|
465
|
+
product.save
|
466
|
+
product.reload
|
467
|
+
|
468
|
+
product.sale_price.currency_as_string.should == 'CAD'
|
469
|
+
product.discount_value.currency_as_string.should == 'USD'
|
470
|
+
end
|
397
471
|
end
|
398
472
|
|
399
473
|
context "for model with currency column:" do
|
data/spec/configuration_spec.rb
CHANGED
@@ -106,5 +106,23 @@ describe "configuration" do
|
|
106
106
|
MoneyRails.default_bank = old_bank
|
107
107
|
end
|
108
108
|
|
109
|
+
describe "rounding mode" do
|
110
|
+
[BigDecimal::ROUND_UP, BigDecimal::ROUND_DOWN, BigDecimal::ROUND_HALF_UP, BigDecimal::ROUND_HALF_DOWN,
|
111
|
+
BigDecimal::ROUND_HALF_EVEN, BigDecimal::ROUND_CEILING, BigDecimal::ROUND_FLOOR].each do |mode|
|
112
|
+
context "when set to #{mode}" do
|
113
|
+
it "sets Money.rounding mode to #{mode}" do
|
114
|
+
MoneyRails.rounding_mode = mode
|
115
|
+
expect(Money.rounding_mode).to eq(mode)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context "when passed an invalid value" do
|
121
|
+
it "should raise an ArgumentError" do
|
122
|
+
expect(lambda{MoneyRails.rounding_mode = "booyakasha"}).to raise_error(ArgumentError, 'booyakasha is not a valid rounding mode')
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
109
127
|
end
|
110
128
|
end
|
@@ -3,7 +3,8 @@ class Product < ActiveRecord::Base
|
|
3
3
|
attr_accessible :price_cents, :discount, :bonus_cents,
|
4
4
|
:price, :discount_value, :bonus, :optional_price_cents, :optional_price,
|
5
5
|
:sale_price, :sale_price_amount, :sale_price_currency_code,
|
6
|
-
:price_in_a_range_cents, :price_in_a_range, :invalid_price_cents
|
6
|
+
:price_in_a_range_cents, :price_in_a_range, :invalid_price_cents,
|
7
|
+
:validates_method_amount, :validates_method_amount_cents
|
7
8
|
|
8
9
|
# Use USD as model level currency
|
9
10
|
register_currency :usd
|
@@ -38,4 +39,11 @@ class Product < ActiveRecord::Base
|
|
38
39
|
attr_accessor :invalid_price_cents
|
39
40
|
monetize :invalid_price_cents, disable_validation: true
|
40
41
|
|
42
|
+
monetize :validates_method_amount_cents, allow_nil: true
|
43
|
+
|
44
|
+
validates :validates_method_amount, :money => {
|
45
|
+
:greater_than => 0,
|
46
|
+
:less_than_or_equal_to => 100,
|
47
|
+
:message => 'Must be greater than zero and less than $100',
|
48
|
+
}
|
41
49
|
end
|
@@ -14,6 +14,9 @@ require "money-rails"
|
|
14
14
|
|
15
15
|
module Dummy
|
16
16
|
class Application < Rails::Application
|
17
|
+
|
18
|
+
I18n.enforce_available_locales = false # removes deprecation warning
|
19
|
+
|
17
20
|
# Settings in config/environments/* take precedence over those specified here.
|
18
21
|
# Application configuration should go into files in config/initializers
|
19
22
|
# -- all .rb files in that directory are automatically loaded.
|
@@ -39,6 +42,8 @@ module Dummy
|
|
39
42
|
# Configure the default encoding used in templates for Ruby 1.9.
|
40
43
|
config.encoding = "utf-8"
|
41
44
|
|
45
|
+
config.secret_key_base = "1234567890" # removes deprecation warning
|
46
|
+
|
42
47
|
# Configure sensitive parameters which will be filtered from the log file.
|
43
48
|
config.filter_parameters += [:password]
|
44
49
|
|
data/spec/dummy/config/boot.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
gemfile = File.expand_path('../../../../Gemfile', __FILE__)
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
# The default gemfile is rails4
|
4
|
+
gemfile = File.expand_path('../../../../gemfiles/rails4.gemfile', __FILE__)
|
5
|
+
|
6
|
+
unless ENV['BUNDLE_GEMFILE']
|
7
|
+
puts "No Gemfile specified, booting rails env with rails4.gemfile (default)"
|
8
|
+
ENV['BUNDLE_GEMFILE'] ||= gemfile
|
8
9
|
end
|
9
10
|
|
11
|
+
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
|
12
|
+
|
10
13
|
$:.unshift File.expand_path('../../../../lib', __FILE__)
|
@@ -7,6 +7,7 @@ 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
|
+
config.eager_load = false
|
10
11
|
# Configure static asset server for tests with Cache-Control for performance
|
11
12
|
config.serve_static_assets = true
|
12
13
|
config.static_cache_control = "public, max-age=3600"
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -9,45 +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
|
12
|
+
# It's strongly recommended that you check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:
|
14
|
+
ActiveRecord::Schema.define(version: 20140110194016) do
|
15
15
|
|
16
|
-
create_table "dummy_products", :
|
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"
|
20
|
+
t.datetime "updated_at"
|
21
21
|
end
|
22
22
|
|
23
|
-
create_table "
|
24
|
-
end
|
25
|
-
|
26
|
-
create_table "products", :force => true do |t|
|
23
|
+
create_table "products", force: true do |t|
|
27
24
|
t.integer "price_cents"
|
28
25
|
t.integer "discount"
|
29
|
-
t.datetime "created_at"
|
30
|
-
t.datetime "updated_at"
|
26
|
+
t.datetime "created_at"
|
27
|
+
t.datetime "updated_at"
|
31
28
|
t.integer "bonus_cents"
|
32
29
|
t.integer "optional_price_cents"
|
33
|
-
t.integer "sale_price_amount",
|
30
|
+
t.integer "sale_price_amount", default: 0, null: false
|
34
31
|
t.string "sale_price_currency_code"
|
35
32
|
t.integer "price_in_a_range_cents"
|
33
|
+
t.integer "validates_method_amount_cents"
|
36
34
|
end
|
37
35
|
|
38
|
-
create_table "services", :
|
36
|
+
create_table "services", force: true do |t|
|
39
37
|
t.integer "charge_cents"
|
40
38
|
t.integer "discount_cents"
|
41
|
-
t.datetime "created_at"
|
42
|
-
t.datetime "updated_at"
|
39
|
+
t.datetime "created_at"
|
40
|
+
t.datetime "updated_at"
|
43
41
|
end
|
44
42
|
|
45
|
-
create_table "transactions", :
|
43
|
+
create_table "transactions", force: true do |t|
|
46
44
|
t.integer "amount_cents"
|
47
45
|
t.integer "tax_cents"
|
48
46
|
t.string "currency"
|
49
|
-
t.datetime "created_at"
|
50
|
-
t.datetime "updated_at"
|
47
|
+
t.datetime "created_at"
|
48
|
+
t.datetime "updated_at"
|
51
49
|
end
|
52
50
|
|
53
51
|
end
|
data/spec/dummy/db/structure.sql
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
CREATE TABLE "dummy_products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "currency" varchar(255), "price_cents" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
|
2
|
-
CREATE TABLE "products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "price_cents" integer, "discount" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "bonus_cents" integer, "optional_price_cents" integer, "price_in_a_range_cents" integer);
|
2
|
+
CREATE TABLE "products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "price_cents" integer, "discount" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "bonus_cents" integer, "optional_price_cents" integer, "sale_price_amount" integer DEFAULT 0 NOT NULL, "sale_price_currency_code" varchar(255), "price_in_a_range_cents" integer);
|
3
3
|
CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
|
4
4
|
CREATE TABLE "services" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "charge_cents" integer, "discount_cents" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
|
5
5
|
CREATE TABLE "transactions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "amount_cents" integer, "tax_cents" integer, "currency" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
|
@@ -16,4 +16,6 @@ INSERT INTO schema_migrations (version) VALUES ('20120528210103');
|
|
16
16
|
|
17
17
|
INSERT INTO schema_migrations (version) VALUES ('20120607210247');
|
18
18
|
|
19
|
+
INSERT INTO schema_migrations (version) VALUES ('20120712202655');
|
20
|
+
|
19
21
|
INSERT INTO schema_migrations (version) VALUES ('20130124023419');
|
data/spec/mongoid/three_spec.rb
CHANGED
@@ -10,6 +10,7 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^3(.*)/
|
|
10
10
|
let!(:priceable_from_hash_with_indifferent_access) {
|
11
11
|
Priceable.create(:price => {:cents=>100, :currency_iso=>"EUR"}.with_indifferent_access)
|
12
12
|
}
|
13
|
+
let(:priceable_from_string_with_hyphen) { Priceable.create(:price => '1-2 EUR' )}
|
13
14
|
let(:priceable_with_infinite_precision) { Priceable.create(:price => Money.new(BigDecimal.new('100.1'), 'EUR')) }
|
14
15
|
let(:priceable_with_hash_field) {
|
15
16
|
Priceable.create(:price_hash => {
|
@@ -34,6 +35,21 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^3(.*)/
|
|
34
35
|
priceable_from_string.price.currency.should == Money::Currency.find('EUR')
|
35
36
|
end
|
36
37
|
|
38
|
+
context "when MoneyRails.raise_error_on_money_parsing is true" do
|
39
|
+
before { MoneyRails.raise_error_on_money_parsing = true }
|
40
|
+
after { MoneyRails.raise_error_on_money_parsing = false }
|
41
|
+
|
42
|
+
it "raises exception if the mongoized value is a String with a hyphen" do
|
43
|
+
expect { priceable_from_string_with_hyphen }.to raise_error
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "when MoneyRails.raise_error_on_money_parsing is false" do
|
48
|
+
it "does not mongoizes correctly a String with hyphen in its middle" do
|
49
|
+
priceable_from_string_with_hyphen.price.should == nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
37
53
|
it "mongoizes correctly a hash of cents and currency" do
|
38
54
|
priceable_from_hash.price.cents.should == 100
|
39
55
|
priceable_from_hash.price.currency.should == Money::Currency.find('EUR')
|
data/spec/mongoid/two_spec.rb
CHANGED
@@ -7,6 +7,7 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^2(.*)/
|
|
7
7
|
let(:priceable_from_num) { Priceable.create(:price => 1) }
|
8
8
|
let(:priceable_from_string) { Priceable.create(:price => '1 EUR' )}
|
9
9
|
let(:priceable_with_infinite_precision) { Priceable.create(:price => Money.new(BigDecimal.new('100.1'), 'EUR')) }
|
10
|
+
let(:priceable_from_string_with_hyphen) { Priceable.create(:price => '1-2 EUR' )}
|
10
11
|
|
11
12
|
context "serialize" do
|
12
13
|
it "serializes correctly a Money object to a hash of cents and currency" do
|
@@ -38,6 +39,21 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^2(.*)/
|
|
38
39
|
priceable_with_infinite_precision.price.currency.should == Money::Currency.find('EUR')
|
39
40
|
end
|
40
41
|
end
|
42
|
+
|
43
|
+
context "when MoneyRails.raise_error_on_money_parsing is true" do
|
44
|
+
before { MoneyRails.raise_error_on_money_parsing = true }
|
45
|
+
after { MoneyRails.raise_error_on_money_parsing = false }
|
46
|
+
|
47
|
+
it "raises exception if the mongoized value is a String with a hyphen" do
|
48
|
+
expect { priceable_from_string_with_hyphen }.to raise_error
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "when MoneyRails.raise_error_on_money_parsing is false" do
|
53
|
+
it "does not mongoizes correctly a String with hyphen in its middle" do
|
54
|
+
priceable_from_string_with_hyphen.price.should == nil
|
55
|
+
end
|
56
|
+
end
|
41
57
|
end
|
42
58
|
|
43
59
|
context "deserialize" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
ENV["RAILS_ENV"] = 'test'
|
2
|
-
|
3
2
|
# Require dummy Rails app
|
4
3
|
require File.expand_path("../../spec/dummy/config/environment", __FILE__)
|
5
4
|
|
@@ -11,6 +10,11 @@ require 'rspec/autorun'
|
|
11
10
|
# in spec/support/ and its subdirectories.
|
12
11
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
13
12
|
|
13
|
+
# Silence warnings
|
14
|
+
if Money.respond_to?(:silence_core_extensions_deprecations=)
|
15
|
+
Money.silence_core_extensions_deprecations = true
|
16
|
+
end
|
17
|
+
|
14
18
|
RSpec.configure do |config|
|
15
19
|
# If true, the base class of anonymous controllers will be inferred
|
16
20
|
# automatically. This will be the default behavior in future versions of
|
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.
|
4
|
+
version: 0.10.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2014-04-23 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: money
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 6.
|
23
|
+
version: 6.1.1
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -28,7 +28,23 @@ dependencies:
|
|
28
28
|
requirements:
|
29
29
|
- - ~>
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version: 6.
|
31
|
+
version: 6.1.1
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: monetize
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.3.0
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.3.0
|
32
48
|
- !ruby/object:Gem::Dependency
|
33
49
|
name: activesupport
|
34
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,77 +135,78 @@ files:
|
|
119
135
|
- lib/money-rails.rb
|
120
136
|
- lib/generators/templates/money.rb
|
121
137
|
- lib/generators/money_rails/initializer_generator.rb
|
122
|
-
- lib/money-rails/helpers/action_view_extension.rb
|
123
|
-
- lib/money-rails/version.rb
|
124
|
-
- lib/money-rails/money.rb
|
125
|
-
- lib/money-rails/active_record/monetizable.rb
|
126
|
-
- lib/money-rails/active_record/migration_extensions/schema_statements.rb
|
127
|
-
- lib/money-rails/active_record/migration_extensions/options_extractor.rb
|
128
|
-
- lib/money-rails/active_record/migration_extensions/table.rb
|
129
|
-
- lib/money-rails/hooks.rb
|
130
|
-
- lib/money-rails/mongoid/money.rb
|
131
|
-
- lib/money-rails/mongoid/two.rb
|
132
138
|
- lib/money-rails/railtie.rb
|
133
|
-
- lib/money-rails/
|
139
|
+
- lib/money-rails/active_model/validator.rb
|
140
|
+
- lib/money-rails/helpers/action_view_extension.rb
|
134
141
|
- lib/money-rails/test_helpers.rb
|
135
142
|
- lib/money-rails/engine.rb
|
136
|
-
- lib/money-rails/
|
137
|
-
-
|
138
|
-
-
|
143
|
+
- lib/money-rails/mongoid/two.rb
|
144
|
+
- lib/money-rails/mongoid/money.rb
|
145
|
+
- lib/money-rails/hooks.rb
|
146
|
+
- lib/money-rails/configuration.rb
|
147
|
+
- lib/money-rails/active_record/migration_extensions/options_extractor.rb
|
148
|
+
- lib/money-rails/active_record/migration_extensions/schema_statements.rb
|
149
|
+
- lib/money-rails/active_record/migration_extensions/table.rb
|
150
|
+
- lib/money-rails/active_record/monetizable.rb
|
151
|
+
- lib/money-rails/money.rb
|
152
|
+
- lib/money-rails/version.rb
|
139
153
|
- spec/helpers/action_view_extension_spec.rb
|
140
|
-
- spec/
|
154
|
+
- spec/helpers/form_helper_spec.rb
|
141
155
|
- spec/support/database_cleaner.rb
|
142
|
-
- spec/
|
143
|
-
- spec/active_record/migration_extensions/table_spec.rb
|
144
|
-
- spec/active_record/monetizable_spec.rb
|
145
|
-
- spec/mongoid/three_spec.rb
|
156
|
+
- spec/spec_helper.rb
|
146
157
|
- spec/mongoid/two_spec.rb
|
147
|
-
- spec/
|
148
|
-
- spec/dummy/
|
149
|
-
- spec/dummy/
|
150
|
-
- spec/dummy/
|
151
|
-
- spec/dummy/
|
152
|
-
- spec/dummy/
|
153
|
-
- spec/dummy/
|
154
|
-
- spec/dummy/
|
155
|
-
- spec/dummy/
|
156
|
-
- spec/dummy/
|
157
|
-
- spec/dummy/
|
158
|
-
- spec/dummy/
|
159
|
-
- spec/dummy/app/assets/stylesheets/application.css
|
160
|
-
- spec/dummy/app/views/layouts/application.html.erb
|
161
|
-
- spec/dummy/Rakefile
|
158
|
+
- spec/mongoid/three_spec.rb
|
159
|
+
- spec/dummy/db/schema.rb
|
160
|
+
- spec/dummy/db/migrate/20120528181002_create_transactions.rb
|
161
|
+
- spec/dummy/db/migrate/20120607210247_add_column_that_allows_nil.rb
|
162
|
+
- spec/dummy/db/migrate/20130124023419_add_price_in_a_range_cents_to_products.rb
|
163
|
+
- spec/dummy/db/migrate/20120712202655_add_sale_price_cents_to_product.rb
|
164
|
+
- spec/dummy/db/migrate/20120402080348_add_bonus_cents_to_product.rb
|
165
|
+
- spec/dummy/db/migrate/20120528210103_create_dummy_products.rb
|
166
|
+
- spec/dummy/db/migrate/20120524052716_create_services.rb
|
167
|
+
- spec/dummy/db/migrate/20120331190108_create_products.rb
|
168
|
+
- spec/dummy/db/migrate/20140110194016_add_validates_method_amount_cents_to_products.rb
|
169
|
+
- spec/dummy/db/structure.sql
|
162
170
|
- spec/dummy/config/environment.rb
|
163
|
-
- spec/dummy/config/
|
164
|
-
- spec/dummy/config/
|
171
|
+
- spec/dummy/config/boot.rb
|
172
|
+
- spec/dummy/config/mongoid.yml
|
165
173
|
- spec/dummy/config/application.rb
|
166
|
-
- spec/dummy/config/
|
167
|
-
- spec/dummy/config/
|
174
|
+
- spec/dummy/config/locales/en.yml
|
175
|
+
- spec/dummy/config/locales/en-GB.yml
|
168
176
|
- spec/dummy/config/initializers/secret_token.rb
|
177
|
+
- spec/dummy/config/initializers/backtrace_silencers.rb
|
178
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
169
179
|
- spec/dummy/config/initializers/session_store.rb
|
170
|
-
- spec/dummy/config/initializers/
|
180
|
+
- spec/dummy/config/initializers/money.rb
|
171
181
|
- spec/dummy/config/initializers/inflections.rb
|
172
|
-
- spec/dummy/config/initializers/
|
173
|
-
- spec/dummy/config/
|
182
|
+
- spec/dummy/config/initializers/mime_types.rb
|
183
|
+
- spec/dummy/config/database.yml
|
174
184
|
- spec/dummy/config/routes.rb
|
175
|
-
- spec/dummy/config/boot.rb
|
176
185
|
- spec/dummy/config/environments/development.rb
|
177
186
|
- spec/dummy/config/environments/production.rb
|
178
187
|
- spec/dummy/config/environments/test.rb
|
179
|
-
- spec/dummy/
|
188
|
+
- spec/dummy/app/helpers/application_helper.rb
|
189
|
+
- spec/dummy/app/models/transaction.rb
|
190
|
+
- spec/dummy/app/models/dummy_product.rb
|
191
|
+
- spec/dummy/app/models/product.rb
|
192
|
+
- spec/dummy/app/models/priceable.rb
|
193
|
+
- spec/dummy/app/models/service.rb
|
194
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
195
|
+
- spec/dummy/app/assets/javascripts/application.js
|
196
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
197
|
+
- spec/dummy/app/controllers/application_controller.rb
|
180
198
|
- spec/dummy/script/rails
|
181
|
-
- spec/dummy/db/schema.rb
|
182
|
-
- spec/dummy/db/migrate/20120524052716_create_services.rb
|
183
|
-
- spec/dummy/db/migrate/20120528210103_create_dummy_products.rb
|
184
|
-
- spec/dummy/db/migrate/20120331190108_create_products.rb
|
185
|
-
- spec/dummy/db/migrate/20120402080348_add_bonus_cents_to_product.rb
|
186
|
-
- spec/dummy/db/migrate/20120528181002_create_transactions.rb
|
187
|
-
- spec/dummy/db/migrate/20120607210247_add_column_that_allows_nil.rb
|
188
|
-
- spec/dummy/db/migrate/20120712202655_add_sale_price_cents_to_product.rb
|
189
|
-
- spec/dummy/db/migrate/20130124023419_add_price_in_a_range_cents_to_products.rb
|
190
|
-
- spec/dummy/db/structure.sql
|
191
199
|
- spec/dummy/config.ru
|
200
|
+
- spec/dummy/public/404.html
|
201
|
+
- spec/dummy/public/500.html
|
202
|
+
- spec/dummy/public/favicon.ico
|
203
|
+
- spec/dummy/public/422.html
|
204
|
+
- spec/dummy/Rakefile
|
192
205
|
- spec/dummy/README.rdoc
|
206
|
+
- spec/active_record/monetizable_spec.rb
|
207
|
+
- spec/active_record/migration_extensions/table_spec.rb
|
208
|
+
- spec/active_record/migration_extensions/schema_statements_spec.rb
|
209
|
+
- spec/configuration_spec.rb
|
193
210
|
- spec/test_helpers_spec.rb
|
194
211
|
- config/locales/money.en.yml
|
195
212
|
- CHANGELOG.md
|
@@ -223,61 +240,61 @@ signing_key:
|
|
223
240
|
specification_version: 3
|
224
241
|
summary: Money gem integration with Rails
|
225
242
|
test_files:
|
226
|
-
- spec/spec_helper.rb
|
227
|
-
- spec/helpers/form_helper_spec.rb
|
228
243
|
- spec/helpers/action_view_extension_spec.rb
|
229
|
-
- spec/
|
244
|
+
- spec/helpers/form_helper_spec.rb
|
230
245
|
- spec/support/database_cleaner.rb
|
231
|
-
- spec/
|
232
|
-
- spec/active_record/migration_extensions/table_spec.rb
|
233
|
-
- spec/active_record/monetizable_spec.rb
|
234
|
-
- spec/mongoid/three_spec.rb
|
246
|
+
- spec/spec_helper.rb
|
235
247
|
- spec/mongoid/two_spec.rb
|
236
|
-
- spec/
|
237
|
-
- spec/dummy/
|
238
|
-
- spec/dummy/
|
239
|
-
- spec/dummy/
|
240
|
-
- spec/dummy/
|
241
|
-
- spec/dummy/
|
242
|
-
- spec/dummy/
|
243
|
-
- spec/dummy/
|
244
|
-
- spec/dummy/
|
245
|
-
- spec/dummy/
|
246
|
-
- spec/dummy/
|
247
|
-
- spec/dummy/
|
248
|
-
- spec/dummy/app/assets/stylesheets/application.css
|
249
|
-
- spec/dummy/app/views/layouts/application.html.erb
|
250
|
-
- spec/dummy/Rakefile
|
248
|
+
- spec/mongoid/three_spec.rb
|
249
|
+
- spec/dummy/db/schema.rb
|
250
|
+
- spec/dummy/db/migrate/20120528181002_create_transactions.rb
|
251
|
+
- spec/dummy/db/migrate/20120607210247_add_column_that_allows_nil.rb
|
252
|
+
- spec/dummy/db/migrate/20130124023419_add_price_in_a_range_cents_to_products.rb
|
253
|
+
- spec/dummy/db/migrate/20120712202655_add_sale_price_cents_to_product.rb
|
254
|
+
- spec/dummy/db/migrate/20120402080348_add_bonus_cents_to_product.rb
|
255
|
+
- spec/dummy/db/migrate/20120528210103_create_dummy_products.rb
|
256
|
+
- spec/dummy/db/migrate/20120524052716_create_services.rb
|
257
|
+
- spec/dummy/db/migrate/20120331190108_create_products.rb
|
258
|
+
- spec/dummy/db/migrate/20140110194016_add_validates_method_amount_cents_to_products.rb
|
259
|
+
- spec/dummy/db/structure.sql
|
251
260
|
- spec/dummy/config/environment.rb
|
252
|
-
- spec/dummy/config/
|
253
|
-
- spec/dummy/config/
|
261
|
+
- spec/dummy/config/boot.rb
|
262
|
+
- spec/dummy/config/mongoid.yml
|
254
263
|
- spec/dummy/config/application.rb
|
255
|
-
- spec/dummy/config/
|
256
|
-
- spec/dummy/config/
|
264
|
+
- spec/dummy/config/locales/en.yml
|
265
|
+
- spec/dummy/config/locales/en-GB.yml
|
257
266
|
- spec/dummy/config/initializers/secret_token.rb
|
267
|
+
- spec/dummy/config/initializers/backtrace_silencers.rb
|
268
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
258
269
|
- spec/dummy/config/initializers/session_store.rb
|
259
|
-
- spec/dummy/config/initializers/
|
270
|
+
- spec/dummy/config/initializers/money.rb
|
260
271
|
- spec/dummy/config/initializers/inflections.rb
|
261
|
-
- spec/dummy/config/initializers/
|
262
|
-
- spec/dummy/config/
|
272
|
+
- spec/dummy/config/initializers/mime_types.rb
|
273
|
+
- spec/dummy/config/database.yml
|
263
274
|
- spec/dummy/config/routes.rb
|
264
|
-
- spec/dummy/config/boot.rb
|
265
275
|
- spec/dummy/config/environments/development.rb
|
266
276
|
- spec/dummy/config/environments/production.rb
|
267
277
|
- spec/dummy/config/environments/test.rb
|
268
|
-
- spec/dummy/
|
278
|
+
- spec/dummy/app/helpers/application_helper.rb
|
279
|
+
- spec/dummy/app/models/transaction.rb
|
280
|
+
- spec/dummy/app/models/dummy_product.rb
|
281
|
+
- spec/dummy/app/models/product.rb
|
282
|
+
- spec/dummy/app/models/priceable.rb
|
283
|
+
- spec/dummy/app/models/service.rb
|
284
|
+
- spec/dummy/app/assets/stylesheets/application.css
|
285
|
+
- spec/dummy/app/assets/javascripts/application.js
|
286
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
287
|
+
- spec/dummy/app/controllers/application_controller.rb
|
269
288
|
- spec/dummy/script/rails
|
270
|
-
- spec/dummy/db/schema.rb
|
271
|
-
- spec/dummy/db/migrate/20120524052716_create_services.rb
|
272
|
-
- spec/dummy/db/migrate/20120528210103_create_dummy_products.rb
|
273
|
-
- spec/dummy/db/migrate/20120331190108_create_products.rb
|
274
|
-
- spec/dummy/db/migrate/20120402080348_add_bonus_cents_to_product.rb
|
275
|
-
- spec/dummy/db/migrate/20120528181002_create_transactions.rb
|
276
|
-
- spec/dummy/db/migrate/20120607210247_add_column_that_allows_nil.rb
|
277
|
-
- spec/dummy/db/migrate/20120712202655_add_sale_price_cents_to_product.rb
|
278
|
-
- spec/dummy/db/migrate/20130124023419_add_price_in_a_range_cents_to_products.rb
|
279
|
-
- spec/dummy/db/structure.sql
|
280
289
|
- spec/dummy/config.ru
|
290
|
+
- spec/dummy/public/404.html
|
291
|
+
- spec/dummy/public/500.html
|
292
|
+
- spec/dummy/public/favicon.ico
|
293
|
+
- spec/dummy/public/422.html
|
294
|
+
- spec/dummy/Rakefile
|
281
295
|
- spec/dummy/README.rdoc
|
296
|
+
- spec/active_record/monetizable_spec.rb
|
297
|
+
- spec/active_record/migration_extensions/table_spec.rb
|
298
|
+
- spec/active_record/migration_extensions/schema_statements_spec.rb
|
299
|
+
- spec/configuration_spec.rb
|
282
300
|
- spec/test_helpers_spec.rb
|
283
|
-
has_rdoc:
|