money 6.0.0.pre4 → 6.0.0.pre5

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.
@@ -1,6 +1,7 @@
1
1
  # Changelog
2
2
 
3
3
  ## master
4
+ - Fix BTC subunit
4
5
  - New option :sign_positive to add a + sign to positive numbers
5
6
  - Only allow to multiply a money by a number (int, float)
6
7
  - Fix typo
@@ -22,6 +23,8 @@
22
23
  - Change Money.from_bigdecimal (and in that way .to_money too) to keep precision when using `Money.infinite_precision = true`
23
24
  - Add :rounded_infinite_precision option to .format
24
25
  - Changed the New Taiwan Dollar symbol position from after the amount to before the amount.
26
+ - Passing a Money instance to the Money constructor will obtain a new Money object with the same property values as the original
27
+ - Add deprecation warning to comparators
25
28
 
26
29
  ## 5.1.1
27
30
 
@@ -6,7 +6,7 @@
6
6
  "symbol": "B⃦",
7
7
  "alternate_symbols": [],
8
8
  "subunit": "Satoshi",
9
- "subunit_to_unit": 10000000,
9
+ "subunit_to_unit": 100000000,
10
10
  "symbol_first": true,
11
11
  "html_entity": "",
12
12
  "decimal_mark": ".",
@@ -272,9 +272,16 @@ class Money
272
272
  # @see Money.new_with_dollars
273
273
  #
274
274
  def initialize(fractional, currency = Money.default_currency, bank = Money.default_bank)
275
- @fractional = as_d(fractional)
276
- @currency = Currency.wrap(currency)
277
- @bank = bank
275
+ if (fractional.is_a? Money)
276
+ money = fractional
277
+ @fractional = money.fractional
278
+ @currency = money.currency
279
+ @bank = money.bank
280
+ else
281
+ @fractional = as_d(fractional)
282
+ @currency = Currency.wrap(currency)
283
+ @bank = bank
284
+ end
278
285
  end
279
286
 
280
287
  # Assuming using a currency using dollars:
@@ -25,6 +25,7 @@ class Money
25
25
  # Money.new(100) == Money.new(100) #=> true
26
26
  def ==(other_money)
27
27
  if other_money.respond_to?(:to_money)
28
+ Money.deprecate "as of Money 6.1.0 you must `require 'money/core_extension'` to compare Money to core classes." unless other_money.is_a? Money
28
29
  other_money = other_money.to_money
29
30
  fractional == other_money.fractional && currency == other_money.currency
30
31
  else
@@ -45,6 +46,7 @@ class Money
45
46
 
46
47
  def <=>(other_money)
47
48
  if other_money.respond_to?(:to_money)
49
+ Money.deprecate "as of Money 6.1.0 you must `require 'money/core_extension'` to compare Money to core classes." unless other_money.is_a? Money
48
50
  other_money = other_money.to_money
49
51
  if fractional == 0 || other_money.fractional == 0 || currency == other_money.currency
50
52
  fractional <=> other_money.fractional
@@ -233,12 +233,8 @@ class Money
233
233
  if rules[:rounded_infinite_precision]
234
234
  formatted = ((BigDecimal(formatted) * currency.subunit_to_unit).round / BigDecimal(currency.subunit_to_unit.to_s)).to_s("F")
235
235
  formatted.gsub!(/\..*/) do |decimal_part|
236
- if decimal_part == '.0'
237
- ''
238
- else
239
- decimal_part << '0' while decimal_part.length < (currency.decimal_places + 1)
240
- decimal_part
241
- end
236
+ decimal_part << '0' while decimal_part.length < (currency.decimal_places + 1)
237
+ decimal_part
242
238
  end
243
239
  end
244
240
 
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "money"
4
- s.version = "6.0.0.pre4"
4
+ s.version = "6.0.0.pre5"
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ["Tobias Luetke", "Hongli Lai", "Jeremy McNevin",
7
7
  "Shane Emmons", "Simone Carletti"]
@@ -453,7 +453,7 @@ describe Money, "formatting" do
453
453
  Money.new(BigDecimal.new('12.5'), "USD").format(:rounded_infinite_precision => true).should == "$0.13"
454
454
  Money.new(BigDecimal.new('123.1'), "BHD").format(:rounded_infinite_precision => true).should == "ب.د0.123"
455
455
  Money.new(BigDecimal.new('123.5'), "BHD").format(:rounded_infinite_precision => true).should == "ب.د0.124"
