mumboe-currency 0.5.2 → 0.6

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.
@@ -124,6 +124,7 @@ end
124
124
 
125
125
  $:.unshift(File.expand_path(File.dirname(__FILE__))) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
126
126
 
127
+ require 'bigdecimal'
127
128
  require 'currency/currency_version'
128
129
  require 'currency/config'
129
130
  require 'currency/exception'
@@ -61,8 +61,8 @@ class Currency::Config
61
61
  result
62
62
  end
63
63
 
64
-
65
- @@identity = Proc.new { |x| x } # :nodoc:
64
+ # using BigDecimal to avoid floating point rounding errors.
65
+ @@identity = Proc.new { |x| BigDecimal.new(x.to_s) } # :nodoc:
66
66
 
67
67
  # Returns the current Float conversion filter.
68
68
  # Can be used to set rounding or truncation policies when converting
@@ -9,7 +9,7 @@ class Currency::Currency::Factory
9
9
 
10
10
  # Returns the default Currency::Factory.
11
11
  def self.default
12
- @@default ||= self.new
12
+ @@default = self.new
13
13
  end
14
14
  # Sets the default Currency::Factory.
15
15
  def self.default=(x)
@@ -1,5 +1,5 @@
1
1
  module Currency
2
- CurrencyVersion = '0.5'
2
+ CurrencyVersion = '0.6'
3
3
  end
4
4
  # DO NOT EDIT
5
5
  # This file is auto-generated by build scripts.
@@ -213,7 +213,7 @@ class Currency::Money
213
213
  #
214
214
  # Right side must be Number.
215
215
  def *(x)
216
- new_rep(@rep * x)
216
+ new_rep(@rep * x)
217
217
  end
218
218
 
219
219
  # Money / Money => Float (ratio)
@@ -83,7 +83,7 @@ class Currency::Parser
83
83
  whole = md[2]
84
84
  part = md[3]
85
85
 
86
- if part.length != currency.scale
86
+ if part.length != currency.scale_exp
87
87
  currency.scale = 10**part.length if part.length > 1
88
88
 
89
89
  # Pad decimal places with additional '0'
@@ -1,7 +1,6 @@
1
1
  # various tests to verify latest revisions
2
2
  require "test/test_base"
3
3
  require 'currency'
4
-
5
4
  module Currency
6
5
 
7
6
  class StringTest < TestBase
@@ -49,6 +48,84 @@ module Currency
49
48
  assert_equal "$0.50", "0.5".money.to_s
50
49
  end
51
50
 
51
+ def test_string_number
52
+ m = "10.12".money*100
53
+ assert_equal "$1,012.00", m.to_s
54
+ end
55
+
56
+ def test_float_number
57
+ m = 10.12.money*100
58
+ assert_equal "$1,012.00", m.to_s
59
+ end
60
+
61
+ def test_bigdecimal
62
+ assert (BigDecimal.new("1.2") - BigDecimal("1.0")) == BigDecimal("0.2")
63
+ end
64
+
65
+ def test_side_effects
66
+ m = "1000.00".money
67
+ s = "500.000".money
68
+ assert_equal "$1,000.00", m.to_s
69
+ end
70
+
71
+ def test_app_string_not_money
72
+ value = "xxxx"
73
+ assert_raise(::Currency::Exception::InvalidMoneyString) {
74
+ ::Currency.Money(value).to_s(:symbol => false, :code => true).split
75
+ }
76
+ end
77
+
78
+ def test_app_money_string
79
+ value = "1000"
80
+ arr = ::Currency.Money(value).to_s(:symbol => false, :code => true).split
81
+ assert_equal 'USD', arr[0]
82
+ assert_equal '1,000.00', arr[1]
83
+ end
84
+
85
+ def test_app_money_string_with_decimals
86
+ value = "1000.234"
87
+ arr = ::Currency.Money(value).to_s(:symbol => false, :code => true).split
88
+ assert_equal 'USD', arr[0]
89
+ assert_equal '1,000.234', arr[1]
90
+ end
91
+
92
+ def test_app_money_string_with_dollar
93
+ value = "$1000.234"
94
+ arr = ::Currency.Money(value).to_s(:symbol => false, :code => true).split
95
+ assert_equal 'USD', arr[0]
96
+ assert_equal '1,000.234', arr[1]
97
+ end
98
+
99
+ def test_app_money_string_with_yuan
100
+ value = "¥1000.234"
101
+ arr = ::Currency.Money(value).to_s(:symbol => false, :code => true).split
102
+ assert_equal 'CNY', arr[0]
103
+ assert_equal '1,000.234', arr[1]
104
+ end
105
+
106
+ def test_money_string_to_f
107
+ value = "1000.234"
108
+ f =::Currency.Money(value).to_f
109
+ assert_equal 1000.234, f
110
+ end
111
+
112
+ def test_money_int_to_f
113
+ value = 1000
114
+ f =::Currency.Money(value).to_f
115
+ assert_equal 1000.0, f
116
+ end
117
+
118
+ def test_money_to_f
119
+ value = "$1000.234"
120
+ f =::Currency.Money(value).to_f
121
+ assert_equal 1000.234, f
122
+ end
123
+
124
+ def test_money_with_1_decimal_to_f
125
+ value = "$1000.2"
126
+ f =::Currency.Money(value).to_f
127
+ assert_equal 1000.2, f
128
+ end
52
129
  end
53
130
 
54
131
  end
metadata CHANGED
@@ -1,20 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumboe-currency
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ hash: 7
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 6
9
+ version: "0.6"
5
10
  platform: ruby
6
11
  authors:
7
- - "Mike Bradford (modifier: 47primes)"
12
+ - John Liu & Eric Stewart
8
13
  autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-12 00:00:00 -06:00
13
- default_executable:
17
+ date: 2011-04-26 00:00:00 Z
14
18
  dependencies: []
15
19
 
16
20
  description:
17
- email: mbradford@47primes.com
21
+ email: johnl@mumboe.com
18
22
  executables:
19
23
  - currency_historical_rate_load
20
24
  extensions: []
@@ -58,7 +62,6 @@ files:
58
62
  - lib/currency.rb
59
63
  - test/string_test.rb
60
64
  - test/test_base.rb
61
- has_rdoc: true
62
65
  homepage: http://rubyforge.org/projects/currency/
63
66
  licenses: []
64
67
 
@@ -68,23 +71,29 @@ rdoc_options: []
68
71
  require_paths:
69
72
  - lib
70
73
  required_ruby_version: !ruby/object:Gem::Requirement
74
+ none: false
71
75
  requirements:
72
76
  - - ">="
73
77
  - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
74
81
  version: "0"
75
- version:
76
82
  required_rubygems_version: !ruby/object:Gem::Requirement
83
+ none: false
77
84
  requirements:
78
85
  - - ">="
79
86
  - !ruby/object:Gem::Version
87
+ hash: 3
88
+ segments:
89
+ - 0
80
90
  version: "0"
81
- version:
82
91
  requirements: []
83
92
 
84
93
  rubyforge_project:
85
- rubygems_version: 1.3.5
94
+ rubygems_version: 1.7.2
86
95
  signing_key:
87
96
  specification_version: 3
88
- summary: Extends the RubyForge version to handle all currency symbols listed on xe.com/symbols.php.
97
+ summary: Fixed unwanted side-effects by avoiding shared factory and floating point rounding errors
89
98
  test_files:
90
99
  - test/test_base.rb