monetize 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/CONTRIBUTING.md +17 -0
- data/lib/monetize.rb +37 -9
- data/lib/monetize/version.rb +1 -1
- data/monetize.gemspec +1 -1
- data/spec/monetize_spec.rb +33 -10
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5993b4139001864566f5938e83eb0dbd3e6346c1
|
4
|
+
data.tar.gz: 70a6f8947b3c53c688f3fd99c9c6dee3b469a13a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aeaf837897719780e6034acd08afb139d33a96946905fd85f67a1fcf6a9577c35c236c89162da48f7dcc52b7c05a15b7775b11054022f9f93c7385fc8b95653f
|
7
|
+
data.tar.gz: 93040c8ac2c3e29625dacd7ab46494738e02c255bf193f52a0e5d159c2dd25f971596977d685e991eebb3928355709e8e12d63f3802c44b7c9374346d7cd3c76
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Contribution Guidelines
|
2
|
+
|
3
|
+
## Steps
|
4
|
+
|
5
|
+
1. Fork [the repo](https://github.com/RubyMoney/monetize)
|
6
|
+
2. Grab dependencies: `bundle install`
|
7
|
+
3. Make sure everything is working: `bundle exec rspec spec`
|
8
|
+
4. Make your changes
|
9
|
+
5. Test your changes
|
10
|
+
5. Create a Pull Request
|
11
|
+
6. Celebrate!!!!!
|
12
|
+
|
13
|
+
## Notes
|
14
|
+
|
15
|
+
When contributing, please make sure to update the CHANGELOG when you submit
|
16
|
+
your pull request. Upon merging of your first pull request, you will be
|
17
|
+
given commit access to the repository.
|
data/lib/monetize.rb
CHANGED
@@ -6,6 +6,14 @@ require "monetize/version"
|
|
6
6
|
|
7
7
|
module Monetize
|
8
8
|
|
9
|
+
CURRENCY_SYMBOLS = {
|
10
|
+
"$" => "USD",
|
11
|
+
"€" => "EUR",
|
12
|
+
"£" => "GBP",
|
13
|
+
"R$" => "BRL",
|
14
|
+
"R" => "ZAR"
|
15
|
+
}
|
16
|
+
|
9
17
|
# Class methods
|
10
18
|
class << self
|
11
19
|
# @attr_accessor [true, false] assume_from_symbol Use this to enable the
|
@@ -16,15 +24,10 @@ module Monetize
|
|
16
24
|
def self.parse(input, currency = Money.default_currency)
|
17
25
|
input = input.to_s.strip
|
18
26
|
|
19
|
-
computed_currency =
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
when /^£/ then "GBP"
|
24
|
-
end
|
25
|
-
else
|
26
|
-
input[/[A-Z]{2,3}/]
|
27
|
-
end
|
27
|
+
computed_currency = compute_currency(input)
|
28
|
+
if not assume_from_symbol
|
29
|
+
computed_currency = input[/[A-Z]{2,3}/] || currency
|
30
|
+
end
|
28
31
|
|
29
32
|
currency = computed_currency || currency || Money.default_currency
|
30
33
|
currency = Money::Currency.wrap(currency)
|
@@ -143,4 +146,29 @@ module Monetize
|
|
143
146
|
|
144
147
|
negative ? cents * -1 : cents
|
145
148
|
end
|
149
|
+
|
150
|
+
private
|
151
|
+
|
152
|
+
def self.contains_currency_symbol?(amount)
|
153
|
+
currency_symbol_regex === amount
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.compute_currency(amount)
|
157
|
+
if contains_currency_symbol?(amount)
|
158
|
+
matches = amount.match(currency_symbol_regex)
|
159
|
+
CURRENCY_SYMBOLS[matches[:symbol]]
|
160
|
+
else
|
161
|
+
amount[/[A-Z]{2,3}/]
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def self.regex_safe_symbols
|
166
|
+
CURRENCY_SYMBOLS.keys.map { |key|
|
167
|
+
Regexp.escape(key)
|
168
|
+
}.join('|')
|
169
|
+
end
|
170
|
+
|
171
|
+
def self.currency_symbol_regex
|
172
|
+
/\A(?<symbol>#{regex_safe_symbols})/
|
173
|
+
end
|
146
174
|
end
|
data/lib/monetize/version.rb
CHANGED
data/monetize.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "money", "~> 6.
|
21
|
+
spec.add_dependency "money", "~> 6.2.0"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
spec.add_development_dependency "rake"
|
data/spec/monetize_spec.rb
CHANGED
@@ -19,41 +19,64 @@ describe Monetize do
|
|
19
19
|
expect(Monetize.parse('EUR 1.111.234.567,89')).to eq Money.new(111123456789, 'EUR')
|
20
20
|
end
|
21
21
|
|
22
|
-
describe 'currency
|
22
|
+
describe 'currency detection' do
|
23
|
+
|
23
24
|
context 'opted in' do
|
24
|
-
before do
|
25
|
+
before :all do
|
25
26
|
Monetize.assume_from_symbol = true
|
26
27
|
end
|
27
28
|
|
28
|
-
after do
|
29
|
+
after :all do
|
29
30
|
Monetize.assume_from_symbol = false
|
30
31
|
end
|
31
32
|
|
32
|
-
it "parses formatted inputs with
|
33
|
-
original_currency = Money.default_currency
|
34
|
-
Money.default_currency = "EUR"
|
35
|
-
Money.default_currency = original_currency
|
33
|
+
it "parses formatted inputs with Euros passed as a symbol" do
|
36
34
|
expect(Monetize.parse("€5.95")).to eq Money.new(595, 'EUR')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "parses formatted inputs with Euros passed as a symbol with surrounding space" do
|
37
38
|
expect(Monetize.parse(" €5.95 ")).to eq Money.new(595, 'EUR')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "parses formatted inputs with British Pounds Sterling passed as a symbol" do
|
38
42
|
expect(Monetize.parse("£9.99")).to eq Money.new(999, 'GBP')
|
39
43
|
end
|
40
44
|
|
45
|
+
it "parses formatted inputs with South African Rand passed as a symbol" do
|
46
|
+
expect(Monetize.parse("R9.99")).to eq Money.new(999, 'ZAR')
|
47
|
+
end
|
48
|
+
|
49
|
+
it "parses formatted inputs with Brazilian real passed as a symbol" do
|
50
|
+
expect(Monetize.parse("R$R9.99")).to eq Money.new(999, 'BRL')
|
51
|
+
end
|
52
|
+
|
41
53
|
it 'should assume default currency if not a recognised symbol' do
|
42
54
|
expect(Monetize.parse("L9.99")).to eq Money.new(999, 'USD')
|
43
55
|
end
|
44
56
|
end
|
57
|
+
|
45
58
|
context 'opted out' do
|
46
59
|
before do
|
47
60
|
Monetize.assume_from_symbol = false
|
48
61
|
end
|
49
|
-
|
50
|
-
|
62
|
+
|
63
|
+
it "ignores the Euro symbol" do
|
51
64
|
expect(Monetize.parse("€5.95")).to eq Money.new(595, 'USD')
|
65
|
+
end
|
66
|
+
|
67
|
+
it "ignores the South African Rand symbol" do
|
68
|
+
expect(Monetize.parse("R5.95")).to eq Money.new(595, 'USD')
|
69
|
+
end
|
70
|
+
|
71
|
+
it "ignores the Euro symbol with surrounding spaces" do
|
52
72
|
expect(Monetize.parse(" €5.95 ")).to eq Money.new(595, 'USD')
|
53
|
-
|
73
|
+
end
|
54
74
|
|
75
|
+
it "ignores the British Pounds Sterling symbol" do
|
76
|
+
expect(Monetize.parse("£9.99")).to eq Money.new(999, 'USD')
|
55
77
|
end
|
56
78
|
end
|
79
|
+
|
57
80
|
it 'should opt out by default' do
|
58
81
|
expect(Monetize.assume_from_symbol).to be_falsy
|
59
82
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monetize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Emmons
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: money
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 6.
|
19
|
+
version: 6.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 6.
|
26
|
+
version: 6.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -76,6 +76,8 @@ files:
|
|
76
76
|
- ".coveralls.yml"
|
77
77
|
- ".gitignore"
|
78
78
|
- ".travis.yml"
|
79
|
+
- CHANGELOG.md
|
80
|
+
- CONTRIBUTING.md
|
79
81
|
- Gemfile
|
80
82
|
- LICENSE.txt
|
81
83
|
- README.md
|