money-rails 1.9.0 → 1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +2 -0
- data/Rakefile +4 -1
- data/lib/money-rails/active_record/monetizable.rb +3 -2
- data/lib/money-rails/version.rb +1 -1
- data/money-rails.gemspec +2 -2
- data/spec/active_record/monetizable_spec.rb +37 -1
- data/spec/dummy/db/migrate/20120331190108_create_products.rb +1 -1
- data/spec/dummy/db/migrate/20120402080348_add_bonus_cents_to_product.rb +1 -1
- data/spec/dummy/db/migrate/20120524052716_create_services.rb +1 -1
- data/spec/dummy/db/migrate/20120528181002_create_transactions.rb +1 -1
- data/spec/dummy/db/migrate/20120528210103_create_dummy_products.rb +1 -1
- data/spec/dummy/db/migrate/20120607210247_add_column_that_allows_nil.rb +1 -1
- data/spec/dummy/db/migrate/20120712202655_add_sale_price_cents_to_product.rb +1 -1
- data/spec/dummy/db/migrate/20130124023419_add_price_in_a_range_cents_to_products.rb +1 -1
- data/spec/dummy/db/migrate/20140110194016_add_validates_method_amount_cents_to_products.rb +1 -1
- data/spec/dummy/db/migrate/20141005075025_add_aliased_attr_to_products.rb +1 -1
- data/spec/dummy/db/migrate/20150107061030_add_delivery_fee_cents_and_restock_fee_cents_to_product.rb +1 -1
- data/spec/dummy/db/migrate/20150126231442_add_reduced_price_to_products.rb +1 -1
- data/spec/dummy/db/migrate/20150213234410_add_special_price_to_products.rb +1 -1
- data/spec/dummy/db/migrate/20150217222612_add_lambda_price_to_products.rb +1 -1
- data/spec/dummy/db/migrate/20150303222230_add_skip_validation_price_cents_to_products.rb +1 -1
- data/spec/dummy/db/migrate/20151026220420_add_optional_amount_to_transactions.rb +1 -1
- data/spec/mongoid/four_spec.rb +6 -5
- data/spec/mongoid/three_spec.rb +5 -5
- metadata +8 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43aea3acfffc9b52e9d127a1c40ff582b68fbe71
|
4
|
+
data.tar.gz: a7f43a08d717c6f786e94bbf33c6952001816b97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a104c9d3cb7ba768d8c627e4b34d77d5f31b35bb3a8f414b5a1f2d1548447fae817e2784f41e83acc0ff4a41cb56d7dc7c4b5b0b0f1b95a88ef936e4a735387
|
7
|
+
data.tar.gz: 5e6fe0700129072ff2b0f44276223b3540c90eb5d015f6b30b345f3397b7ae44e39cd9e8877075c3047ea63a9e24093589104d0fe874f56f4bf3849b14b0562c
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -261,6 +261,8 @@ MoneyRails.configure do |config|
|
|
261
261
|
|
262
262
|
end
|
263
263
|
```
|
264
|
+
For complete list of available currency: [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)
|
265
|
+
|
264
266
|
|
265
267
|
If you need to set the default currency on a per-request basis, such as in a
|
266
268
|
multi-tenant application, you may use a lambda to lazy-load the default currency
|
data/Rakefile
CHANGED
@@ -60,6 +60,9 @@ namespace :spec do
|
|
60
60
|
desc "Run Tests against mongoid (version 2)"
|
61
61
|
task(:mongoid2) { run_with_gemfile 'gemfiles/mongoid2.gemfile' }
|
62
62
|
|
63
|
+
desc "Run Tests against rails 5.1"
|
64
|
+
task(:rails51) { run_with_gemfile 'gemfiles/rails51.gemfile' }
|
65
|
+
|
63
66
|
desc "Run Tests against rails 5.0"
|
64
67
|
task(:rails50) { run_with_gemfile 'gemfiles/rails50.gemfile' }
|
65
68
|
|
@@ -79,7 +82,7 @@ namespace :spec do
|
|
79
82
|
task :mongoid => [:mongoid2, :mongoid3, :mongoid4, :mongoid5]
|
80
83
|
|
81
84
|
desc "Run Tests against rails 3 & 4 & 4.1 & 4.2 & 5.0"
|
82
|
-
task :rails => [:rails3, :rails4, :rails41, :rails42, :rails50]
|
85
|
+
task :rails => [:rails3, :rails4, :rails41, :rails42, :rails50, :rails51]
|
83
86
|
|
84
87
|
desc "Run Tests against all ORMs"
|
85
88
|
task :all => [:rails, :mongoid]
|
@@ -119,7 +119,7 @@ module MoneyRails
|
|
119
119
|
|
120
120
|
# Getter for monetized attribute
|
121
121
|
define_method name do |*args|
|
122
|
-
read_monetized name, subunit_name, *args
|
122
|
+
read_monetized name, subunit_name, options, *args
|
123
123
|
end
|
124
124
|
|
125
125
|
# Setter for monetized attribute
|
@@ -178,10 +178,11 @@ module MoneyRails
|
|
178
178
|
end
|
179
179
|
end
|
180
180
|
|
181
|
-
def read_monetized(name, subunit_name, *args)
|
181
|
+
def read_monetized(name, subunit_name, options = {}, *args)
|
182
182
|
# Get the cents
|
183
183
|
amount = public_send(subunit_name, *args)
|
184
184
|
|
185
|
+
return if amount.nil? && options[:allow_nil]
|
185
186
|
# Get the currency object
|
186
187
|
attr_currency = public_send("currency_for_#{name}")
|
187
188
|
|
data/lib/money-rails/version.rb
CHANGED
data/money-rails.gemspec
CHANGED
@@ -26,7 +26,7 @@ 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.10.0"
|
30
30
|
s.add_dependency "monetize", "~> 1.7.0"
|
31
31
|
s.add_dependency "activesupport", ">= 3.0"
|
32
32
|
s.add_dependency "railties", ">= 3.0"
|
@@ -34,6 +34,6 @@ Gem::Specification.new do |s|
|
|
34
34
|
|
35
35
|
s.add_development_dependency "rails", ">= 3.0"
|
36
36
|
s.add_development_dependency "rspec-rails", "~> 3.0"
|
37
|
-
s.add_development_dependency 'database_cleaner',
|
37
|
+
s.add_development_dependency 'database_cleaner', '~> 1.6.1'
|
38
38
|
s.add_development_dependency 'test-unit', '~> 3.0' if RUBY_VERSION >= '2.2'
|
39
39
|
end
|
@@ -78,13 +78,25 @@ if defined? ActiveRecord
|
|
78
78
|
end
|
79
79
|
|
80
80
|
it "assigns the correct value from params" do
|
81
|
-
params_clp = { amount: '20000', tax: '1000', currency:
|
81
|
+
params_clp = { amount: '20000', tax: '1000', currency: 'CLP' }
|
82
82
|
product = Transaction.create(params_clp)
|
83
83
|
expect(product.valid?).to be_truthy
|
84
84
|
expect(product.amount.currency.subunit_to_unit).to eq(1)
|
85
85
|
expect(product.amount_cents).to eq(20000)
|
86
86
|
end
|
87
87
|
|
88
|
+
# TODO: This is a slightly controversial example, btu it reflects the current behaviour
|
89
|
+
it "re-assigns cents amount when subunit/unit ratio changes preserving amount in units" do
|
90
|
+
transaction = Transaction.create(amount: '20000', tax: '1000', currency: 'USD')
|
91
|
+
|
92
|
+
expect(transaction.amount).to eq(Money.new(20000_00, 'USD'))
|
93
|
+
|
94
|
+
transaction.currency = 'CLP'
|
95
|
+
|
96
|
+
expect(transaction.amount).to eq(Money.new(20000, 'CLP'))
|
97
|
+
expect(transaction.amount_cents).to eq(20000)
|
98
|
+
end
|
99
|
+
|
88
100
|
it "raises an error if trying to create two attributes with the same name" do
|
89
101
|
expect do
|
90
102
|
class Product
|
@@ -842,6 +854,30 @@ if defined? ActiveRecord
|
|
842
854
|
expect(product.read_monetized(:price, :price_cents).to_s).to eq('14,0')
|
843
855
|
end
|
844
856
|
end
|
857
|
+
|
858
|
+
context "with a monetized attribute that is nil" do
|
859
|
+
let(:service) do
|
860
|
+
Service.create(discount_cents: nil)
|
861
|
+
end
|
862
|
+
let(:default_currency_lambda) { double("Default Currency Fallback") }
|
863
|
+
subject { service.read_monetized(:discount, :discount_cents, options) }
|
864
|
+
|
865
|
+
around(:each) do |example|
|
866
|
+
service # Instantiate instance which relies on Money.default_currency
|
867
|
+
original_default_currency = Money.default_currency
|
868
|
+
Money.default_currency = -> { default_currency_lambda.read_currency }
|
869
|
+
example.run
|
870
|
+
Money.default_currency = original_default_currency
|
871
|
+
end
|
872
|
+
|
873
|
+
context "when allow_nil options is set" do
|
874
|
+
let(:options) { { allow_nil: true } }
|
875
|
+
it "does not attempt to read the fallback default currency" do
|
876
|
+
expect(default_currency_lambda).not_to receive(:read_currency)
|
877
|
+
subject
|
878
|
+
end
|
879
|
+
end
|
880
|
+
end
|
845
881
|
end
|
846
882
|
|
847
883
|
describe "#write_monetized" do
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddSalePriceCentsToProduct < ActiveRecord::Migration
|
1
|
+
class AddSalePriceCentsToProduct < (Rails::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)
|
2
2
|
def change
|
3
3
|
add_column :products, :sale_price_amount, :integer,
|
4
4
|
:default => 0, :null => false
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddValidatesMethodAmountCentsToProducts < ActiveRecord::Migration
|
1
|
+
class AddValidatesMethodAmountCentsToProducts < (Rails::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)
|
2
2
|
def change
|
3
3
|
add_column :products, :validates_method_amount_cents, :integer
|
4
4
|
end
|
data/spec/dummy/db/migrate/20150107061030_add_delivery_fee_cents_and_restock_fee_cents_to_product.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddDeliveryFeeCentsAndRestockFeeCentsToProduct < ActiveRecord::Migration
|
1
|
+
class AddDeliveryFeeCentsAndRestockFeeCentsToProduct < (Rails::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)
|
2
2
|
def change
|
3
3
|
add_column :products, :delivery_fee_cents, :integer
|
4
4
|
add_column :products, :restock_fee_cents, :integer
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddReducedPriceToProducts < ActiveRecord::Migration
|
1
|
+
class AddReducedPriceToProducts < (Rails::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)
|
2
2
|
def change
|
3
3
|
add_column :products, :reduced_price_cents, :integer
|
4
4
|
add_column :products, :reduced_price_currency, :string
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddSkipValidationPriceCentsToProducts < ActiveRecord::Migration
|
1
|
+
class AddSkipValidationPriceCentsToProducts < (Rails::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)
|
2
2
|
def change
|
3
3
|
add_column :products, :skip_validation_price_cents, :string
|
4
4
|
end
|
data/spec/mongoid/four_spec.rb
CHANGED
@@ -4,11 +4,11 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^4(.*)/
|
|
4
4
|
|
5
5
|
describe Money do
|
6
6
|
let!(:priceable) { Priceable.create(:price => Money.new(100, 'EUR')) }
|
7
|
-
let
|
8
|
-
let
|
9
|
-
let
|
10
|
-
let
|
11
|
-
let
|
7
|
+
let(:priceable_from_nil) { Priceable.create(:price => nil) }
|
8
|
+
let(:priceable_from_num) { Priceable.create(:price => 1) }
|
9
|
+
let(:priceable_from_string) { Priceable.create(:price => '1 EUR' )}
|
10
|
+
let(:priceable_from_hash) { Priceable.create(:price => {:cents=>100, :currency_iso=>"EUR"} )}
|
11
|
+
let(:priceable_from_hash_with_indifferent_access) {
|
12
12
|
Priceable.create(:price => {:cents=>100, :currency_iso=>"EUR"}.with_indifferent_access)
|
13
13
|
}
|
14
14
|
let(:priceable_from_string_with_hyphen) { Priceable.create(:price => '1-2 EUR' )}
|
@@ -99,6 +99,7 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^4(.*)/
|
|
99
99
|
|
100
100
|
context "demongoize" do
|
101
101
|
subject { Priceable.first.price }
|
102
|
+
|
102
103
|
it { is_expected.to be_an_instance_of(Money) }
|
103
104
|
it { is_expected.to eq(Money.new(100, 'EUR')) }
|
104
105
|
|
data/spec/mongoid/three_spec.rb
CHANGED
@@ -4,11 +4,11 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^3(.*)/
|
|
4
4
|
|
5
5
|
describe Money do
|
6
6
|
let!(:priceable) { Priceable.create(:price => Money.new(100, 'EUR')) }
|
7
|
-
let
|
8
|
-
let
|
9
|
-
let
|
10
|
-
let
|
11
|
-
let
|
7
|
+
let(:priceable_from_nil) { Priceable.create(:price => nil) }
|
8
|
+
let(:priceable_from_num) { Priceable.create(:price => 1) }
|
9
|
+
let(:priceable_from_string) { Priceable.create(:price => '1 EUR' )}
|
10
|
+
let(:priceable_from_hash) { Priceable.create(:price => {:cents=>100, :currency_iso=>"EUR"} )}
|
11
|
+
let(:priceable_from_hash_with_indifferent_access) {
|
12
12
|
Priceable.create(:price => {:cents=>100, :currency_iso=>"EUR"}.with_indifferent_access)
|
13
13
|
}
|
14
14
|
let(:priceable_from_string_with_hyphen) { Priceable.create(:price => '1-2 EUR' )}
|
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: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Loupasakis
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2018-01-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: money
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 6.
|
21
|
+
version: 6.10.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 6.
|
28
|
+
version: 6.10.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: monetize
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,22 +100,16 @@ dependencies:
|
|
100
100
|
name: database_cleaner
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- - "
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: 0.8.0
|
106
|
-
- - "<"
|
103
|
+
- - "~>"
|
107
104
|
- !ruby/object:Gem::Version
|
108
|
-
version: 1.
|
105
|
+
version: 1.6.1
|
109
106
|
type: :development
|
110
107
|
prerelease: false
|
111
108
|
version_requirements: !ruby/object:Gem::Requirement
|
112
109
|
requirements:
|
113
|
-
- - "
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: 0.8.0
|
116
|
-
- - "<"
|
110
|
+
- - "~>"
|
117
111
|
- !ruby/object:Gem::Version
|
118
|
-
version: 1.
|
112
|
+
version: 1.6.1
|
119
113
|
- !ruby/object:Gem::Dependency
|
120
114
|
name: test-unit
|
121
115
|
requirement: !ruby/object:Gem::Requirement
|