money_helper 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.
- data/lib/money_helper.rb +19 -12
- data/spec/money_helper_spec.rb +174 -0
- metadata +64 -7
data/lib/money_helper.rb
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
+
require 'active_support/core_ext/object/blank'
|
4
|
+
require 'money'
|
5
|
+
|
3
6
|
module MoneyHelper
|
4
7
|
|
5
|
-
SYMBOL_ONLY = %w{USD GBP EUR
|
8
|
+
SYMBOL_ONLY = %w{USD GBP EUR MYR TRY} #don't use ISO code
|
6
9
|
OK_SYMBOLS = %w{
|
7
|
-
$ £ € ¥ 元 р. L ƒ ৳ P R$ K ₡ D ლ ₵ Q G
|
10
|
+
$ £ € ¥ 元 р. L ƒ ৳ P R$ K ₡ D ლ ₵ Q G ₹ Rp ₪ ₩ ₭ R RM ₨ ₮ դր. C$ ₦ TL ₲ ₱ T ฿ T$ m ₴ ₫ ៛
|
8
11
|
} #ok to include in string
|
9
12
|
|
10
13
|
##
|
11
|
-
# Formats a single amount in the given currency into a price string
|
14
|
+
# Formats a single amount in the given currency into a price string. Defaults to USD if currency not
|
15
|
+
# given.
|
12
16
|
#
|
13
17
|
# = Example
|
14
18
|
#
|
@@ -18,16 +22,19 @@ module MoneyHelper
|
|
18
22
|
#
|
19
23
|
# amount: (Float)
|
20
24
|
# currency: (String)
|
21
|
-
# number_only: (Boolean) optional flag to exclude currency indicators
|
25
|
+
# number_only: (Boolean) optional flag to exclude currency indicators (retains number formatting
|
26
|
+
# specific to currency)
|
22
27
|
def self.money_to_text(amount, currency, number_only = false)
|
23
28
|
return nil unless amount.present?
|
24
|
-
|
25
|
-
|
26
|
-
|
29
|
+
currency = "USD" if currency.blank?
|
30
|
+
symbol = Money::Currency.new(currency).symbol.strip
|
31
|
+
include_symbol = !number_only && OK_SYMBOLS.include?(symbol)
|
32
|
+
(number_only || SYMBOL_ONLY.include?(currency) ? "" : currency + " ") +
|
33
|
+
Money.parse(amount.ceil, currency).format({
|
27
34
|
no_cents: true,
|
28
35
|
symbol_position: :before,
|
29
|
-
symbol:
|
30
|
-
})
|
36
|
+
symbol: include_symbol
|
37
|
+
}).delete(' ')
|
31
38
|
end
|
32
39
|
|
33
40
|
##
|
@@ -47,11 +54,11 @@ module MoneyHelper
|
|
47
54
|
# currency: (String)
|
48
55
|
# delimiter: (String) optional
|
49
56
|
def self.money_range_to_text(low, high, currency, delimiter = ' - ')
|
50
|
-
if low.
|
57
|
+
if low.blank? && high.blank?
|
51
58
|
nil
|
52
|
-
elsif low.
|
59
|
+
elsif low.blank?
|
53
60
|
"Under " + money_to_text(high, currency)
|
54
|
-
elsif high.
|
61
|
+
elsif high.blank?
|
55
62
|
money_to_text(low, currency) + " and up"
|
56
63
|
elsif low == high
|
57
64
|
money_to_text(low, currency)
|
@@ -0,0 +1,174 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'money_helper'
|
4
|
+
|
5
|
+
describe MoneyHelper do
|
6
|
+
describe "money_to_text" do
|
7
|
+
it "includes only symbol for well-recognizable currencies" do
|
8
|
+
MoneyHelper.money_to_text(30000, "EUR").should eql("€30.000")
|
9
|
+
MoneyHelper.money_to_text(30000, "GBP").should eql("£30,000")
|
10
|
+
MoneyHelper.money_to_text(30000, "MYR").should eql("RM30,000")
|
11
|
+
MoneyHelper.money_to_text(30000, "TRY").should eql("TL30,000")
|
12
|
+
MoneyHelper.money_to_text(30000, "USD").should eql("$30,000")
|
13
|
+
end
|
14
|
+
it "includes ISO code and symbol for ambiguous currencies" do
|
15
|
+
MoneyHelper.money_to_text(30000, "AUD").should eql("AUD $30,000")
|
16
|
+
MoneyHelper.money_to_text(30000, "ARS").should eql("ARS $30.000")
|
17
|
+
MoneyHelper.money_to_text(30000, "BBD").should eql("BBD $30,000")
|
18
|
+
MoneyHelper.money_to_text(30000, "BMD").should eql("BMD $30,000")
|
19
|
+
MoneyHelper.money_to_text(30000, "BND").should eql("BND $30,000")
|
20
|
+
MoneyHelper.money_to_text(30000, "BSD").should eql("BSD $30,000")
|
21
|
+
MoneyHelper.money_to_text(30000, "BZD").should eql("BZD $30,000")
|
22
|
+
MoneyHelper.money_to_text(30000, "CAD").should eql("CAD $30,000")
|
23
|
+
MoneyHelper.money_to_text(30000, "CLP").should eql("CLP $30.000")
|
24
|
+
MoneyHelper.money_to_text(30000, "COP").should eql("COP $30.000")
|
25
|
+
MoneyHelper.money_to_text(30000, "CUC").should eql("CUC $30,000")
|
26
|
+
MoneyHelper.money_to_text(30000, "CUP").should eql("CUP $30,000")
|
27
|
+
MoneyHelper.money_to_text(30000, "DOP").should eql("DOP $30,000")
|
28
|
+
MoneyHelper.money_to_text(30000, "FJD").should eql("FJD $30,000")
|
29
|
+
MoneyHelper.money_to_text(30000, "GYD").should eql("GYD $30,000")
|
30
|
+
MoneyHelper.money_to_text(30000, "HKD").should eql("HKD $30,000")
|
31
|
+
MoneyHelper.money_to_text(30000, "JMD").should eql("JMD $30,000")
|
32
|
+
MoneyHelper.money_to_text(30000, "KYD").should eql("KYD $30,000")
|
33
|
+
MoneyHelper.money_to_text(30000, "LRD").should eql("LRD $30,000")
|
34
|
+
MoneyHelper.money_to_text(30000, "MXN").should eql("MXN $30,000")
|
35
|
+
MoneyHelper.money_to_text(30000, "NAD").should eql("NAD $30,000")
|
36
|
+
MoneyHelper.money_to_text(30000, "NZD").should eql("NZD $30,000")
|
37
|
+
MoneyHelper.money_to_text(30000, "SBD").should eql("SBD $30,000")
|
38
|
+
MoneyHelper.money_to_text(30000, "SGD").should eql("SGD $30,000")
|
39
|
+
MoneyHelper.money_to_text(30000, "SRD").should eql("SRD $30,000")
|
40
|
+
MoneyHelper.money_to_text(30000, "TWD").should eql("TWD $30,000")
|
41
|
+
MoneyHelper.money_to_text(30000, "TTD").should eql("TTD $30,000")
|
42
|
+
MoneyHelper.money_to_text(30000, "UYU").should eql("UYU $30.000")
|
43
|
+
MoneyHelper.money_to_text(30000, "XCD").should eql("XCD $30,000")
|
44
|
+
MoneyHelper.money_to_text(30000, "ZWL").should eql("ZWL $30,000")
|
45
|
+
|
46
|
+
MoneyHelper.money_to_text(30000, "FKP").should eql("FKP £30,000")
|
47
|
+
MoneyHelper.money_to_text(30000, "GIP").should eql("GIP £30,000")
|
48
|
+
MoneyHelper.money_to_text(30000, "SDG").should eql("SDG £30,000")
|
49
|
+
MoneyHelper.money_to_text(30000, "SHP").should eql("SHP £30,000")
|
50
|
+
|
51
|
+
MoneyHelper.money_to_text(30000, "CNY").should eql("CNY ¥30,000")
|
52
|
+
MoneyHelper.money_to_text(30000, "JPY").should eql("JPY ¥30,000")
|
53
|
+
|
54
|
+
MoneyHelper.money_to_text(30000, "ALL").should eql("ALL L30,000")
|
55
|
+
MoneyHelper.money_to_text(30000, "HNL").should eql("HNL L30,000")
|
56
|
+
MoneyHelper.money_to_text(30000, "LSL").should eql("LSL L30,000")
|
57
|
+
MoneyHelper.money_to_text(30000, "MDL").should eql("MDL L30,000")
|
58
|
+
MoneyHelper.money_to_text(30000, "RON").should eql("RON L30.000")
|
59
|
+
MoneyHelper.money_to_text(30000, "SZL").should eql("SZL L30,000")
|
60
|
+
|
61
|
+
MoneyHelper.money_to_text(30000, "ANG").should eql("ANG ƒ30.000")
|
62
|
+
MoneyHelper.money_to_text(30000, "AWG").should eql("AWG ƒ30,000")
|
63
|
+
|
64
|
+
MoneyHelper.money_to_text(30000, "BWP").should eql("BWP P30,000")
|
65
|
+
MoneyHelper.money_to_text(30000, "MOP").should eql("MOP P30,000")
|
66
|
+
|
67
|
+
MoneyHelper.money_to_text(30000, "CRC").should eql("CRC ₡30.000")
|
68
|
+
MoneyHelper.money_to_text(30000, "SVC").should eql("SVC ₡30,000")
|
69
|
+
|
70
|
+
MoneyHelper.money_to_text(30000, "MUR").should eql("MUR ₨30,000")
|
71
|
+
MoneyHelper.money_to_text(30000, "NPR").should eql("NPR ₨30,000")
|
72
|
+
MoneyHelper.money_to_text(30000, "PKR").should eql("PKR ₨30,000")
|
73
|
+
MoneyHelper.money_to_text(30000, "SCR").should eql("SCR ₨30,000")
|
74
|
+
end
|
75
|
+
it "includes ISO code and symbol for difficult to recognize symbols" do
|
76
|
+
MoneyHelper.money_to_text(30000, "AMD").should eql("AMD դր.30,000")
|
77
|
+
MoneyHelper.money_to_text(30000, "BDT").should eql("BDT ৳30,000")
|
78
|
+
MoneyHelper.money_to_text(30000, "BRL").should eql("BRL R$30.000")
|
79
|
+
MoneyHelper.money_to_text(30000, "GMD").should eql("GMD D30,000")
|
80
|
+
MoneyHelper.money_to_text(30000, "GEL").should eql("GEL ლ30,000")
|
81
|
+
MoneyHelper.money_to_text(30000, "GHS").should eql("GHS ₵30,000")
|
82
|
+
MoneyHelper.money_to_text(30000, "GTQ").should eql("GTQ Q30,000")
|
83
|
+
MoneyHelper.money_to_text(30000, "HTG").should eql("HTG G30,000")
|
84
|
+
MoneyHelper.money_to_text(30000, "IDR").should eql("IDR Rp30.000")
|
85
|
+
MoneyHelper.money_to_text(30000, "ILS").should eql("ILS ₪30,000")
|
86
|
+
MoneyHelper.money_to_text(30000, "INR").should eql("INR ₹30,000")
|
87
|
+
MoneyHelper.money_to_text(30000, "KHR").should eql("KHR ៛30,000")
|
88
|
+
MoneyHelper.money_to_text(30000, "KPW").should eql("KPW ₩30,000")
|
89
|
+
MoneyHelper.money_to_text(30000, "LAK").should eql("LAK ₭30,000")
|
90
|
+
MoneyHelper.money_to_text(30000, "MNT").should eql("MNT ₮30,000")
|
91
|
+
MoneyHelper.money_to_text(30000, "NIO").should eql("NIO C$30,000")
|
92
|
+
MoneyHelper.money_to_text(30000, "NGN").should eql("NGN ₦30,000")
|
93
|
+
MoneyHelper.money_to_text(30000, "PGK").should eql("PGK K30,000")
|
94
|
+
MoneyHelper.money_to_text(30000, "PHP").should eql("PHP ₱30,000")
|
95
|
+
MoneyHelper.money_to_text(30000, "PYG").should eql("PYG ₲30,000")
|
96
|
+
MoneyHelper.money_to_text(30000, "RUB").should eql("RUB р.30.000")
|
97
|
+
MoneyHelper.money_to_text(30000, "THB").should eql("THB ฿30,000")
|
98
|
+
MoneyHelper.money_to_text(30000, "TOP").should eql("TOP T$30,000")
|
99
|
+
MoneyHelper.money_to_text(30000, "TMT").should eql("TMT m30,000")
|
100
|
+
MoneyHelper.money_to_text(30000, "UAH").should eql("UAH ₴30,000")
|
101
|
+
MoneyHelper.money_to_text(30000, "VND").should eql("VND ₫30.000")
|
102
|
+
MoneyHelper.money_to_text(30000, "WST").should eql("WST T30,000")
|
103
|
+
MoneyHelper.money_to_text(30000, "ZAR").should eql("ZAR R30,000")
|
104
|
+
end
|
105
|
+
it "includes only ISO code for RTL symbols" do
|
106
|
+
MoneyHelper.money_to_text(30000, "AFN").should eql("AFN 30,000")
|
107
|
+
MoneyHelper.money_to_text(30000, "DZD").should eql("DZD 30,000")
|
108
|
+
MoneyHelper.money_to_text(30000, "BHD").should eql("BHD 30,000")
|
109
|
+
MoneyHelper.money_to_text(30000, "EGP").should eql("EGP 30,000")
|
110
|
+
MoneyHelper.money_to_text(30000, "IRR").should eql("IRR 30,000")
|
111
|
+
MoneyHelper.money_to_text(30000, "IQD").should eql("IQD 30,000")
|
112
|
+
MoneyHelper.money_to_text(30000, "JOD").should eql("JOD 30,000")
|
113
|
+
MoneyHelper.money_to_text(30000, "KWD").should eql("KWD 30,000")
|
114
|
+
MoneyHelper.money_to_text(30000, "LBP").should eql("LBP 30,000")
|
115
|
+
MoneyHelper.money_to_text(30000, "LYD").should eql("LYD 30,000")
|
116
|
+
MoneyHelper.money_to_text(30000, "MAD").should eql("MAD 30,000")
|
117
|
+
MoneyHelper.money_to_text(30000, "OMR").should eql("OMR 30,000")
|
118
|
+
MoneyHelper.money_to_text(30000, "JOD").should eql("JOD 30,000")
|
119
|
+
MoneyHelper.money_to_text(30000, "QAR").should eql("QAR 30,000")
|
120
|
+
MoneyHelper.money_to_text(30000, "SAR").should eql("SAR 30,000")
|
121
|
+
MoneyHelper.money_to_text(30000, "SYP").should eql("SYP 30,000")
|
122
|
+
MoneyHelper.money_to_text(30000, "TND").should eql("TND 30,000")
|
123
|
+
MoneyHelper.money_to_text(30000, "AED").should eql("AED 30,000")
|
124
|
+
MoneyHelper.money_to_text(30000, "YER").should eql("YER 30,000")
|
125
|
+
end
|
126
|
+
it "defaults to USD when an empty string or nil is passed as the currency" do
|
127
|
+
MoneyHelper.money_to_text(30000, "").should eql("$30,000")
|
128
|
+
MoneyHelper.money_to_text(30000, nil).should eql("$30,000")
|
129
|
+
end
|
130
|
+
it "returns only formatted numeral when number_only = true" do
|
131
|
+
MoneyHelper.money_to_text(30000, "EUR", true).should eql("30.000")
|
132
|
+
MoneyHelper.money_to_text(30000, "AUD", true).should eql("30,000")
|
133
|
+
MoneyHelper.money_to_text(30000, "AMD", true).should eql("30,000")
|
134
|
+
MoneyHelper.money_to_text(30000, "AFN", true).should eql("30,000")
|
135
|
+
end
|
136
|
+
it "returns only the formatted numeral when number_only = true" do
|
137
|
+
MoneyHelper.money_to_text(30000, "EUR", true).should eql("30.000")
|
138
|
+
MoneyHelper.money_to_text(30000, "AUD", true).should eql("30,000")
|
139
|
+
MoneyHelper.money_to_text(30000, "AMD", true).should eql("30,000")
|
140
|
+
MoneyHelper.money_to_text(30000, "AFN", true).should eql("30,000")
|
141
|
+
end
|
142
|
+
it "returns nil if amount passed in is whitespace, empty string, or nil" do
|
143
|
+
MoneyHelper.money_to_text(" ", "USD").should be_nil
|
144
|
+
MoneyHelper.money_to_text("", "USD").should be_nil
|
145
|
+
MoneyHelper.money_to_text(nil, "USD").should be_nil
|
146
|
+
end
|
147
|
+
end
|
148
|
+
describe "money_range_to_text" do
|
149
|
+
it "includes no indicator for currency for the upper amount in range" do
|
150
|
+
MoneyHelper.money_range_to_text(30000, 40000, "USD").should eql("$30,000 - 40,000")
|
151
|
+
MoneyHelper.money_range_to_text(30000, 40000, "AUD").should eql("AUD $30,000 - 40,000")
|
152
|
+
MoneyHelper.money_range_to_text(30000, 40000, "AMD").should eql("AMD դր.30,000 - 40,000")
|
153
|
+
MoneyHelper.money_range_to_text(30000, 40000, "AFN").should eql("AFN 30,000 - 40,000")
|
154
|
+
end
|
155
|
+
it "uses the special range amount delimeter when supplied" do
|
156
|
+
MoneyHelper.money_range_to_text(30000, 40000, "USD", "-").should eql("$30,000-40,000")
|
157
|
+
MoneyHelper.money_range_to_text(30000, 40000, "AUD", "-").should eql("AUD $30,000-40,000")
|
158
|
+
MoneyHelper.money_range_to_text(30000, 40000, "AMD", "-").should eql("AMD դր.30,000-40,000")
|
159
|
+
MoneyHelper.money_range_to_text(30000, 40000, "AFN", "-").should eql("AFN 30,000-40,000")
|
160
|
+
end
|
161
|
+
it "prefixes the text 'Under ' when low amount not given" do
|
162
|
+
MoneyHelper.money_range_to_text(nil, 40000, "USD").should eql("Under $40,000")
|
163
|
+
end
|
164
|
+
it "appends the text ' and up' when high amount not given" do
|
165
|
+
MoneyHelper.money_range_to_text(30000, nil, "USD").should eql("$30,000 and up")
|
166
|
+
end
|
167
|
+
it "treats as a single price when low amount and high amount are identical" do
|
168
|
+
MoneyHelper.money_range_to_text(30000, 30000, "USD").should eql("$30,000")
|
169
|
+
end
|
170
|
+
it "returns nil when both amounts are nil" do
|
171
|
+
MoneyHelper.money_range_to_text(nil, nil, "USD").should be_nil
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,18 +10,68 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-07-
|
14
|
-
dependencies:
|
13
|
+
date: 2013-07-16 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: money
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 5.1.1
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 5.1.1
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: activesupport
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '3.2'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.2'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
15
63
|
description: A simple class to assist in formatting unambiguous prices and price ranges
|
16
|
-
in international currencies
|
64
|
+
in international currencies in a Roman Script context.
|
17
65
|
email: sahil@artsymail.net
|
18
66
|
executables: []
|
19
67
|
extensions: []
|
20
68
|
extra_rdoc_files: []
|
21
69
|
files:
|
22
70
|
- lib/money_helper.rb
|
23
|
-
|
24
|
-
|
71
|
+
- spec/money_helper_spec.rb
|
72
|
+
homepage: https://github.com/syakhmi/money_helper
|
73
|
+
licenses:
|
74
|
+
- MIT
|
25
75
|
post_install_message:
|
26
76
|
rdoc_options: []
|
27
77
|
require_paths:
|
@@ -32,16 +82,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
32
82
|
- - ! '>='
|
33
83
|
- !ruby/object:Gem::Version
|
34
84
|
version: '0'
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
hash: -2590949666229956668
|
35
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
89
|
none: false
|
37
90
|
requirements:
|
38
91
|
- - ! '>='
|
39
92
|
- !ruby/object:Gem::Version
|
40
93
|
version: '0'
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
hash: -2590949666229956668
|
41
97
|
requirements: []
|
42
98
|
rubyforge_project:
|
43
99
|
rubygems_version: 1.8.25
|
44
100
|
signing_key:
|
45
101
|
specification_version: 3
|
46
102
|
summary: MoneyHelper international price formatting utility
|
47
|
-
test_files:
|
103
|
+
test_files:
|
104
|
+
- spec/money_helper_spec.rb
|