456
- Money.new(BigDecimal.new('100.1'), "USD").format(:rounded_infinite_precision => true).should == "$1"
456
+ Money.new(BigDecimal.new('100.1'), "USD").format(:rounded_infinite_precision => true).should == "$1.00"
457
457
  Money.new(BigDecimal.new('109.5'), "USD").format(:rounded_infinite_precision => true).should == "$1.10"
458
458
  Money.new(BigDecimal.new('1'), "MGA").format(:rounded_infinite_precision => true).should == "Ar0.2"
459
459
  end
@@ -4,38 +4,64 @@ require "spec_helper"
4
4
 
5
5
  describe Money do
6
6
  describe ".new" do
7
- it "rounds the given cents to an integer" do
8
- Money.new(1.00, "USD").cents.should == 1
9
- Money.new(1.01, "USD").cents.should == 1
10
- Money.new(1.50, "USD").cents.should == 2
7
+ let(:initializing_value) { 1 }
8
+ subject(:money) { Money.new(initializing_value) }
9
+
10
+ its(:bank) { should be Money::Bank::VariableExchange.instance }
11
+
12
+ context 'given the initializing value is an integer' do
13
+ let(:initializing_value) { Integer(1) }
14
+ it 'stores the integer as the number of cents' do
15
+ expect(money.cents).to eq initializing_value
16
+ end
11
17
  end
12
18
 
13
- it "is associated to the singleton instance of Bank::VariableExchange by default" do
14
- Money.new(0).bank.should be(Money::Bank::VariableExchange.instance)
19
+ context 'given the initializing value is a float' do
20
+ context 'and the value is 1.00' do
21
+ let(:initializing_value) { 1.00 }
22
+ it { should eq Money.new(1) }
23
+ end
24
+
25
+ context 'and the value is 1.01' do
26
+ let(:initializing_value) { 1.01 }
27
+ it { should eq Money.new(1) }
28
+ end
29
+
30
+ context 'and the value is 1.50' do
31
+ let(:initializing_value) { 1.50 }
32
+ it { should eq Money.new(2) }
33
+ end
15
34
  end
16
35
 
17
- it "handles Rationals" do
18
- n = Rational(1)
19
- Money.new(n).cents.should == 1
36
+ context 'given the initializing value is a rational' do
37
+ let(:initializing_value) { Rational(1) }
38
+ it { should eq Money.new(1) }
20
39
  end
21
40
 
22
- it "handles Floats" do
23
- n = Float("1")
24
- Money.new(n).cents.should == 1
41
+ context 'given the initializing value is money' do
42
+ let(:initializing_value) { Money.new(1_00, Money::Currency.new('NZD')) }
43
+ it { should eq initializing_value }
25
44
  end
26
45
 
27
- context "infinite_precision = true" do
28
- before do
29
- Money.infinite_precision = true
30
- end
46
+ context 'given a currency is not provided' do
47
+ subject(:money) { Money.new(initializing_value) }
48
+ its(:currency) { should eq Money.default_currency }
49
+ end
31
50
 
32
- after do
33
- Money.infinite_precision = false
51
+ context 'given a currency is provided' do
52
+ subject(:money) { Money.new(initializing_value, currency) }
53
+
54
+ context 'and the currency is NZD' do
55
+ let(:currency) { Money::Currency.new('NZD') }
56
+ its(:currency) { should eq Money::Currency.new('NZD') }
34
57
  end
58
+ end
35
59
 
36
- it "doesn't round cents" do
37
- Money.new(1.01, "USD").cents.should == BigDecimal("1.01")
38
- Money.new(1.50, "USD").cents.should == BigDecimal("1.50")
60
+ context "infinite_precision = true" do
61
+ before { Money.stub(:infinite_precision => true) }
62
+ context 'given the initializing value is 1.50' do
63
+ let(:initializing_value) { 1.50 }
64
+ its(:cents) { should eq BigDecimal('1.50') }
39
65
  end
40
66
  end
41
67
  end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0.pre4
4
+ version: 6.0.0.pre5
5
+ prerelease: 6
5
6
  platform: ruby
6
7
  authors:
7
8
  - Tobias Luetke
@@ -12,11 +13,12 @@ authors:
12
13
  autorequire:
13
14
  bindir: bin
14
15
  cert_chain: []
15
- date: 2013-09-14 00:00:00.000000000 Z
16
+ date: 2013-10-01 00:00:00.000000000 Z
16
17
  dependencies:
17
18
  - !ruby/object:Gem::Dependency
18
19
  name: i18n
19
20
  requirement: !ruby/object:Gem::Requirement
