money-rails 1.0.0 → 1.1.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/README.md +34 -53
- data/lib/generators/templates/money.rb +7 -4
- data/lib/money-rails/active_model/validator.rb +1 -1
- data/lib/money-rails/active_record/monetizable.rb +23 -7
- data/lib/money-rails/configuration.rb +5 -2
- data/lib/money-rails/money.rb +4 -1
- data/lib/money-rails/mongoid/money.rb +2 -2
- data/lib/money-rails/test_helpers.rb +40 -18
- data/lib/money-rails/version.rb +1 -1
- data/money-rails.gemspec +1 -1
- data/spec/active_record/migration_extensions/schema_statements_spec.rb +8 -8
- data/spec/active_record/migration_extensions/table_spec.rb +8 -8
- data/spec/active_record/monetizable_spec.rb +195 -166
- data/spec/configuration_spec.rb +39 -22
- data/spec/dummy/app/models/dummy_product.rb +1 -0
- data/spec/dummy/app/models/product.rb +4 -0
- data/spec/dummy/config/application.rb +3 -2
- data/spec/dummy/config/locales/en-US.yml +5 -0
- data/spec/dummy/db/migrate/20141005075025_add_aliased_attr_to_products.rb +5 -0
- data/spec/dummy/db/schema.rb +2 -1
- data/spec/helpers/action_view_extension_spec.rb +45 -45
- data/spec/helpers/form_helper_spec.rb +2 -2
- data/spec/mongoid/four_spec.rb +23 -23
- data/spec/mongoid/three_spec.rb +23 -23
- data/spec/mongoid/two_spec.rb +13 -13
- data/spec/spec_helper.rb +0 -2
- data/spec/test_helpers_spec.rb +34 -22
- metadata +8 -4
data/spec/configuration_spec.rb
CHANGED
@@ -5,16 +5,16 @@ describe "configuration" do
|
|
5
5
|
describe "initializer" do
|
6
6
|
|
7
7
|
it "sets default currency" do
|
8
|
-
Money.default_currency.
|
8
|
+
expect(Money.default_currency).to eq(Money::Currency.new(:eur))
|
9
9
|
end
|
10
10
|
|
11
11
|
it "registers a custom currency" do
|
12
|
-
Money::Currency.table.
|
12
|
+
expect(Money::Currency.table).to include(:eu4)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "adds exchange rates given in config initializer" do
|
16
|
-
Money.us_dollar(100).exchange_to("CAD").
|
17
|
-
Money.ca_dollar(100).exchange_to("USD").
|
16
|
+
expect(Money.us_dollar(100).exchange_to("CAD")).to eq(Money.new(124, "CAD"))
|
17
|
+
expect(Money.ca_dollar(100).exchange_to("USD")).to eq(Money.new(80, "USD"))
|
18
18
|
end
|
19
19
|
|
20
20
|
it "sets no_cents_if_whole value for formatted output globally" do
|
@@ -23,15 +23,15 @@ describe "configuration" do
|
|
23
23
|
|
24
24
|
value = Money.new(12345600, "EUR")
|
25
25
|
mark = Money::Currency.find(:eur).decimal_mark
|
26
|
-
value.format.
|
26
|
+
expect(value.format).to match(/#{mark}/)
|
27
27
|
|
28
28
|
MoneyRails.no_cents_if_whole = true
|
29
|
-
value.format.
|
30
|
-
value.format(no_cents_if_whole: false).
|
29
|
+
expect(value.format).not_to match(/#{mark}/)
|
30
|
+
expect(value.format(no_cents_if_whole: false)).to match(/#{mark}/)
|
31
31
|
|
32
32
|
MoneyRails.no_cents_if_whole = false
|
33
|
-
value.format.
|
34
|
-
value.format(no_cents_if_whole: true).
|
33
|
+
expect(value.format).to match(/#{mark}/)
|
34
|
+
expect(value.format(no_cents_if_whole: true)).not_to match(/#{mark}/)
|
35
35
|
|
36
36
|
# Reset global settings
|
37
37
|
MoneyRails.no_cents_if_whole = nil
|
@@ -41,15 +41,15 @@ describe "configuration" do
|
|
41
41
|
it "sets symbol for formatted output globally" do
|
42
42
|
value = Money.new(12345600, "EUR")
|
43
43
|
symbol = Money::Currency.find(:eur).symbol
|
44
|
-
value.format.
|
44
|
+
expect(value.format).to match(/#{symbol}/)
|
45
45
|
|
46
46
|
MoneyRails.symbol = false
|
47
|
-
value.format.
|
48
|
-
value.format(symbol: true).
|
47
|
+
expect(value.format).not_to match(/#{symbol}/)
|
48
|
+
expect(value.format(symbol: true)).to match(/#{symbol}/)
|
49
49
|
|
50
50
|
MoneyRails.symbol = true
|
51
|
-
value.format.
|
52
|
-
value.format(symbol: false).
|
51
|
+
expect(value.format).to match(/#{symbol}/)
|
52
|
+
expect(value.format(symbol: false)).not_to match(/#{symbol}/)
|
53
53
|
|
54
54
|
# Reset global setting
|
55
55
|
MoneyRails.symbol = nil
|
@@ -58,26 +58,43 @@ describe "configuration" do
|
|
58
58
|
it "sets the location of the negative sign for formatted output globally" do
|
59
59
|
value = Money.new(-12345600, "EUR")
|
60
60
|
symbol = Money::Currency.find(:eur).symbol
|
61
|
-
value.format.
|
61
|
+
expect(value.format).to match(/#{symbol}-/)
|
62
62
|
|
63
63
|
MoneyRails.sign_before_symbol = false
|
64
|
-
value.format.
|
65
|
-
value.format(sign_before_symbol: false).
|
64
|
+
expect(value.format).to match(/#{symbol}-/)
|
65
|
+
expect(value.format(sign_before_symbol: false)).to match(/#{symbol}-/)
|
66
66
|
|
67
67
|
MoneyRails.sign_before_symbol = true
|
68
|
-
value.format.
|
69
|
-
value.format(sign_before_symbol: true).
|
68
|
+
expect(value.format).to match(/-#{symbol}/)
|
69
|
+
expect(value.format(sign_before_symbol: true)).to match(/-#{symbol}/)
|
70
70
|
|
71
71
|
# Reset global setting
|
72
72
|
MoneyRails.sign_before_symbol = nil
|
73
73
|
end
|
74
74
|
|
75
|
+
it "passes through arbitrary format options" do
|
76
|
+
value = Money.new(-12345600, "EUR")
|
77
|
+
symbol = Money::Currency.find(:eur).symbol
|
78
|
+
|
79
|
+
MoneyRails.default_format = {:symbol_position => :after}
|
80
|
+
expect(value.format).to match(/#{symbol}\z/)
|
81
|
+
|
82
|
+
# Override with "classic" format options for backward compatibility
|
83
|
+
MoneyRails.default_format = {:sign_before_symbol => :false}
|
84
|
+
MoneyRails.sign_before_symbol = true
|
85
|
+
expect(value.format).to match(/-#{symbol}/)
|
86
|
+
|
87
|
+
# Reset global settings
|
88
|
+
MoneyRails.sign_before_symbol = nil
|
89
|
+
MoneyRails.default_format = nil
|
90
|
+
end
|
91
|
+
|
75
92
|
it "changes the amount and currency column settings based on the default currency" do
|
76
93
|
old_currency = MoneyRails.default_currency
|
77
94
|
MoneyRails.default_currency = :inr
|
78
95
|
|
79
|
-
MoneyRails.amount_column[:postfix].
|
80
|
-
MoneyRails.currency_column[:default].
|
96
|
+
expect(MoneyRails.amount_column[:postfix]).to eq("_#{MoneyRails.default_currency.subunit.downcase.pluralize}")
|
97
|
+
expect(MoneyRails.currency_column[:default]).to eq(MoneyRails.default_currency.iso_code)
|
81
98
|
|
82
99
|
# Reset global setting
|
83
100
|
MoneyRails.default_currency = old_currency
|
@@ -90,7 +107,7 @@ describe "configuration" do
|
|
90
107
|
MoneyRails.default_currency = :jpy
|
91
108
|
}.to_not raise_error
|
92
109
|
|
93
|
-
MoneyRails.amount_column[:postfix].
|
110
|
+
expect(MoneyRails.amount_column[:postfix]).to eq("_cents")
|
94
111
|
|
95
112
|
# Reset global setting
|
96
113
|
MoneyRails.default_currency = old_currency
|
@@ -15,7 +15,9 @@ require "money-rails"
|
|
15
15
|
module Dummy
|
16
16
|
class Application < Rails::Application
|
17
17
|
|
18
|
-
I18n.enforce_available_locales
|
18
|
+
if I18n.respond_to?(:enforce_available_locales)
|
19
|
+
I18n.enforce_available_locales = false # removes deprecation warning
|
20
|
+
end
|
19
21
|
|
20
22
|
# Settings in config/environments/* take precedence over those specified here.
|
21
23
|
# Application configuration should go into files in config/initializers
|
@@ -59,4 +61,3 @@ module Dummy
|
|
59
61
|
config.assets.version = '1.0'
|
60
62
|
end
|
61
63
|
end
|
62
|
-
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended that you check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(version:
|
14
|
+
ActiveRecord::Schema.define(version: 20141005075025) do
|
15
15
|
|
16
16
|
create_table "dummy_products", force: true do |t|
|
17
17
|
t.string "currency"
|
@@ -31,6 +31,7 @@ ActiveRecord::Schema.define(version: 20140110194016) do
|
|
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
|
+
t.integer "aliased_cents"
|
34
35
|
end
|
35
36
|
|
36
37
|
create_table "services", force: true do |t|
|
@@ -1,62 +1,62 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe 'MoneyRails::ActionViewExtension' do
|
3
|
+
describe 'MoneyRails::ActionViewExtension', :type => :helper do
|
4
4
|
describe '#currency_symbol' do
|
5
5
|
subject { helper.currency_symbol }
|
6
|
-
it {
|
7
|
-
it {
|
6
|
+
it { is_expected.to be_a String }
|
7
|
+
it { is_expected.to include Money.default_currency.symbol }
|
8
8
|
end
|
9
9
|
|
10
10
|
describe '#humanized_money' do
|
11
11
|
let(:options) { {} }
|
12
12
|
subject { helper.humanized_money Money.new(12500), options }
|
13
|
-
it {
|
14
|
-
it {
|
15
|
-
it {
|
13
|
+
it { is_expected.to be_a String }
|
14
|
+
it { is_expected.not_to include Money.default_currency.symbol }
|
15
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
16
16
|
|
17
17
|
context 'with symbol options' do
|
18
18
|
let(:options) { { :symbol => true } }
|
19
|
-
it {
|
19
|
+
it { is_expected.to include Money.default_currency.symbol }
|
20
20
|
end
|
21
21
|
|
22
22
|
context 'with deprecated symbol' do
|
23
23
|
let(:options) { true }
|
24
24
|
before(:each) do
|
25
|
-
helper.
|
25
|
+
expect(helper).to receive(:warn)
|
26
26
|
end
|
27
|
-
it {
|
27
|
+
it { is_expected.to include Money.default_currency.symbol }
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
describe '#humanized_money_with_symbol' do
|
32
32
|
subject { helper.humanized_money_with_symbol Money.new(12500) }
|
33
|
-
it {
|
34
|
-
it {
|
35
|
-
it {
|
33
|
+
it { is_expected.to be_a String }
|
34
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
35
|
+
it { is_expected.to include Money.default_currency.symbol }
|
36
36
|
end
|
37
37
|
|
38
38
|
describe '#money_without_cents' do
|
39
39
|
let(:options) { {} }
|
40
40
|
subject { helper.money_without_cents Money.new(12500), options }
|
41
|
-
it {
|
42
|
-
it {
|
43
|
-
it {
|
41
|
+
it { is_expected.to be_a String }
|
42
|
+
it { is_expected.not_to include Money.default_currency.symbol }
|
43
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
44
44
|
|
45
45
|
context 'with deprecated symbol' do
|
46
46
|
let(:options) { true }
|
47
47
|
before(:each) do
|
48
|
-
helper.
|
48
|
+
expect(helper).to receive(:warn)
|
49
49
|
end
|
50
|
-
it {
|
50
|
+
it { is_expected.to include Money.default_currency.symbol }
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
describe '#money_without_cents_and_with_symbol' do
|
55
55
|
subject { helper.money_without_cents_and_with_symbol Money.new(12500) }
|
56
|
-
it {
|
57
|
-
it {
|
58
|
-
it {
|
59
|
-
it {
|
56
|
+
it { is_expected.to be_a String }
|
57
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
58
|
+
it { is_expected.to include Money.default_currency.symbol }
|
59
|
+
it { is_expected.not_to include "00" }
|
60
60
|
end
|
61
61
|
|
62
62
|
context 'respects MoneyRails::Configuration settings' do
|
@@ -70,18 +70,18 @@ describe 'MoneyRails::ActionViewExtension' do
|
|
70
70
|
|
71
71
|
describe '#humanized_money' do
|
72
72
|
subject { helper.humanized_money Money.new(12500) }
|
73
|
-
it {
|
74
|
-
it {
|
75
|
-
it {
|
76
|
-
it {
|
73
|
+
it { is_expected.to be_a String }
|
74
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
75
|
+
it { is_expected.not_to include Money.default_currency.symbol }
|
76
|
+
it { is_expected.to include "00" }
|
77
77
|
end
|
78
78
|
|
79
79
|
describe '#humanized_money_with_symbol' do
|
80
80
|
subject { helper.humanized_money_with_symbol Money.new(12500) }
|
81
|
-
it {
|
82
|
-
it {
|
83
|
-
it {
|
84
|
-
it {
|
81
|
+
it { is_expected.to be_a String }
|
82
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
83
|
+
it { is_expected.to include Money.default_currency.symbol }
|
84
|
+
it { is_expected.to include "00" }
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -95,18 +95,18 @@ describe 'MoneyRails::ActionViewExtension' do
|
|
95
95
|
|
96
96
|
describe '#humanized_money' do
|
97
97
|
subject { helper.humanized_money Money.new(12500) }
|
98
|
-
it {
|
99
|
-
it {
|
100
|
-
it {
|
101
|
-
it {
|
98
|
+
it { is_expected.to be_a String }
|
99
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
100
|
+
it { is_expected.not_to include Money.default_currency.symbol }
|
101
|
+
it { is_expected.not_to include "00" }
|
102
102
|
end
|
103
103
|
|
104
104
|
describe '#humanized_money_with_symbol' do
|
105
105
|
subject { helper.humanized_money_with_symbol Money.new(12500) }
|
106
|
-
it {
|
107
|
-
it {
|
108
|
-
it {
|
109
|
-
it {
|
106
|
+
it { is_expected.to be_a String }
|
107
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
108
|
+
it { is_expected.to include Money.default_currency.symbol }
|
109
|
+
it { is_expected.not_to include "00" }
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
@@ -120,18 +120,18 @@ describe 'MoneyRails::ActionViewExtension' do
|
|
120
120
|
|
121
121
|
describe '#humanized_money' do
|
122
122
|
subject { helper.humanized_money Money.new(12500) }
|
123
|
-
it {
|
124
|
-
it {
|
125
|
-
it {
|
126
|
-
it {
|
123
|
+
it { is_expected.to be_a String }
|
124
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
125
|
+
it { is_expected.not_to include Money.default_currency.symbol }
|
126
|
+
it { is_expected.not_to include "00" }
|
127
127
|
end
|
128
128
|
|
129
129
|
describe '#humanized_money_with_symbol' do
|
130
130
|
subject { helper.humanized_money_with_symbol Money.new(12500) }
|
131
|
-
it {
|
132
|
-
it {
|
133
|
-
it {
|
134
|
-
it {
|
131
|
+
it { is_expected.to be_a String }
|
132
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
133
|
+
it { is_expected.to include Money.default_currency.symbol }
|
134
|
+
it { is_expected.not_to include "00" }
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
if defined? ActiveRecord
|
4
|
-
describe "Test helper in form blocks" do
|
4
|
+
describe "Test helper in form blocks", :type => :helper do
|
5
5
|
|
6
6
|
let :product do
|
7
7
|
Product.create(:price_cents => 3000, :discount => 150,
|
@@ -12,7 +12,7 @@ if defined? ActiveRecord
|
|
12
12
|
context "textfield" do
|
13
13
|
it "uses the current value of money field in textfield" do
|
14
14
|
helper.instance_variable_set :@product, product
|
15
|
-
helper.text_field(:product, :price).
|
15
|
+
expect(helper.text_field(:product, :price)).to match(/value=\"#{product.price.to_s}\"/)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/spec/mongoid/four_spec.rb
CHANGED
@@ -22,18 +22,18 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^4(.*)/
|
|
22
22
|
|
23
23
|
context "mongoize" do
|
24
24
|
it "correctly mongoizes a Money object to a hash of cents and currency" do
|
25
|
-
priceable.price.cents.
|
26
|
-
priceable.price.currency.
|
25
|
+
expect(priceable.price.cents).to eq(100)
|
26
|
+
expect(priceable.price.currency).to eq(Money::Currency.find('EUR'))
|
27
27
|
end
|
28
28
|
|
29
29
|
it "correctly mongoizes a Numeric object to a hash of cents and currency" do
|
30
|
-
priceable_from_num.price.cents.
|
31
|
-
priceable_from_num.price.currency.
|
30
|
+
expect(priceable_from_num.price.cents).to eq(100)
|
31
|
+
expect(priceable_from_num.price.currency).to eq(Money.default_currency)
|
32
32
|
end
|
33
33
|
|
34
34
|
it "correctly mongoizes a String object to a hash of cents and currency" do
|
35
|
-
priceable_from_string.price.cents.
|
36
|
-
priceable_from_string.price.currency.
|
35
|
+
expect(priceable_from_string.price.cents).to eq(100)
|
36
|
+
expect(priceable_from_string.price.currency).to eq(Money::Currency.find('EUR'))
|
37
37
|
end
|
38
38
|
|
39
39
|
context "when MoneyRails.raise_error_on_money_parsing is true" do
|
@@ -51,22 +51,22 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^4(.*)/
|
|
51
51
|
|
52
52
|
context "when MoneyRails.raise_error_on_money_parsing is false" do
|
53
53
|
it "does not correctly mongoize a String with a hyphen in its middle" do
|
54
|
-
priceable_from_string_with_hyphen.price.
|
54
|
+
expect(priceable_from_string_with_hyphen.price).to eq(nil)
|
55
55
|
end
|
56
56
|
|
57
57
|
it "does not correctly mongoize a String with an unknown currency" do
|
58
|
-
priceable_from_string_with_unknown_currency.price.
|
58
|
+
expect(priceable_from_string_with_unknown_currency.price).to eq(nil)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
it "correctly mongoizes a hash of cents and currency" do
|
63
|
-
priceable_from_hash.price.cents.
|
64
|
-
priceable_from_hash.price.currency.
|
63
|
+
expect(priceable_from_hash.price.cents).to eq(100)
|
64
|
+
expect(priceable_from_hash.price.currency).to eq(Money::Currency.find('EUR'))
|
65
65
|
end
|
66
66
|
|
67
67
|
it "correctly mongoizes a HashWithIndifferentAccess of cents and currency" do
|
68
|
-
priceable_from_hash_with_indifferent_access.price.cents.
|
69
|
-
priceable_from_hash_with_indifferent_access.price.currency.
|
68
|
+
expect(priceable_from_hash_with_indifferent_access.price.cents).to eq(100)
|
69
|
+
expect(priceable_from_hash_with_indifferent_access.price.currency).to eq(Money::Currency.find('EUR'))
|
70
70
|
end
|
71
71
|
|
72
72
|
context "infinite_precision = true" do
|
@@ -79,36 +79,36 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^4(.*)/
|
|
79
79
|
end
|
80
80
|
|
81
81
|
it "correctly mongoizes a Money object to a hash of cents and currency" do
|
82
|
-
priceable_with_infinite_precision.price.cents.
|
83
|
-
priceable_with_infinite_precision.price.currency.
|
82
|
+
expect(priceable_with_infinite_precision.price.cents).to eq(BigDecimal.new('100.1'))
|
83
|
+
expect(priceable_with_infinite_precision.price.currency).to eq(Money::Currency.find('EUR'))
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
88
|
it "correctly serializes a Hash field containing Money objects" do
|
89
|
-
priceable_with_hash_field.price_hash[:key1][:cents].
|
90
|
-
priceable_with_hash_field.price_hash[:key2][:cents].
|
91
|
-
priceable_with_hash_field.price_hash[:key1][:currency_iso].
|
92
|
-
priceable_with_hash_field.price_hash[:key2][:currency_iso].
|
89
|
+
expect(priceable_with_hash_field.price_hash[:key1][:cents]).to eq(100)
|
90
|
+
expect(priceable_with_hash_field.price_hash[:key2][:cents]).to eq(200)
|
91
|
+
expect(priceable_with_hash_field.price_hash[:key1][:currency_iso]).to eq('EUR')
|
92
|
+
expect(priceable_with_hash_field.price_hash[:key2][:currency_iso]).to eq('USD')
|
93
93
|
end
|
94
94
|
|
95
95
|
context "demongoize" do
|
96
96
|
subject { Priceable.first.price }
|
97
|
-
it {
|
98
|
-
it {
|
97
|
+
it { is_expected.to be_an_instance_of(Money) }
|
98
|
+
it { is_expected.to eq(Money.new(100, 'EUR')) }
|
99
99
|
it "returns nil if a nil value was stored" do
|
100
100
|
nil_priceable = Priceable.create(:price => nil)
|
101
|
-
nil_priceable.price.
|
101
|
+
expect(nil_priceable.price).to be_nil
|
102
102
|
end
|
103
103
|
it 'returns nil if an unknown value was stored' do
|
104
104
|
zero_priceable = Priceable.create(:price => [])
|
105
|
-
zero_priceable.price.
|
105
|
+
expect(zero_priceable.price).to be_nil
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
109
|
context "evolve" do
|
110
110
|
it "correctly transforms a Money object into a Mongo friendly value" do
|
111
|
-
Priceable.where(:price => Money.new(100, 'EUR')).first.
|
111
|
+
expect(Priceable.where(:price => Money.new(100, 'EUR')).first).to eq(priceable)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
end
|
data/spec/mongoid/three_spec.rb
CHANGED
@@ -22,18 +22,18 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^3(.*)/
|
|
22
22
|
|
23
23
|
context "mongoize" do
|
24
24
|
it "mongoizes correctly a Money object to a hash of cents and currency" do
|
25
|
-
priceable.price.cents.
|
26
|
-
priceable.price.currency.
|
25
|
+
expect(priceable.price.cents).to eq(100)
|
26
|
+
expect(priceable.price.currency).to eq(Money::Currency.find('EUR'))
|
27
27
|
end
|
28
28
|
|
29
29
|
it "mongoizes correctly a Numeric object to a hash of cents and currency" do
|
30
|
-
priceable_from_num.price.cents.
|
31
|
-
priceable_from_num.price.currency.
|
30
|
+
expect(priceable_from_num.price.cents).to eq(100)
|
31
|
+
expect(priceable_from_num.price.currency).to eq(Money.default_currency)
|
32
32
|
end
|
33
33
|
|
34
34
|
it "mongoizes correctly a String object to a hash of cents and currency" do
|
35
|
-
priceable_from_string.price.cents.
|
36
|
-
priceable_from_string.price.currency.
|
35
|
+
expect(priceable_from_string.price.cents).to eq(100)
|
36
|
+
expect(priceable_from_string.price.currency).to eq(Money::Currency.find('EUR'))
|
37
37
|
end
|
38
38
|
|
39
39
|
context "when MoneyRails.raise_error_on_money_parsing is true" do
|
@@ -51,22 +51,22 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^3(.*)/
|
|
51
51
|
|
52
52
|
context "when MoneyRails.raise_error_on_money_parsing is false" do
|
53
53
|
it "does not mongoizes correctly a String with hyphen in its middle" do
|
54
|
-
priceable_from_string_with_hyphen.price.
|
54
|
+
expect(priceable_from_string_with_hyphen.price).to eq(nil)
|
55
55
|
end
|
56
56
|
|
57
57
|
it "does not mongoize correctly a String with an unknown currency" do
|
58
|
-
priceable_from_string_with_unknown_currency.price.
|
58
|
+
expect(priceable_from_string_with_unknown_currency.price).to eq(nil)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
it "mongoizes correctly a hash of cents and currency" do
|
63
|
-
priceable_from_hash.price.cents.
|
64
|
-
priceable_from_hash.price.currency.
|
63
|
+
expect(priceable_from_hash.price.cents).to eq(100)
|
64
|
+
expect(priceable_from_hash.price.currency).to eq(Money::Currency.find('EUR'))
|
65
65
|
end
|
66
66
|
|
67
67
|
it "mongoizes correctly a HashWithIndifferentAccess of cents and currency" do
|
68
|
-
priceable_from_hash_with_indifferent_access.price.cents.
|
69
|
-
priceable_from_hash_with_indifferent_access.price.currency.
|
68
|
+
expect(priceable_from_hash_with_indifferent_access.price.cents).to eq(100)
|
69
|
+
expect(priceable_from_hash_with_indifferent_access.price.currency).to eq(Money::Currency.find('EUR'))
|
70
70
|
end
|
71
71
|
|
72
72
|
context "infinite_precision = true" do
|
@@ -79,36 +79,36 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^3(.*)/
|
|
79
79
|
end
|
80
80
|
|
81
81
|
it "mongoizes correctly a Money object to a hash of cents and currency" do
|
82
|
-
priceable_with_infinite_precision.price.cents.
|
83
|
-
priceable_with_infinite_precision.price.currency.
|
82
|
+
expect(priceable_with_infinite_precision.price.cents).to eq(BigDecimal.new('100.1'))
|
83
|
+
expect(priceable_with_infinite_precision.price.currency).to eq(Money::Currency.find('EUR'))
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
88
|
it "serializes correctly a Hash field containing Money objects" do
|
89
|
-
priceable_with_hash_field.price_hash[:key1][:cents].
|
90
|
-
priceable_with_hash_field.price_hash[:key2][:cents].
|
91
|
-
priceable_with_hash_field.price_hash[:key1][:currency_iso].
|
92
|
-
priceable_with_hash_field.price_hash[:key2][:currency_iso].
|
89
|
+
expect(priceable_with_hash_field.price_hash[:key1][:cents]).to eq(100)
|
90
|
+
expect(priceable_with_hash_field.price_hash[:key2][:cents]).to eq(200)
|
91
|
+
expect(priceable_with_hash_field.price_hash[:key1][:currency_iso]).to eq('EUR')
|
92
|
+
expect(priceable_with_hash_field.price_hash[:key2][:currency_iso]).to eq('USD')
|
93
93
|
end
|
94
94
|
|
95
95
|
context "demongoize" do
|
96
96
|
subject { Priceable.first.price }
|
97
|
-
it {
|
98
|
-
it {
|
97
|
+
it { is_expected.to be_an_instance_of(Money) }
|
98
|
+
it { is_expected.to eq(Money.new(100, 'EUR')) }
|
99
99
|
it "returns nil if a nil value was stored" do
|
100
100
|
nil_priceable = Priceable.create(:price => nil)
|
101
|
-
nil_priceable.price.
|
101
|
+
expect(nil_priceable.price).to be_nil
|
102
102
|
end
|
103
103
|
it 'returns nil if an unknown value was stored' do
|
104
104
|
zero_priceable = Priceable.create(:price => [])
|
105
|
-
zero_priceable.price.
|
105
|
+
expect(zero_priceable.price).to be_nil
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
109
|
context "evolve" do
|
110
110
|
it "transforms correctly a Money object to a Mongo friendly value" do
|
111
|
-
Priceable.where(:price => Money.new(100, 'EUR')).first.
|
111
|
+
expect(Priceable.where(:price => Money.new(100, 'EUR')).first).to eq(priceable)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
end
|
data/spec/mongoid/two_spec.rb
CHANGED
@@ -11,18 +11,18 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^2(.*)/
|
|
11
11
|
|
12
12
|
context "serialize" do
|
13
13
|
it "serializes correctly a Money object to a hash of cents and currency" do
|
14
|
-
priceable.price.cents.
|
15
|
-
priceable.price.currency.
|
14
|
+
expect(priceable.price.cents).to eq(100)
|
15
|
+
expect(priceable.price.currency).to eq(Money::Currency.find('EUR'))
|
16
16
|
end
|
17
17
|
|
18
18
|
it "mongoizes correctly a Numeric object to a hash of cents and currency" do
|
19
|
-
priceable_from_num.price.cents.
|
20
|
-
priceable_from_num.price.currency.
|
19
|
+
expect(priceable_from_num.price.cents).to eq(100)
|
20
|
+
expect(priceable_from_num.price.currency).to eq(Money.default_currency)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "mongoizes correctly a String object to a hash of cents and currency" do
|
24
|
-
priceable_from_string.price.cents.
|
25
|
-
priceable_from_string.price.currency.
|
24
|
+
expect(priceable_from_string.price.cents).to eq(100)
|
25
|
+
expect(priceable_from_string.price.currency).to eq(Money::Currency.find('EUR'))
|
26
26
|
end
|
27
27
|
|
28
28
|
context "infinite_precision = true" do
|
@@ -35,8 +35,8 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^2(.*)/
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "mongoizes correctly a Money object to a hash of cents and currency" do
|
38
|
-
priceable_with_infinite_precision.price.cents.
|
39
|
-
priceable_with_infinite_precision.price.currency.
|
38
|
+
expect(priceable_with_infinite_precision.price.cents).to eq(BigDecimal.new('100.1'))
|
39
|
+
expect(priceable_with_infinite_precision.price.currency).to eq(Money::Currency.find('EUR'))
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -51,22 +51,22 @@ if defined?(Mongoid) && ::Mongoid::VERSION =~ /^2(.*)/
|
|
51
51
|
|
52
52
|
context "when MoneyRails.raise_error_on_money_parsing is false" do
|
53
53
|
it "does not mongoizes correctly a String with hyphen in its middle" do
|
54
|
-
priceable_from_string_with_hyphen.price.
|
54
|
+
expect(priceable_from_string_with_hyphen.price).to eq(nil)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
context "deserialize" do
|
60
60
|
subject { priceable.price }
|
61
|
-
it {
|
62
|
-
it {
|
61
|
+
it { is_expected.to be_an_instance_of(Money) }
|
62
|
+
it { is_expected.to eq(Money.new(100, 'EUR')) }
|
63
63
|
it "returns nil if a nil value was stored" do
|
64
64
|
nil_priceable = Priceable.create(:price => nil)
|
65
|
-
nil_priceable.price.
|
65
|
+
expect(nil_priceable.price).to be_nil
|
66
66
|
end
|
67
67
|
it 'returns nil if an unknown value was stored' do
|
68
68
|
zero_priceable = Priceable.create(:price => [])
|
69
|
-
zero_priceable.price.
|
69
|
+
expect(zero_priceable.price).to be_nil
|
70
70
|
end
|
71
71
|
end
|
72
72
|
end
|