money-rails 1.6.0 → 1.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9cc6171cefe133272f52265e75b57fee9bc6afd
4
- data.tar.gz: 49e42579e90c5cf1db2d1bcbf22cfaeff6e44b10
3
+ metadata.gz: 1a8e694d77fe73ebc1b806d1aeb709f74c5e25c2
4
+ data.tar.gz: 2ed6d897d12f3ff13a08379e97404a9bfe54568f
5
5
  SHA512:
6
- metadata.gz: 5be950ff213f992cadc6e8592dc73c0effdef3b9638743fee263758e670706fc7c4a3be29048d6e60d84a34dfe7e97552ea6deb712536a4d962a10cce063e8c6
7
- data.tar.gz: 0dbb19839209c7434f11804d6b2f0d642d1230ea0029b3a63f4035e2a1601495c1aef1703235e82fefca2b9aa9093f9af3324816d7d3a6fa67bf313752c3033e
6
+ metadata.gz: de46c3822927fd875d5a7fdf8a778562fe501d7837d50ae746b035205f1463782672f6d32ede43271fb34fbf312770183354493d99e57cf2b8e027d7fccd7673
7
+ data.tar.gz: e3dee272257eaf62e7b631d2486d9bd2ae9ba9c6dfd0c3c04a0ff5e750b747a15a5acdc8544693c264983a220a66c9b034640eb1819fbe2e51ecbe6867c8fc0d
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.1
4
+
5
+ - View helper now respects currency decimal mark and thousands separator
6
+ - Fix error when monetizing with attribute's name
7
+ - Fix mime-types dependency issue with ruby 1.9
8
+ - Fix issue with gem not updating automatically inferred currency column
9
+
3
10
  ## 1.6.0
4
11
 
5
12
  - Update Money and Monetize gem reqs.
@@ -15,6 +22,7 @@
15
22
  - validator was looking for monetizable_attributes using a symbol key, when the keys are all strings. Asserted string key values in rspec and changed validator to look for a string key.
16
23
  - make monetized_attribute hash comparison order independent
17
24
  - Isolate class used for the monetized_attributes tests to prevent cross-contamination
25
+ - rename `format_with_settings` method to `format`
18
26
  - add gem tasks
19
27
 
20
28
  ## 1.4.0