21
+ none: false
20
22
  requirements:
21
23
  - - ~>
22
24
  - !ruby/object:Gem::Version
@@ -24,6 +26,7 @@ dependencies:
24
26
  type: :runtime
25
27
  prerelease: false
26
28
  version_requirements: !ruby/object:Gem::Requirement
29
+ none: false
27
30
  requirements:
28
31
  - - ~>
29
32
  - !ruby/object:Gem::Version
@@ -31,6 +34,7 @@ dependencies:
31
34
  - !ruby/object:Gem::Dependency
32
35
  name: rspec
33
36
  requirement: !ruby/object:Gem::Requirement
37
+ none: false
34
38
  requirements:
35
39
  - - ~>
36
40
  - !ruby/object:Gem::Version
@@ -38,6 +42,7 @@ dependencies:
38
42
  type: :development
39
43
  prerelease: false
40
44
  version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
41
46
  requirements:
42
47
  - - ~>
43
48
  - !ruby/object:Gem::Version
@@ -45,6 +50,7 @@ dependencies:
45
50
  - !ruby/object:Gem::Dependency
46
51
  name: yard
47
52
  requirement: !ruby/object:Gem::Requirement
53
+ none: false
48
54
  requirements:
49
55
  - - ~>
50
56
  - !ruby/object:Gem::Version
@@ -52,6 +58,7 @@ dependencies:
52
58
  type: :development
53
59
  prerelease: false
54
60
  version_requirements: !ruby/object:Gem::Requirement
61
+ none: false
55
62
  requirements:
56
63
  - - ~>
57
64
  - !ruby/object:Gem::Version
@@ -59,6 +66,7 @@ dependencies:
59
66
  - !ruby/object:Gem::Dependency
60
67
  name: kramdown
61
68
  requirement: !ruby/object:Gem::Requirement
69
+ none: false
62
70
  requirements:
63
71
  - - ~>
64
72
  - !ruby/object:Gem::Version
@@ -66,6 +74,7 @@ dependencies:
66
74
  type: :development
67
75
  prerelease: false
68
76
  version_requirements: !ruby/object:Gem::Requirement
77
+ none: false
69
78
  requirements:
70
79
  - - ~>
71
80
  - !ruby/object:Gem::Version
@@ -111,34 +120,29 @@ files:
111
120
  homepage: http://rubymoney.github.com/money
112
121
  licenses:
113
122
  - MIT
114
- metadata: {}
115
- post_install_message: |2
116
-
117
- Please note the following API changes in Money version 6
118
-
119
- - Money#amount, Money#dollars methods now return instances of BigDecimal (rather than Float).
120
-
121
- Please read the migration notes at https://github.com/RubyMoney/money#migration-notes
122
- and choose the migration that best suits your application.
123
-
124
- Test responsibly :-)
123
+ post_install_message: ! "\nPlease note the following API changes in Money version
124
+ 6\n\n - Money#amount, Money#dollars methods now return instances of BigDecimal (rather
125
+ than Float).\n\nPlease read the migration notes at https://github.com/RubyMoney/money#migration-notes\nand
126
+ choose the migration that best suits your application.\n\nTest responsibly :-)\n"
125
127
  rdoc_options: []
126
128
  require_paths:
127
129
  - lib
128
130
  required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
129
132
  requirements:
130
- - - '>='
133
+ - - ! '>='
131
134
  - !ruby/object:Gem::Version
132
135
  version: 1.8.7
133
136
  required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
134
138
  requirements:
135
- - - '>'
139
+ - - ! '>'
136
140
  - !ruby/object:Gem::Version
137
141
  version: 1.3.1
138
142
  requirements: []
139
143
  rubyforge_project:
140
- rubygems_version: 2.0.3
144
+ rubygems_version: 1.8.23
141
145
  signing_key:
142
- specification_version: 4
146
+ specification_version: 3
143
147
  summary: Money and currency exchange support library.
144
148
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: ea888a5a751fe5366637910259bed324998d8946
4
- data.tar.gz: 23c2300799b945f0ae892d71bc64511e1978d209
5
- SHA512:
6
- metadata.gz: c14c97b517d52e3e78ab675b033eb2f59a2d0d46315d592bc928d87fda3896c2b90a163512468697a8817395db147f98894aa9fc24b6b433b59a33892947386c
7
- data.tar.gz: 05ac021536a9b31669856f93a47ccec21605fac4c99b0e828b579dbea7df6a4945dfe6742f71b25e19df28989014b553cccb84a8e2169ea08dccfecb76e88957