formatted-money 0.0.1 → 0.0.2
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 +7 -0
- data/README.md +11 -9
- data/Rakefile +14 -13
- data/lib/formatted-money.rb +128 -122
- data/test/test_all.rb +95 -83
- metadata +14 -35
- data/doc/FormattedMoney.html +0 -1144
- data/doc/FormattedMoney/American.html +0 -255
- data/doc/FormattedMoney/European.html +0 -255
- data/doc/FormattedMoney/NumberNotInFloatFormat.html +0 -123
- data/doc/FormattedMoney/NumberNotInIntegerFormat.html +0 -123
- data/doc/_index.html +0 -162
- data/doc/class_list.html +0 -53
- data/doc/css/common.css +0 -1
- data/doc/css/full_list.css +0 -57
- data/doc/css/style.css +0 -328
- data/doc/file.README.html +0 -108
- data/doc/file_list.html +0 -55
- data/doc/frames.html +0 -28
- data/doc/index.html +0 -108
- data/doc/js/app.js +0 -214
- data/doc/js/full_list.js +0 -173
- data/doc/js/jquery.js +0 -4
- data/doc/method_list.html +0 -196
- data/doc/top-level-namespace.html +0 -112
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d8108feda721b9b4a1ed9df8ddd95b1fc62dd27d
|
4
|
+
data.tar.gz: 7834eab0828b82a007d0edc9b04f715e2212c6e8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f350d6eef1d16d47bc418e12d614ca0c4776e33c724ec1d7a62f074cba4eb9c1762a22290d9a8bb834c4b06de5847e7c77202f0c0608d1cde5662bf5569a0dc9
|
7
|
+
data.tar.gz: d0a1736d403a27467daa373ddd525e6f1b65342b6f3ac655baac4aaf962ee4ea86af8dec59dcc5b136dfeb3641ce0de992a327e4b0f001a9dc8906066e2fc0b2
|
data/README.md
CHANGED
@@ -5,30 +5,32 @@ For all Rubyist that use Integer for storing money values as cents. This is a de
|
|
5
5
|
## Installation and Requirements
|
6
6
|
|
7
7
|
Install the gem and require it:
|
8
|
-
```
|
8
|
+
```
|
9
9
|
$ gem install formatted-money
|
10
|
-
|
10
|
+
```
|
11
|
+
```ruby
|
11
12
|
require 'formatted-money'
|
12
13
|
```
|
13
|
-
formatted-money requires Ruby 1.9.
|
14
|
+
formatted-money requires Ruby 1.9.3. Don't use it with 1.8.x, 1.9.x should work though.
|
15
|
+
|
14
16
|
## Usage
|
15
17
|
|
16
18
|
Formatted float to cents:
|
17
19
|
```ruby
|
18
|
-
FormattedMoney.cents('1.394.000,56') => 139400056
|
20
|
+
FormattedMoney.cents('1.394.000,56') => 139400056
|
19
21
|
FormattedMoney.cents('7.899.994.000,56') => 789999400056
|
20
22
|
```
|
21
23
|
Cents to formatted float:
|
22
24
|
```ruby
|
23
|
-
FormattedMoney.amount(Integer(13820000)) => "138.200,00"
|
25
|
+
FormattedMoney.amount(Integer(13820000)) => "138.200,00"
|
24
26
|
```
|
25
27
|
European and American submodules are available:
|
26
28
|
```ruby
|
27
|
-
FormattedMoney::European.cents('4.000,56') => 400056
|
29
|
+
FormattedMoney::European.cents('4.000,56') => 400056
|
28
30
|
```
|
29
|
-
To change the
|
31
|
+
To change the defaul behaviour:
|
30
32
|
```ruby
|
31
33
|
FormattedMoney.delimiter = ' '
|
32
34
|
FormattedMoney.cents_separator = FormattedMoney::American::CENTS_SEPARATOR
|
33
|
-
FormattedMoney.amount(Integer(13820000)) => "138 200,00"
|
34
|
-
```
|
35
|
+
FormattedMoney.amount(Integer(13820000)) => "138 200,00"
|
36
|
+
```
|
data/Rakefile
CHANGED
@@ -3,30 +3,31 @@ require 'rake'
|
|
3
3
|
require 'rake/testtask'
|
4
4
|
|
5
5
|
gemspec = Gem::Specification.new do |s|
|
6
|
-
s.name =
|
7
|
-
s.version = '0.0.
|
8
|
-
s.author =
|
9
|
-
s.email =
|
10
|
-
s.homepage =
|
6
|
+
s.name = 'formatted-money'
|
7
|
+
s.version = '0.0.2'
|
8
|
+
s.author = 'Josef Strzibny'
|
9
|
+
s.email = 'strzibny@strzibny.name'
|
10
|
+
s.homepage = 'http://github.com/strzibny/formatted-money'
|
11
11
|
s.platform = Gem::Platform::RUBY
|
12
|
-
s.summary =
|
12
|
+
s.summary = 'A dead simple library for converting human-readable money inputs to Integer and back'
|
13
13
|
s.description = <<-EOF
|
14
14
|
For all Rubyist that use Integer for storing money values as cents.
|
15
15
|
This is a dead simple gem for converting money from user inputs to Integer values
|
16
16
|
for storing and fast precise calculations (and back). Does everything you need
|
17
17
|
and nothing else. Well tested.
|
18
18
|
EOF
|
19
|
-
s.require_path =
|
20
|
-
s.required_ruby_version = '>= 1.9.
|
21
|
-
s.files = FileList[
|
19
|
+
s.require_path = 'lib'
|
20
|
+
s.required_ruby_version = '>= 1.9.3'
|
21
|
+
s.files = FileList['LICENSE', 'Rakefile', 'README.md', 'doc/**/*', 'lib/**/*', 'test/*']
|
22
22
|
end
|
23
23
|
|
24
|
-
Gem::PackageTask.new gemspec do |
|
25
|
-
|
24
|
+
Gem::PackageTask.new gemspec do |_p|
|
26
25
|
end
|
27
|
-
|
26
|
+
|
28
27
|
Rake::TestTask.new('test') do |t|
|
29
28
|
t.libs << 'test'
|
30
29
|
t.pattern = 'test/test_*.rb'
|
31
30
|
t.verbose = true
|
32
|
-
end
|
31
|
+
end
|
32
|
+
|
33
|
+
task :default => [:test]
|
data/lib/formatted-money.rb
CHANGED
@@ -4,163 +4,169 @@
|
|
4
4
|
# @license MIT
|
5
5
|
# @author Josef Strzibny
|
6
6
|
module FormattedMoney
|
7
|
-
class NumberNotInFloatFormat < StandardError; end
|
8
|
-
class NumberNotInIntegerFormat < StandardError; end
|
7
|
+
class NumberNotInFloatFormat < StandardError; end
|
8
|
+
class NumberNotInIntegerFormat < StandardError; end
|
9
9
|
|
10
10
|
# American defaults
|
11
11
|
# comma for delimiter and dot for cents separator
|
12
12
|
module American
|
13
13
|
DELIMITER = ','
|
14
14
|
CENTS_SEPARATOR = '.'
|
15
|
-
|
16
|
-
|
15
|
+
|
16
|
+
def self.cents(amount, round = true)
|
17
17
|
FormattedMoney.cents(amount, round, DELIMITER, CENTS_SEPARATOR)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.amount(amount, omit_cents = false)
|
21
|
+
FormattedMoney.amount(amount, omit_cents, DELIMITER, CENTS_SEPARATOR)
|
22
|
+
end
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
# European defaults
|
26
26
|
# dot for delimiter and comma for cents separator
|
27
27
|
module European
|
28
28
|
DELIMITER = '.'
|
29
29
|
CENTS_SEPARATOR = ','
|
30
|
-
|
30
|
+
|
31
31
|
def self.cents(amount, round = true)
|
32
|
-
|
32
|
+
FormattedMoney.cents(amount, round, DELIMITER, CENTS_SEPARATOR)
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.amount(amount, omit_cents = false)
|
36
36
|
FormattedMoney.amount(amount, omit_cents, DELIMITER, CENTS_SEPARATOR)
|
37
37
|
end
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
@@omit_cents = false
|
41
41
|
@@round = true
|
42
42
|
@@delimiter = FormattedMoney::European::DELIMITER
|
43
43
|
@@cents_separator = FormattedMoney::European::CENTS_SEPARATOR
|
44
44
|
@@escape_chars = ['.', '^', '$', '*']
|
45
|
-
|
45
|
+
|
46
46
|
def self.escape_chars=(chars)
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
@@escape_chars = chars
|
48
|
+
end
|
49
|
+
|
50
50
|
def self.omit_cents=(bool)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
51
|
+
@@omit_cents = bool
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.round=(bool)
|
55
|
+
@@round = bool
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.delimiter=(delimiter)
|
59
|
+
@@delimiter = delimiter
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.cents_separator=(cents_separator)
|
63
|
+
@@cents_separator = cents_separator
|
64
|
+
end
|
65
|
+
|
66
|
+
# Format Integer to float number with cents
|
67
|
+
# @return [String] amount in human-readable format
|
68
|
+
def self.amount(amount, omit_cents = @@omit_cents, delimiter = @@delimiter, cents_separator = @@cents_separator)
|
69
|
+
check_integer(amount) unless amount.is_a? Integer
|
70
|
+
|
71
|
+
amount = amount.to_s
|
72
|
+
cents = amount[-2, 2]
|
73
|
+
cents ||= '00'
|
74
|
+
units = amount[0..-3]
|
75
|
+
|
76
|
+
if units.empty?
|
77
|
+
return '0' if omit_cents
|
78
|
+
|
79
|
+
return String('0' + cents_separator + cents)
|
80
|
+
end
|
81
|
+
|
82
|
+
return String(number_with_delimiter(units, delimiter)) if omit_cents
|
83
|
+
|
84
|
+
String(number_with_delimiter(units, delimiter) + cents_separator + cents)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Format the float-formatted input to Integer for saving or for calculation
|
88
|
+
# @return [Integer] money as cents
|
89
|
+
def self.cents(amount, round = @@round, delimiter = @@delimiter, cents_separator = @@cents_separator)
|
90
|
+
delimiter_regex = self.separator_regex(delimiter)
|
91
|
+
cents_separator_regex = self.separator_regex(cents_separator)
|
92
|
+
|
93
|
+
# Only zeros
|
94
|
+
return 0 if self.only_zeros?(amount, delimiter_regex, cents_separator_regex)
|
95
|
+
|
96
|
+
# Already integer
|
97
|
+
return add_zero_cents amount if amount.is_a? Integer
|
98
|
+
|
99
|
+
check_float(amount)
|
100
|
+
if amount[0] == '-'
|
101
|
+
amount[0] = ''
|
102
|
+
negative = true
|
103
|
+
else
|
104
|
+
negative = false
|
105
|
+
end
|
106
|
+
|
101
107
|
# No cents
|
102
108
|
amount = amount.delete(delimiter)
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
109
|
+
return add_zero_cents amount if /^\d+$/.match amount
|
110
|
+
|
111
|
+
# With cents
|
112
|
+
units = amount.gsub(/#{cents_separator_regex}\d+/, '')
|
113
|
+
cents = amount.gsub(/#{units}#{cents_separator_regex}/, '')
|
114
|
+
|
115
|
+
# Round the last cent
|
116
|
+
unless cents[2].nil? && round
|
117
|
+
last_cent = cents[1]
|
118
|
+
|
119
|
+
last_cent = Integer(last_cent) + 1 if Integer(cents[2]) >= 5
|
120
|
+
|
121
|
+
return Integer(units + cents[0] + String(last_cent))
|
122
|
+
end
|
123
|
+
|
124
|
+
if negative
|
125
|
+
Integer('-' + units + cents)
|
126
|
+
else
|
127
|
+
Integer(units + cents)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.add_zero_cents(n)
|
132
|
+
Integer(sprintf('%d00', n))
|
133
|
+
end
|
134
|
+
|
135
|
+
# Check if the given number is formatted as a float -
|
136
|
+
# numbers should contain only digits, commas or dots.
|
137
|
+
# Only numbers like 1.000.000.000,2056 or 2,150.3 are accepted
|
138
|
+
def self.check_float(n)
|
139
|
+
unless /^(-){0,1}[\d\.\,]*$/.match(n.to_s)
|
140
|
+
throw NumberNotInFloatFormat, 'Float numbers can only be made out of digits, commas (,) or dots (.). Dash (-) is accepted at the beginning for negative numbers'
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def self.check_integer(n)
|
145
|
+
unless /^(-){0,1}\d*$/.match(n.to_s)
|
146
|
+
throw NumberNotInIntegerFormat, 'Integer numbers can only be made out of digits. Dash (-) is accepted at the beginning for negative numbers'
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def self.number_with_delimiter(number, delimiter)
|
141
151
|
number.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
|
142
152
|
end
|
143
|
-
|
153
|
+
|
144
154
|
def self.trim_leading_zeros(number)
|
145
155
|
string = number.to_s.gsub(/^[0]*(.*)/, '\\1')
|
146
156
|
string = '0' if string.empty?
|
147
|
-
|
157
|
+
|
148
158
|
string
|
149
159
|
end
|
150
|
-
|
160
|
+
|
151
161
|
def self.separator_regex(separator)
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
return false;
|
162
|
-
end
|
163
|
-
|
164
|
-
return true;
|
162
|
+
return '\\' + "#{separator}" if @@escape_chars.include? separator
|
163
|
+
|
164
|
+
"#{separator}"
|
165
|
+
end
|
166
|
+
|
167
|
+
def self.only_zeros?(number, delimiter, cents_separator)
|
168
|
+
return false unless /^[0#{delimiter}#{cents_separator}]*$/.match(number)
|
169
|
+
|
170
|
+
true
|
165
171
|
end
|
166
|
-
end
|
172
|
+
end
|
data/test/test_all.rb
CHANGED
@@ -1,138 +1,150 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require '
|
4
|
-
require '
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'formatted-money'
|
5
5
|
|
6
|
-
class TestFormattedMoney < Test
|
7
|
-
|
6
|
+
class TestFormattedMoney < Minitest::Test
|
7
|
+
# Defaults to European style
|
8
8
|
def test_conversion_to_cents
|
9
|
-
# Defaults to European style
|
10
9
|
assert_equal Integer(0), FormattedMoney.cents('0')
|
11
10
|
assert_equal Integer(0), FormattedMoney.cents('0,00')
|
12
|
-
assert_equal Integer(
|
13
|
-
assert_equal Integer(
|
14
|
-
assert_equal Integer(
|
15
|
-
assert_equal Integer(
|
11
|
+
assert_equal Integer(400_056), FormattedMoney.cents('4.000,56')
|
12
|
+
assert_equal Integer(4_200_056), FormattedMoney.cents('42.000,56')
|
13
|
+
assert_equal Integer(139_400_056), FormattedMoney.cents('1.394.000,56')
|
14
|
+
assert_equal Integer(789_999_400_056), FormattedMoney.cents('7.899.994.000,56')
|
16
15
|
end
|
17
|
-
|
16
|
+
|
18
17
|
def test_european_conversion_to_cents
|
19
18
|
assert_equal Integer(0), FormattedMoney::European.cents('0')
|
20
19
|
assert_equal Integer(0), FormattedMoney::European.cents('0,00')
|
21
|
-
assert_equal Integer(
|
22
|
-
assert_equal Integer(
|
23
|
-
assert_equal Integer(
|
24
|
-
assert_equal Integer(
|
20
|
+
assert_equal Integer(400_056), FormattedMoney::European.cents('4.000,56')
|
21
|
+
assert_equal Integer(4_200_056), FormattedMoney::European.cents('42.000,56')
|
22
|
+
assert_equal Integer(139_400_056), FormattedMoney::European.cents('1.394.000,56')
|
23
|
+
assert_equal Integer(789_999_400_056), FormattedMoney::European.cents('7.899.994.000,56')
|
25
24
|
end
|
26
|
-
|
25
|
+
|
27
26
|
def test_american_conversion_to_cents
|
28
27
|
assert_equal Integer(0), FormattedMoney::American.cents('0')
|
29
28
|
assert_equal Integer(0), FormattedMoney::American.cents('0.00')
|
30
|
-
assert_equal Integer(
|
31
|
-
assert_equal Integer(
|
32
|
-
assert_equal Integer(
|
33
|
-
assert_equal Integer(
|
29
|
+
assert_equal Integer(400_056), FormattedMoney::American.cents('4,000.56')
|
30
|
+
assert_equal Integer(4_200_056), FormattedMoney::American.cents('42,000.56')
|
31
|
+
assert_equal Integer(139_400_056), FormattedMoney::American.cents('1,394,000.56')
|
32
|
+
assert_equal Integer(789_999_400_056), FormattedMoney::American.cents('7,899,994,000.56')
|
34
33
|
end
|
35
|
-
|
34
|
+
|
35
|
+
# Defaults to European style
|
36
36
|
def test_formatted_amount
|
37
|
-
# Defaults to European style
|
38
37
|
assert_equal '0,00', FormattedMoney.amount(Integer(0))
|
39
38
|
assert_equal '0,00', FormattedMoney.amount(Integer(00))
|
40
|
-
assert_equal '1.000,00', FormattedMoney.amount(Integer(
|
41
|
-
assert_equal '1.234,56', FormattedMoney.amount(Integer(
|
42
|
-
assert_equal '138.200,00', FormattedMoney.amount(Integer(
|
43
|
-
assert_equal '138.555.200,00', FormattedMoney.amount(Integer(
|
44
|
-
assert_equal '26.897.200,00', FormattedMoney.amount(Integer(
|
39
|
+
assert_equal '1.000,00', FormattedMoney.amount(Integer(100_000))
|
40
|
+
assert_equal '1.234,56', FormattedMoney.amount(Integer(123_456))
|
41
|
+
assert_equal '138.200,00', FormattedMoney.amount(Integer(13_820_000))
|
42
|
+
assert_equal '138.555.200,00', FormattedMoney.amount(Integer(13_855_520_000))
|
43
|
+
assert_equal '26.897.200,00', FormattedMoney.amount(Integer(2_689_720_000))
|
45
44
|
end
|
46
|
-
|
45
|
+
|
46
|
+
# Strings containing only numbers should be fine as well
|
47
47
|
def test_formatted_amount_from_string
|
48
|
-
# Strings containing only numbers should be fine as well
|
49
48
|
assert_equal '0,00', FormattedMoney.amount(String('0'))
|
50
49
|
assert_equal '0,00', FormattedMoney.amount(String('00'))
|
51
50
|
assert_equal '138.555.200,00', FormattedMoney.amount('13855520000')
|
52
51
|
end
|
53
|
-
|
52
|
+
|
54
53
|
def test_europen_formatted_amount
|
55
54
|
assert_equal '0,00', FormattedMoney::European.amount(Integer(0))
|
56
55
|
assert_equal '0,00', FormattedMoney::European.amount(Integer(00))
|
57
|
-
assert_equal '1.000,00', FormattedMoney::European.amount(Integer(
|
58
|
-
assert_equal '1.234,56', FormattedMoney::European.amount(Integer(
|
59
|
-
assert_equal '138.200,00', FormattedMoney::European.amount(Integer(
|
60
|
-
assert_equal '138.555.200,00', FormattedMoney::European.amount(Integer(
|
61
|
-
assert_equal '26.897.200,00', FormattedMoney::European.amount(Integer(
|
56
|
+
assert_equal '1.000,00', FormattedMoney::European.amount(Integer(100_000))
|
57
|
+
assert_equal '1.234,56', FormattedMoney::European.amount(Integer(123_456))
|
58
|
+
assert_equal '138.200,00', FormattedMoney::European.amount(Integer(13_820_000))
|
59
|
+
assert_equal '138.555.200,00', FormattedMoney::European.amount(Integer(13_855_520_000))
|
60
|
+
assert_equal '26.897.200,00', FormattedMoney::European.amount(Integer(2_689_720_000))
|
62
61
|
end
|
63
|
-
|
62
|
+
|
64
63
|
def test_american_formatted_amount
|
65
64
|
assert_equal '0.00', FormattedMoney::American.amount(Integer(0))
|
66
65
|
assert_equal '0.00', FormattedMoney::American.amount(Integer(00))
|
67
|
-
assert_equal '1,000.00', FormattedMoney::American.amount(Integer(
|
68
|
-
assert_equal '1,234.56', FormattedMoney::American.amount(Integer(
|
69
|
-
assert_equal '138,200.00', FormattedMoney::American.amount(Integer(
|
70
|
-
assert_equal '138,555,200.00', FormattedMoney::American.amount(Integer(
|
71
|
-
assert_equal '26,897,200.00', FormattedMoney::American.amount(Integer(
|
66
|
+
assert_equal '1,000.00', FormattedMoney::American.amount(Integer(100_000))
|
67
|
+
assert_equal '1,234.56', FormattedMoney::American.amount(Integer(123_456))
|
68
|
+
assert_equal '138,200.00', FormattedMoney::American.amount(Integer(13_820_000))
|
69
|
+
assert_equal '138,555,200.00', FormattedMoney::American.amount(Integer(13_855_520_000))
|
70
|
+
assert_equal '26,897,200.00', FormattedMoney::American.amount(Integer(2_689_720_000))
|
72
71
|
end
|
73
|
-
|
72
|
+
|
74
73
|
def test_check_float
|
75
74
|
FormattedMoney.check_float('123,254')
|
76
75
|
FormattedMoney.check_float('3,254.456')
|
77
|
-
|
78
|
-
|
76
|
+
|
77
|
+
assert_raises (ArgumentError) do
|
79
78
|
FormattedMoney.check_float('123254d')
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_check_integer
|
83
|
+
FormattedMoney.check_integer('123254')
|
84
|
+
FormattedMoney.check_integer(123_254)
|
85
|
+
|
86
|
+
assert_raises (ArgumentError) do
|
87
|
+
FormattedMoney.check_integer('123254d')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
92
91
|
def test_number_with_delimiter
|
93
|
-
assert_equal '1.000.000', FormattedMoney.number_with_delimiter('1000000','.')
|
94
|
-
assert_equal '400|000', FormattedMoney.number_with_delimiter('400000','|')
|
95
|
-
assert_equal '21,000,000,156', FormattedMoney.number_with_delimiter('21000000156',',')
|
96
|
-
|
97
|
-
assert_equal '1 000 000', FormattedMoney.number_with_delimiter('1000000',' ')
|
98
|
-
assert_equal '400 000', FormattedMoney.number_with_delimiter('400000',' ')
|
99
|
-
assert_equal '21 000 000 156', FormattedMoney.number_with_delimiter('21000000156',' ')
|
100
|
-
|
101
|
-
assert_equal '1.000.000', FormattedMoney.number_with_delimiter(
|
102
|
-
assert_equal '400|000', FormattedMoney.number_with_delimiter(
|
103
|
-
assert_equal '21,000,000,156', FormattedMoney.number_with_delimiter(
|
92
|
+
assert_equal '1.000.000', FormattedMoney.number_with_delimiter('1000000', '.')
|
93
|
+
assert_equal '400|000', FormattedMoney.number_with_delimiter('400000', '|')
|
94
|
+
assert_equal '21,000,000,156', FormattedMoney.number_with_delimiter('21000000156', ',')
|
95
|
+
|
96
|
+
assert_equal '1 000 000', FormattedMoney.number_with_delimiter('1000000', ' ')
|
97
|
+
assert_equal '400 000', FormattedMoney.number_with_delimiter('400000', ' ')
|
98
|
+
assert_equal '21 000 000 156', FormattedMoney.number_with_delimiter('21000000156', ' ')
|
99
|
+
|
100
|
+
assert_equal '1.000.000', FormattedMoney.number_with_delimiter(1_000_000, '.')
|
101
|
+
assert_equal '400|000', FormattedMoney.number_with_delimiter(400_000, '|')
|
102
|
+
assert_equal '21,000,000,156', FormattedMoney.number_with_delimiter(21_000_000_156, ',')
|
104
103
|
end
|
105
|
-
|
104
|
+
|
106
105
|
def test_trim_leading_zeros
|
107
106
|
assert_equal '0', FormattedMoney.trim_leading_zeros('0')
|
108
107
|
assert_equal '525', FormattedMoney.trim_leading_zeros('0525')
|
109
108
|
assert_equal '2', FormattedMoney.trim_leading_zeros('0002')
|
110
109
|
assert_equal '300', FormattedMoney.trim_leading_zeros('0300')
|
111
110
|
end
|
112
|
-
|
111
|
+
|
113
112
|
def test_separator_regex
|
114
113
|
FormattedMoney.escape_chars = ['.', '^', '$', '*']
|
115
|
-
|
114
|
+
|
116
115
|
assert_equal '\\.', FormattedMoney.separator_regex('.')
|
117
116
|
assert_equal ',', FormattedMoney.separator_regex(',')
|
118
|
-
|
117
|
+
|
119
118
|
FormattedMoney.escape_chars = []
|
120
|
-
|
119
|
+
|
121
120
|
assert_equal '.', FormattedMoney.separator_regex('.')
|
121
|
+
|
122
|
+
# Back to default
|
123
|
+
FormattedMoney.escape_chars = ['.', '^', '$', '*']
|
122
124
|
end
|
123
|
-
|
125
|
+
|
124
126
|
def test_only_zeros
|
125
127
|
delimiter = '\.'
|
126
128
|
cents_separator = ','
|
127
|
-
|
128
|
-
assert_equal true, FormattedMoney.only_zeros?('0', delimiter, cents_separator)
|
129
|
-
assert_equal true, FormattedMoney.only_zeros?('0,0', delimiter, cents_separator)
|
130
|
-
assert_equal true, FormattedMoney.only_zeros?('0,00', delimiter, cents_separator)
|
131
|
-
assert_equal true, FormattedMoney.only_zeros?('0.00', delimiter, cents_separator)
|
132
|
-
assert_equal true, FormattedMoney.only_zeros?('0.000,0', delimiter, cents_separator)
|
133
|
-
assert_equal true, FormattedMoney.only_zeros?(',0', delimiter, cents_separator)
|
134
|
-
assert_equal false, FormattedMoney.only_zeros?('01', delimiter, cents_separator)
|
135
|
-
assert_equal false, FormattedMoney.only_zeros?('0|0', delimiter, cents_separator)
|
136
|
-
assert_equal false, FormattedMoney.only_zeros?('000500', delimiter, cents_separator)
|
129
|
+
|
130
|
+
assert_equal true, FormattedMoney.only_zeros?('0', delimiter, cents_separator)
|
131
|
+
assert_equal true, FormattedMoney.only_zeros?('0,0', delimiter, cents_separator)
|
132
|
+
assert_equal true, FormattedMoney.only_zeros?('0,00', delimiter, cents_separator)
|
133
|
+
assert_equal true, FormattedMoney.only_zeros?('0.00', delimiter, cents_separator)
|
134
|
+
assert_equal true, FormattedMoney.only_zeros?('0.000,0', delimiter, cents_separator)
|
135
|
+
assert_equal true, FormattedMoney.only_zeros?(',0', delimiter, cents_separator)
|
136
|
+
assert_equal false, FormattedMoney.only_zeros?('01', delimiter, cents_separator)
|
137
|
+
assert_equal false, FormattedMoney.only_zeros?('0|0', delimiter, cents_separator)
|
138
|
+
assert_equal false, FormattedMoney.only_zeros?('000500', delimiter, cents_separator)
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_negative_numbers
|
142
|
+
assert_equal '-1.000,00', FormattedMoney::European.amount(Integer(-100_000))
|
143
|
+
assert_equal '-1.234,56', FormattedMoney::European.amount(Integer(-123_456))
|
144
|
+
assert_equal '-138.200,00', FormattedMoney::European.amount(Integer(-13_820_000))
|
145
|
+
assert_equal '-138.555.200,00', FormattedMoney::European.amount(Integer(-13_855_520_000))
|
146
|
+
assert_equal '-26.897.200,00', FormattedMoney::European.amount(Integer(-2_689_720_000))
|
147
|
+
assert_equal Integer(-139_400_056), FormattedMoney::American.cents('-1,394,000.56')
|
148
|
+
assert_equal Integer(-789_999_400_056), FormattedMoney::American.cents('-7,899,994,000.56')
|
137
149
|
end
|
138
|
-
end
|
150
|
+
end
|