data/README.md CHANGED
@@ -455,7 +455,7 @@ So `humanized_money` will ignore `config.default_format = { no_cents_if_whole: f
455
455
 
456
456
  ### Testing
457
457
 
458
- If you use Rspec there is an test helper implementation.
458
+ If you use Rspec there is a test helper implementation.
459
459
  Just write `require "money-rails/test_helpers"` in spec_helper.rb.
460
460
 
461
461
  * the `monetize` matcher
@@ -32,19 +32,6 @@ module MoneyRails
32
32
  ":with_currency or :with_model_currency")
33
33
  end
34
34
 
35
- # Optional accessor to be run on an instance to detect currency
36
- instance_currency_name = options[:with_model_currency] ||
37
- options[:model_currency] ||
38
- MoneyRails::Configuration.currency_column[:column_name]
39
-
40
- instance_currency_name = instance_currency_name &&
41
- instance_currency_name.to_s
42
-
43
- # This attribute allows per column currency values
44
- # Overrides row and default currency
45
- field_currency_name = options[:with_currency] ||
46
- options[:field_currency] || nil
47
-
48
35
  name = options[:as] || options[:target_name] || nil
49
36
 
50
37
  # Form target name for the money backed ActiveModel field:
@@ -53,6 +40,13 @@ module MoneyRails
53
40
  # if none of the previous is the case then use a default suffix
54
41
  if name
55
42
  name = name.to_s
43
+
44
+ # Check if the options[:as] parameter is not the same as subunit_name
45
+ # which would result in stack overflow
46
+ if name == subunit_name
47
+ raise ArgumentError, "monetizable attribute name cannot be the same as options[:as] parameter"
48
+ end
49
+
56
50
  elsif subunit_name =~ /#{MoneyRails::Configuration.amount_column[:postfix]}$/
57
51
  name = subunit_name.sub(/#{MoneyRails::Configuration.amount_column[:postfix]}$/, "")
58
52
  else
@@ -60,6 +54,23 @@ module MoneyRails
60
54
  name = [subunit_name, "money"].join("_")
61
55
  end
62
56
 
57
+ # Optional accessor to be run on an instance to detect currency
58
+ instance_currency_name = options[:with_model_currency] ||
59
+ options[:model_currency] ||
60
+ MoneyRails::Configuration.currency_column[:column_name]
61
+
62
+ # Infer currency column from name and postfix
63
+ if !instance_currency_name && MoneyRails::Configuration.currency_column[:postfix].present?
64
+ instance_currency_name = "#{name}#{MoneyRails::Configuration.currency_column[:postfix]}"
65
+ end
66
+
67
+ instance_currency_name = instance_currency_name && instance_currency_name.to_s
68
+
69
+ # This attribute allows per column currency values
70
+ # Overrides row and default currency
71
+ field_currency_name = options[:with_currency] ||
72
+ options[:field_currency] || nil
73
+
63
74
  # Create a reverse mapping of the monetized attributes
64
75
  track_monetized_attribute name, subunit_name
65
76
 
@@ -104,7 +115,6 @@ module MoneyRails
104
115
  end
105
116
  end
106
117
 
107
-
108
118
  define_method name do |*args|
109
119
 
110
120
  # Get the cents
@@ -11,19 +11,23 @@ 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
+
14
22
  options = {
15
- :no_cents_if_whole => MoneyRails::Configuration.no_cents_if_whole.nil? ? true : MoneyRails::Configuration.no_cents_if_whole,
16
- :symbol => false
23
+ :no_cents_if_whole => MoneyRails::Configuration.no_cents_if_whole.nil? ? true : MoneyRails::Configuration.no_cents_if_whole,
24
+ :symbol => false,
25
+ :decimal_mark => value.currency.decimal_mark,
26
+ :thousands_separator => value.currency.thousands_separator
17
27
  }.merge(options)
18
28
  options.delete(:symbol) if options[:disambiguate]
19
29
 
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
30
+ value.format(options)
27
31
  end
28
32
 
29
33
  def humanized_money_with_symbol(value, options={})
@@ -1,3 +1,3 @@
1
1
  module MoneyRails
2
- VERSION = "1.6.0"
2
+ VERSION = "1.6.1"
3
3
  end
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.add_dependency "monetize", "~> 1.4.0"
31
31
  s.add_dependency "activesupport", ">= 3.0"
32
32
  s.add_dependency "railties", ">= 3.0"
33
+ s.add_dependency "mime-types", "< 3" if RUBY_VERSION < '2.0' # mime-types > 3 depends on mime-types-data, which doesn't support ruby 1.9
33
34
 
34
35
  s.add_development_dependency "rails", ">= 3.0"
35
36
  s.add_development_dependency "rspec-rails", "~> 3.0"
@@ -85,6 +85,14 @@ if defined? ActiveRecord
85
85
  end.to raise_error ArgumentError
86
86
  end
87
87
 
88
+ it "raises an error if Money object has the same attribute name as the monetizable attribute" do
89
+ expect do
90
+ class AnotherProduct < Product
91
+ monetize :price_cents, as: :price_cents
92
+ end
93
+ end.to raise_error ArgumentError
94
+ end
95
+
88
96
  it "allows subclass to redefine attribute with the same name" do
89
97
  class SubProduct < Product
90
98
  monetize :discount, as: :discount_price, with_currency: :gbp
@@ -690,6 +698,14 @@ if defined? ActiveRecord
690
698
  expect(dummy_product_with_nil_currency.price.currency).to eq(Money::Currency.find(:gbp))
691
699
  end
692
700
 
701
+ it "updates inferred currency column based on currency column postfix" do
702
+ product.reduced_price = Money.new(999_00, 'CAD')
703
+ product.save
704
+
705
+ expect(product.reduced_price_cents).to eq(999_00)
706
+ expect(product.reduced_price_currency).to eq('CAD')
707
+ end
708
+
693
709
  context "and field with allow_nil: true" do
694
710
  it "doesn't set currency to nil when setting the field to nil" do
695
711
  t = Transaction.new(:amount_cents => 2500, :currency => "CAD")
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'MoneyRails::ActionViewExtension', :type => :helper do
@@ -44,10 +46,18 @@ describe 'MoneyRails::ActionViewExtension', :type => :helper do
44
46
  end
45
47
 
46
48
  describe '#humanized_money_with_symbol' do
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 }
49
+ let(:amount) { 125_010 }
50
+ let(:expected_values) { {
51
+ :eur => '€1.250,10',
52
+ :usd => '$1,250.10',
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
51
61
  end
52
62
 
53
63
  describe '#money_without_cents' do
@@ -86,7 +96,7 @@ describe 'MoneyRails::ActionViewExtension', :type => :helper do
86
96
  describe '#humanized_money' do
87
97
  subject { helper.humanized_money Money.new(12500) }
88
98
  it { is_expected.to be_a String }
89
- it { is_expected.not_to include Money.default_currency.decimal_mark }
99
+ it { is_expected.to include Money.default_currency.decimal_mark }
90
100
  it { is_expected.not_to include Money.default_currency.symbol }
91
101
  it { is_expected.to include "00" }
92
102
  end
@@ -94,7 +104,7 @@ describe 'MoneyRails::ActionViewExtension', :type => :helper do
94
104
  describe '#humanized_money_with_symbol' do
95
105
  subject { helper.humanized_money_with_symbol Money.new(12500) }
96
106
  it { is_expected.to be_a String }
97
- it { is_expected.not_to include Money.default_currency.decimal_mark }
107
+ it { is_expected.to include Money.default_currency.decimal_mark }
98
108
  it { is_expected.to include Money.default_currency.symbol }
99
109
  it { is_expected.to include "00" }
100
110
  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.0
4
+ version: 1.6.1
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-01-15 00:00:00.000000000 Z
13
+ date: 2016-05-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: money
@@ -251,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
251
251
  version: '0'
252
252
  requirements: []
253
253
  rubyforge_project:
254
- rubygems_version: 2.4.5.1
254
+ rubygems_version: 2.5.1
255
255
  signing_key:
256
256
  specification_version: 4
257
257
  summary: Money gem integration with Rails