money-rails 1.6.1 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/generators/templates/money.rb +15 -0
- data/lib/money-rails.rb +4 -0
- data/lib/money-rails/active_record/monetizable.rb +14 -7
- data/lib/money-rails/helpers/action_view_extension.rb +9 -13
- data/lib/money-rails/rails_admin.rb +21 -0
- data/lib/money-rails/version.rb +1 -1
- data/spec/active_record/monetizable_spec.rb +21 -0
- data/spec/helpers/action_view_extension_spec.rb +6 -16
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cadb127fbc12e2e400269dc9b0996c02f55c8cd6
|
4
|
+
data.tar.gz: c5e3dcc6f9d53d512927a91888b78ba996a0553e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c57f0377d92586e1cb7935cf780fadb16c204230dbc0b2a449bed4d94839e8d0013681aeb03530412cf0da5fc433900711a19378bb0caedfb20b58364a07b90
|
7
|
+
data.tar.gz: 43cf45749ad6a096ad3d83feb3004cc8d85546f28f0a8846b7eb98ba53313e75d401d0726c0811fd6a3b78798def69f2afdd77ff89b765843e335894159f2ff0
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.6.2
|
4
|
+
|
5
|
+
- Fix attribute order possibly affecting the value of monetized attribute
|
6
|
+
- Add support for RailsAdmin (use :money type)
|
7
|
+
- Raise error when gem was unable to infer monetized attribute name
|
8
|
+
- Revert decimal mark and thousands separator addtion, since formatting should depend on country and locale, instead of currency
|
9
|
+
|
3
10
|
## 1.6.1
|
4
11
|
|
5
12
|
- View helper now respects currency decimal mark and thousands separator
|
@@ -58,6 +58,21 @@ MoneyRails.configure do |config|
|
|
58
58
|
# :decimal_mark => ","
|
59
59
|
# }
|
60
60
|
|
61
|
+
# Specify a rounding mode
|
62
|
+
# Any one of:
|
63
|
+
#
|
64
|
+
# BigDecimal::ROUND_UP,
|
65
|
+
# BigDecimal::ROUND_DOWN,
|
66
|
+
# BigDecimal::ROUND_HALF_UP,
|
67
|
+
# BigDecimal::ROUND_HALF_DOWN,
|
68
|
+
# BigDecimal::ROUND_HALF_EVEN,
|
69
|
+
# BigDecimal::ROUND_CEILING,
|
70
|
+
# BigDecimal::ROUND_FLOOR
|
71
|
+
#
|
72
|
+
# set to BigDecimal::ROUND_HALF_EVEN by default
|
73
|
+
#
|
74
|
+
# config.rounding_mode = BigDecimal::ROUND_HALF_UP
|
75
|
+
|
61
76
|
# Set default money format globally.
|
62
77
|
# Default value is nil meaning "ignore this option".
|
63
78
|
# Example:
|
data/lib/money-rails.rb
CHANGED
@@ -50,8 +50,9 @@ module MoneyRails
|
|
50
50
|
elsif subunit_name =~ /#{MoneyRails::Configuration.amount_column[:postfix]}$/
|
51
51
|
name = subunit_name.sub(/#{MoneyRails::Configuration.amount_column[:postfix]}$/, "")
|
52
52
|
else
|
53
|
-
|
54
|
-
|
53
|
+
raise ArgumentError, "Unable to infer the name of the monetizable attribute for '#{subunit_name}'. " \
|
54
|
+
"Expected amount column postfix is '#{MoneyRails::Configuration.amount_column[:postfix]}'. " \
|
55
|
+
"Use :as option to explicitly specify the name or change the amount column postfix in the initializer."
|
55
56
|
end
|
56
57
|
|
57
58
|
# Optional accessor to be run on an instance to detect currency
|
@@ -127,12 +128,18 @@ module MoneyRails
|
|
127
128
|
memoized = instance_variable_get("@#{name}")
|
128
129
|
|
129
130
|
# Dont create a new Money instance if the values haven't been changed.
|
130
|
-
if memoized && memoized.cents == amount
|
131
|
-
memoized.currency == attr_currency
|
132
|
-
|
133
|
-
|
131
|
+
if memoized && memoized.cents == amount
|
132
|
+
if memoized.currency == attr_currency
|
133
|
+
result = memoized
|
134
|
+
else
|
135
|
+
memoized_amount = memoized.amount.to_money(attr_currency)
|
136
|
+
write_attribute subunit_name, memoized_amount.cents
|
137
|
+
# Cache the value (it may be nil)
|
138
|
+
result = instance_variable_set "@#{name}", memoized_amount
|
139
|
+
end
|
140
|
+
elsif amount.present?
|
134
141
|
# If amount is NOT nil (or empty string) load the amount in a Money
|
135
|
-
amount = Money.new(amount, attr_currency)
|
142
|
+
amount = Money.new(amount, attr_currency)
|
136
143
|
|
137
144
|
# Cache the value (it may be nil)
|
138
145
|
result = instance_variable_set "@#{name}", amount
|
@@ -11,23 +11,19 @@ module MoneyRails
|
|
11
11
|
options = { :symbol => options }
|
12
12
|
end
|
13
13
|
|
14
|
-
unless value.is_a?(Money)
|
15
|
-
if value.respond_to?(:to_money)
|
16
|
-
value = value.to_money
|
17
|
-
else
|
18
|
-
return ''
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
14
|
options = {
|
23
|
-
:no_cents_if_whole
|
24
|
-
:symbol
|
25
|
-
:decimal_mark => value.currency.decimal_mark,
|
26
|
-
:thousands_separator => value.currency.thousands_separator
|
15
|
+
:no_cents_if_whole => MoneyRails::Configuration.no_cents_if_whole.nil? ? true : MoneyRails::Configuration.no_cents_if_whole,
|
16
|
+
:symbol => false
|
27
17
|
}.merge(options)
|
28
18
|
options.delete(:symbol) if options[:disambiguate]
|
29
19
|
|
30
|
-
value.
|
20
|
+
if value.is_a?(Money)
|
21
|
+
value.format(options)
|
22
|
+
elsif value.respond_to?(:to_money)
|
23
|
+
value.to_money.format(options)
|
24
|
+
else
|
25
|
+
""
|
26
|
+
end
|
31
27
|
end
|
32
28
|
|
33
29
|
def humanized_money_with_symbol(value, options={})
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rails_admin/config/fields'
|
2
|
+
require 'rails_admin/config/fields/types/integer'
|
3
|
+
require 'money-rails/helpers/action_view_extension'
|
4
|
+
|
5
|
+
include MoneyRails::ActionViewExtension
|
6
|
+
|
7
|
+
module RailsAdmin
|
8
|
+
module Config
|
9
|
+
module Fields
|
10
|
+
module Types
|
11
|
+
class Money < RailsAdmin::Config::Fields::Types::Integer
|
12
|
+
RailsAdmin::Config::Fields::Types::register(self)
|
13
|
+
|
14
|
+
register_instance_option :pretty_value do
|
15
|
+
humanized_money_with_symbol(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/money-rails/version.rb
CHANGED
@@ -77,6 +77,14 @@ if defined? ActiveRecord
|
|
77
77
|
expect(product.price_cents).to eq(215)
|
78
78
|
end
|
79
79
|
|
80
|
+
it "assigns the correct value from params" do
|
81
|
+
params_clp = { amount: '20000', tax: '1000', currency: 'CLP' }
|
82
|
+
product = Transaction.create(params_clp)
|
83
|
+
expect(product.valid?).to be_truthy
|
84
|
+
expect(product.amount.currency.subunit_to_unit).to eq(1)
|
85
|
+
expect(product.amount_cents).to eq(20000)
|
86
|
+
end
|
87
|
+
|
80
88
|
it "raises an error if trying to create two attributes with the same name" do
|
81
89
|
expect do
|
82
90
|
class Product
|
@@ -93,6 +101,19 @@ if defined? ActiveRecord
|
|
93
101
|
end.to raise_error ArgumentError
|
94
102
|
end
|
95
103
|
|
104
|
+
it "raises an error when unable to infer attribute name" do
|
105
|
+
old_postfix = MoneyRails::Configuration.amount_column[:postfix]
|
106
|
+
MoneyRails::Configuration.amount_column[:postfix] = '_pennies'
|
107
|
+
|
108
|
+
expect do
|
109
|
+
class AnotherProduct < Product
|
110
|
+
monetize :price_cents
|
111
|
+
end
|
112
|
+
end.to raise_error ArgumentError
|
113
|
+
|
114
|
+
MoneyRails::Configuration.amount_column[:postfix] = old_postfix
|
115
|
+
end
|
116
|
+
|
96
117
|
it "allows subclass to redefine attribute with the same name" do
|
97
118
|
class SubProduct < Product
|
98
119
|
monetize :discount, as: :discount_price, with_currency: :gbp
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'spec_helper'
|
4
2
|
|
5
3
|
describe 'MoneyRails::ActionViewExtension', :type => :helper do
|
@@ -46,18 +44,10 @@ describe 'MoneyRails::ActionViewExtension', :type => :helper do
|
|
46
44
|
end
|
47
45
|
|
48
46
|
describe '#humanized_money_with_symbol' do
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
:sek => '1 250,10 kr'
|
54
|
-
} }
|
55
|
-
|
56
|
-
it 'returns the correctly formatted values' do
|
57
|
-
expected_values.each do |currency, result|
|
58
|
-
expect(helper.humanized_money_with_symbol(Money.new(amount, currency))).to eq result
|
59
|
-
end
|
60
|
-
end
|
47
|
+
subject { helper.humanized_money_with_symbol Money.new(12500) }
|
48
|
+
it { is_expected.to be_a String }
|
49
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
50
|
+
it { is_expected.to include Money.default_currency.symbol }
|
61
51
|
end
|
62
52
|
|
63
53
|
describe '#money_without_cents' do
|
@@ -96,7 +86,7 @@ describe 'MoneyRails::ActionViewExtension', :type => :helper do
|
|
96
86
|
describe '#humanized_money' do
|
97
87
|
subject { helper.humanized_money Money.new(12500) }
|
98
88
|
it { is_expected.to be_a String }
|
99
|
-
it { is_expected.
|
89
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
100
90
|
it { is_expected.not_to include Money.default_currency.symbol }
|
101
91
|
it { is_expected.to include "00" }
|
102
92
|
end
|
@@ -104,7 +94,7 @@ describe 'MoneyRails::ActionViewExtension', :type => :helper do
|
|
104
94
|
describe '#humanized_money_with_symbol' do
|
105
95
|
subject { helper.humanized_money_with_symbol Money.new(12500) }
|
106
96
|
it { is_expected.to be_a String }
|
107
|
-
it { is_expected.
|
97
|
+
it { is_expected.not_to include Money.default_currency.decimal_mark }
|
108
98
|
it { is_expected.to include Money.default_currency.symbol }
|
109
99
|
it { is_expected.to include "00" }
|
110
100
|
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: 1.6.
|
4
|
+
version: 1.6.2
|
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: 2016-
|
13
|
+
date: 2016-06-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: money
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- lib/money-rails/money.rb
|
160
160
|
- lib/money-rails/mongoid/money.rb
|
161
161
|
- lib/money-rails/mongoid/two.rb
|
162
|
+
- lib/money-rails/rails_admin.rb
|
162
163
|
- lib/money-rails/railtie.rb
|
163
164
|
- lib/money-rails/test_helpers.rb
|
164
165
|
- lib/money-rails/version.rb
|