monetize 1.9.0 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ruby.yml +34 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +16 -0
- data/Gemfile +2 -3
- data/README.md +0 -1
- data/lib/monetize.rb +7 -4
- data/lib/monetize/parser.rb +22 -40
- data/lib/monetize/version.rb +1 -1
- data/monetize.gemspec +10 -4
- data/spec/core_extensions_spec.rb +27 -4
- data/spec/monetize_spec.rb +56 -17
- data/spec/spec_helper.rb +0 -2
- metadata +21 -18
- data/.coveralls.yml +0 -1
- data/.travis.yml +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 63f57158028647c2bde5bac4c2186e16e9a3874d6c6d756b08e091d1357fcfcc
|
4
|
+
data.tar.gz: 5dd093ceef480ffd21fbfaa3a0912cdc7421f797c4570a2a8bde9665534aa6ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b4001dd8967421873f84b9b0201bd0985d1388d89c41c2c048498db185cd2d4bdd144c581293fff70e34c5fb88aecbf68f2e3d2d086f1f278f58047e519aebe
|
7
|
+
data.tar.gz: 468cc1fd1f127eb570e8599ef20309240f5e95c5731374848c663995d4935e4bb6773ffd40691d2bd4148c58e51e641806a3d7a97d25851a5877bc74621fe059
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ master ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ master ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
test:
|
18
|
+
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
strategy:
|
21
|
+
matrix:
|
22
|
+
ruby-version: ['2.6', '2.7', '3.0']
|
23
|
+
|
24
|
+
steps:
|
25
|
+
- uses: actions/checkout@v2
|
26
|
+
- name: Set up Ruby
|
27
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
28
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
29
|
+
uses: ruby/setup-ruby@v1
|
30
|
+
with:
|
31
|
+
ruby-version: ${{ matrix.ruby-version }}
|
32
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
33
|
+
- name: Run tests
|
34
|
+
run: bundle exec rspec spec
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.10.0
|
4
|
+
- When using the `assume_from_symbol` option, the currency in the input string will be used over the assumed currency based on symbol. For example, `$1.05 CAD` will use `CAD` instead of `USD`.
|
5
|
+
|
6
|
+
## 1.9.4
|
7
|
+
- Fix symbol parsing that are surrounded by other characters
|
8
|
+
|
9
|
+
## 1.9.3
|
10
|
+
- Fix input parsing when currency symbol after the amount
|
11
|
+
|
12
|
+
## 1.9.2
|
13
|
+
- Respect Money.rounding_mode when parsing strings
|
14
|
+
- Deprecate Monetize.extract_cents
|
15
|
+
|
16
|
+
## 1.9.1
|
17
|
+
- Ruby 2.6 support
|
18
|
+
|
3
19
|
## 1.9.0
|
4
20
|
- Relax Money gem dependency to ~> 6.12
|
5
21
|
- Refactor `Monetize::Parser`
|
data/Gemfile
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem
|
4
|
-
|
5
|
-
# JSON gem no longer supports ruby < 2.0.0
|
3
|
+
# JSON and I18n gem no longer supports ruby < 2.0.0
|
6
4
|
if defined?(JRUBY_VERSION)
|
7
5
|
gem 'json'
|
8
6
|
elsif RUBY_VERSION =~ /^1/
|
9
7
|
gem 'json', '~> 1.8.3'
|
10
8
|
gem 'tins', '~> 1.6.0'
|
11
9
|
gem 'term-ansicolor', '~> 1.3.0'
|
10
|
+
gem 'i18n', '~> 0.9'
|
12
11
|
end
|
13
12
|
|
14
13
|
gemspec
|
data/README.md
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/monetize.svg)](http://badge.fury.io/rb/monetize)
|
4
4
|
[![Build Status](https://travis-ci.org/RubyMoney/monetize.svg?branch=master)](https://travis-ci.org/RubyMoney/monetize)
|
5
5
|
[![Code Climate](https://codeclimate.com/github/RubyMoney/monetize.svg)](https://codeclimate.com/github/RubyMoney/monetize)
|
6
|
-
[![Coverage Status](https://coveralls.io/repos/RubyMoney/monetize/badge.svg)](https://coveralls.io/r/RubyMoney/monetize)
|
7
6
|
[![Dependency Status](https://gemnasium.com/RubyMoney/monetize.svg)](https://gemnasium.com/RubyMoney/monetize)
|
8
7
|
[![License](https://img.shields.io/badge/license-MIT-green.svg)](http://opensource.org/licenses/MIT)
|
9
8
|
|
data/lib/monetize.rb
CHANGED
@@ -31,9 +31,9 @@ module Monetize
|
|
31
31
|
return from_numeric(input, currency) if input.is_a?(Numeric)
|
32
32
|
|
33
33
|
parser = Monetize::Parser.new(input, currency, options)
|
34
|
-
|
34
|
+
amount, currency = parser.parse
|
35
35
|
|
36
|
-
Money.
|
36
|
+
Money.from_amount(amount, currency)
|
37
37
|
rescue Money::Currency::UnknownCurrency => e
|
38
38
|
fail ParseError, e.message
|
39
39
|
end
|
@@ -43,7 +43,7 @@ module Monetize
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def from_string(value, currency = Money.default_currency)
|
46
|
-
value = BigDecimal
|
46
|
+
value = BigDecimal(value.to_s)
|
47
47
|
Money.from_amount(value, currency)
|
48
48
|
end
|
49
49
|
|
@@ -66,7 +66,10 @@ module Monetize
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def extract_cents(input, currency = Money.default_currency)
|
69
|
-
Monetize
|
69
|
+
warn '[DEPRECATION] Monetize.extract_cents is deprecated. Use Monetize.parse().cents'
|
70
|
+
|
71
|
+
money = parse(input, currency)
|
72
|
+
money.cents if money
|
70
73
|
end
|
71
74
|
end
|
72
75
|
end
|
data/lib/monetize/parser.rb
CHANGED
@@ -29,13 +29,17 @@ module Monetize
|
|
29
29
|
MULTIPLIER_SUFFIXES.default = 0
|
30
30
|
MULTIPLIER_REGEXP = Regexp.new(format('^(.*?\d)(%s)\b([^\d]*)$', MULTIPLIER_SUFFIXES.keys.join('|')), 'i')
|
31
31
|
|
32
|
+
DEFAULT_DECIMAL_MARK = '.'.freeze
|
33
|
+
|
32
34
|
def initialize(input, fallback_currency = Money.default_currency, options = {})
|
33
35
|
@input = input.to_s.strip
|
34
36
|
@fallback_currency = fallback_currency
|
35
37
|
@options = options
|
36
38
|
end
|
37
39
|
|
38
|
-
def
|
40
|
+
def parse
|
41
|
+
currency = Money::Currency.wrap(parse_currency)
|
42
|
+
|
39
43
|
multiplier_exp, input = extract_multiplier
|
40
44
|
|
41
45
|
num = input.gsub(/(?:^#{currency.symbol}|[^\d.,'-]+)/, '')
|
@@ -46,47 +50,41 @@ module Monetize
|
|
46
50
|
|
47
51
|
major, minor = extract_major_minor(num, currency)
|
48
52
|
|
49
|
-
|
53
|
+
amount = BigDecimal([major, minor].join(DEFAULT_DECIMAL_MARK))
|
54
|
+
amount = apply_multiplier(multiplier_exp, amount)
|
55
|
+
amount = apply_sign(negative, amount)
|
50
56
|
|
51
|
-
|
57
|
+
[amount, currency]
|
58
|
+
end
|
52
59
|
|
53
|
-
|
60
|
+
private
|
54
61
|
|
55
|
-
|
56
|
-
end
|
62
|
+
attr_reader :input, :fallback_currency, :options
|
57
63
|
|
58
64
|
def parse_currency
|
59
65
|
computed_currency = nil
|
60
|
-
computed_currency =
|
61
|
-
computed_currency ||=
|
66
|
+
computed_currency = input[/[A-Z]{2,3}/]
|
67
|
+
computed_currency ||= compute_currency if assume_from_symbol?
|
68
|
+
|
62
69
|
|
63
70
|
computed_currency || fallback_currency || Money.default_currency
|
64
71
|
end
|
65
72
|
|
66
|
-
private
|
67
|
-
|
68
|
-
attr_reader :input, :fallback_currency, :options
|
69
|
-
|
70
73
|
def assume_from_symbol?
|
71
74
|
options.fetch(:assume_from_symbol) { Monetize.assume_from_symbol }
|
72
75
|
end
|
73
76
|
|
74
|
-
def apply_multiplier(multiplier_exp,
|
75
|
-
|
76
|
-
minor = minor.to_s + ('0' * multiplier_exp)
|
77
|
-
shift = minor[0...multiplier_exp].to_i
|
78
|
-
major += shift
|
79
|
-
minor = (minor[multiplier_exp..-1] || '')
|
80
|
-
[major, minor]
|
77
|
+
def apply_multiplier(multiplier_exp, amount)
|
78
|
+
amount * 10**multiplier_exp
|
81
79
|
end
|
82
80
|
|
83
|
-
def apply_sign(negative,
|
84
|
-
negative ?
|
81
|
+
def apply_sign(negative, amount)
|
82
|
+
negative ? amount * -1 : amount
|
85
83
|
end
|
86
84
|
|
87
85
|
def compute_currency
|
88
|
-
|
89
|
-
CURRENCY_SYMBOLS[
|
86
|
+
match = input.match(currency_symbol_regex)
|
87
|
+
CURRENCY_SYMBOLS[match.to_s] if match
|
90
88
|
end
|
91
89
|
|
92
90
|
def extract_major_minor(num, currency)
|
@@ -150,29 +148,13 @@ module Monetize
|
|
150
148
|
CURRENCY_SYMBOLS.keys.map { |key| Regexp.escape(key) }.join('|')
|
151
149
|
end
|
152
150
|
|
153
|
-
def set_minor_precision(minor, currency)
|
154
|
-
if Money.infinite_precision
|
155
|
-
(BigDecimal.new(minor) / (10**minor.size)) * currency.subunit_to_unit
|
156
|
-
elsif minor.size < currency.decimal_places
|
157
|
-
(minor + ('0' * currency.decimal_places))[0, currency.decimal_places].to_i
|
158
|
-
elsif minor.size > currency.decimal_places
|
159
|
-
if minor[currency.decimal_places, 1].to_i >= 5
|
160
|
-
minor[0, currency.decimal_places].to_i + 1
|
161
|
-
else
|
162
|
-
minor[0, currency.decimal_places].to_i
|
163
|
-
end
|
164
|
-
else
|
165
|
-
minor.to_i
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
151
|
def split_major_minor(num, delimiter)
|
170
152
|
major, minor = num.split(delimiter)
|
171
153
|
[major, minor || '00']
|
172
154
|
end
|
173
155
|
|
174
156
|
def currency_symbol_regex
|
175
|
-
|
157
|
+
/(?<![A-Z])(#{regex_safe_symbols})(?![A-Z])/i
|
176
158
|
end
|
177
159
|
end
|
178
160
|
end
|
data/lib/monetize/version.rb
CHANGED
data/monetize.gemspec
CHANGED
@@ -7,8 +7,8 @@ require 'English'
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
8
|
spec.name = 'monetize'
|
9
9
|
spec.version = Monetize::VERSION
|
10
|
-
spec.authors = ['Shane Emmons']
|
11
|
-
spec.email = ['shane@emmons.io']
|
10
|
+
spec.authors = ['Shane Emmons', 'Anthony Dmitriyev']
|
11
|
+
spec.email = ['shane@emmons.io', 'anthony.dmitriyev@gmail.com']
|
12
12
|
spec.description = 'A library for converting various objects into `Money` objects.'
|
13
13
|
spec.summary = 'A library for converting various objects into `Money` objects.'
|
14
14
|
spec.homepage = 'https://github.com/RubyMoney/monetize'
|
@@ -21,7 +21,13 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_dependency 'money', '~> 6.12'
|
23
23
|
|
24
|
-
spec.add_development_dependency 'bundler'
|
25
|
-
spec.add_development_dependency 'rake'
|
24
|
+
spec.add_development_dependency 'bundler'
|
25
|
+
spec.add_development_dependency 'rake', '~> 10.2'
|
26
26
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
27
|
+
|
28
|
+
if spec.respond_to?(:metadata)
|
29
|
+
spec.metadata['changelog_uri'] = 'https://github.com/RubyMoney/monetize/blob/master/CHANGELOG.md'
|
30
|
+
spec.metadata['source_code_uri'] = 'https://github.com/RubyMoney/monetize/'
|
31
|
+
spec.metadata['bug_tracker_uri'] = 'https://github.com/RubyMoney/monetize/issues'
|
32
|
+
end
|
27
33
|
end
|
@@ -7,7 +7,7 @@ require 'monetize/core_extensions'
|
|
7
7
|
describe Monetize, 'core extensions' do
|
8
8
|
describe NilClass do
|
9
9
|
describe '#to_money' do
|
10
|
-
it '
|
10
|
+
it 'works as documented' do
|
11
11
|
money = nil.to_money
|
12
12
|
expect(money.cents).to eq 0
|
13
13
|
expect(money.currency).to eq Money.default_currency
|
@@ -22,7 +22,7 @@ describe Monetize, 'core extensions' do
|
|
22
22
|
|
23
23
|
describe Numeric do
|
24
24
|
describe '#to_money' do
|
25
|
-
it '
|
25
|
+
it 'works as documented' do
|
26
26
|
money = 1234.to_money
|
27
27
|
expect(money.cents).to eq 1_234_00
|
28
28
|
expect(money.currency).to eq Money.default_currency
|
@@ -31,7 +31,7 @@ describe Monetize, 'core extensions' do
|
|
31
31
|
expect(money.cents).to eq 100_37
|
32
32
|
expect(money.currency).to eq Money.default_currency
|
33
33
|
|
34
|
-
money = BigDecimal
|
34
|
+
money = BigDecimal('1234').to_money
|
35
35
|
expect(money.cents).to eq 1_234_00
|
36
36
|
expect(money.currency).to eq Money.default_currency
|
37
37
|
end
|
@@ -67,7 +67,8 @@ describe Monetize, 'core extensions' do
|
|
67
67
|
'-1,000' => Money.new(-1_000_00),
|
68
68
|
'1,000.5' => Money.new(1_000_50),
|
69
69
|
'1,000.51' => Money.new(1_000_51),
|
70
|
-
'1,000.505' => Money.new(
|
70
|
+
'1,000.505' => Money.new(1_000_50), # ROUND_HALF_EVEN default bankers rounding
|
71
|
+
'1,000.515' => Money.new(1_000_52), # ROUND_HALF_EVEN default bankers rounding
|
71
72
|
'1,000.504' => Money.new(1_000_50),
|
72
73
|
'1,000.0000' => Money.new(1_000_00),
|
73
74
|
'1,000.5000' => Money.new(1_000_50),
|
@@ -149,6 +150,28 @@ describe Monetize, 'core extensions' do
|
|
149
150
|
expect('1'.to_money('JPY')).to eq Money.new(1, 'JPY')
|
150
151
|
expect('1.5'.to_money('KWD').cents).to eq 1_500
|
151
152
|
end
|
153
|
+
|
154
|
+
it 'respects Money.rounding_mode' do
|
155
|
+
expect('1.009'.to_money).to eq(Money.new(1_01))
|
156
|
+
|
157
|
+
Money.rounding_mode(BigDecimal::ROUND_DOWN) do
|
158
|
+
expect('1.009'.to_money).to eq(Money.new(1_00))
|
159
|
+
end
|
160
|
+
|
161
|
+
expect('1.001'.to_money).to eq(Money.new(1_00))
|
162
|
+
|
163
|
+
Money.rounding_mode(BigDecimal::ROUND_UP) do
|
164
|
+
expect('1.001'.to_money).to eq(Money.new(1_01))
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'produces results similar to Money.from_amount for all the rounding edge cases' do
|
169
|
+
(1_000..1_010).each do |amount|
|
170
|
+
amount = amount.to_f / 1000
|
171
|
+
|
172
|
+
expect(amount.to_s.to_money).to eq(Money.from_amount(amount))
|
173
|
+
end
|
174
|
+
end
|
152
175
|
end
|
153
176
|
|
154
177
|
describe '#to_currency' do
|
data/spec/monetize_spec.rb
CHANGED
@@ -70,6 +70,10 @@ describe Monetize do
|
|
70
70
|
expect(Monetize.parse("#{symbol}#{amount_in_units}")).to eq Money.new(amount, iso_code)
|
71
71
|
end
|
72
72
|
|
73
|
+
it "parses formatted inputs with #{iso_code} symbol is after the amount" do
|
74
|
+
expect(Monetize.parse("#{amount_in_units}#{symbol}")).to eq Money.new(amount, iso_code)
|
75
|
+
end
|
76
|
+
|
73
77
|
context 'prefix' do
|
74
78
|
it 'parses formatted inputs with plus sign and currency as a symbol' do
|
75
79
|
expect(Monetize.parse("+#{symbol}#{amount_in_units}")).to eq Money.new(amount, iso_code)
|
@@ -114,6 +118,15 @@ describe Monetize do
|
|
114
118
|
expect(Monetize.parse('L9.99')).to eq Money.new(999, 'USD')
|
115
119
|
end
|
116
120
|
|
121
|
+
it 'should use provided currency over symbol' do
|
122
|
+
expect(Monetize.parse('$1.05 CAD')).to eq Money.new(105, 'CAD')
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'ignores ZAR symbols that is part of a text' do
|
126
|
+
expect(Monetize.parse('EUR 9.99')).to eq Money.new(999, 'EUR')
|
127
|
+
expect(Monetize.parse('9.99 EUR')).to eq Money.new(999, 'EUR')
|
128
|
+
end
|
129
|
+
|
117
130
|
context 'negatives' do
|
118
131
|
it 'ignores the ambiguous kr symbol' do
|
119
132
|
# Could mean either of DKK, EEK, ISK, NOK, SEK
|
@@ -212,6 +225,14 @@ describe Monetize do
|
|
212
225
|
expect(Monetize.parse('-$5.95-')).to be_nil
|
213
226
|
end
|
214
227
|
|
228
|
+
it 'returns nil when more than 2 digit separators are used' do
|
229
|
+
expect(Monetize.parse("123.34,56'89 EUR")).to be_nil
|
230
|
+
end
|
231
|
+
|
232
|
+
it 'parses correctly strings with repeated digit separator' do
|
233
|
+
expect(Monetize.parse('19.12.89', 'EUR')).to eq Money.new(191_289_00, 'EUR')
|
234
|
+
end
|
235
|
+
|
215
236
|
it 'parses correctly strings with exactly 3 decimal digits' do
|
216
237
|
expect(Monetize.parse('6,534', 'EUR')).to eq Money.new(653, 'EUR')
|
217
238
|
expect(Monetize.parse('6.534', 'EUR')).to eq Money.new(653, 'EUR')
|
@@ -234,7 +255,7 @@ describe Monetize do
|
|
234
255
|
context 'parsing an instance of Numeric class' do
|
235
256
|
let(:integer) { 10 }
|
236
257
|
let(:float) { 10.0 }
|
237
|
-
let(:big_decimal) { BigDecimal
|
258
|
+
let(:big_decimal) { BigDecimal('10') }
|
238
259
|
|
239
260
|
[:integer, :float, :big_decimal].each do |type|
|
240
261
|
it "returns a new Money object based on the #{type} input" do
|
@@ -336,6 +357,10 @@ describe Monetize do
|
|
336
357
|
expect(collection.first).to eq Monetize.parse('$4')
|
337
358
|
expect(collection.last).to eq Monetize.parse('$10')
|
338
359
|
end
|
360
|
+
|
361
|
+
it 'raises an error if argument is invalid' do
|
362
|
+
expect { Monetize.parse_collection(nil) }.to raise_error Monetize::ArgumentError
|
363
|
+
end
|
339
364
|
end
|
340
365
|
|
341
366
|
describe '.from_string' do
|
@@ -419,31 +444,31 @@ describe Monetize do
|
|
419
444
|
|
420
445
|
describe '.from_bigdecimal' do
|
421
446
|
it 'converts given amount to cents' do
|
422
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
423
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
424
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
447
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1'))).to eq Money.new(1_00)
|
448
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1'))).to eq Money.new(1_00, 'USD')
|
449
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1'), 'EUR')).to eq Money.new(1_00, 'EUR')
|
425
450
|
end
|
426
451
|
|
427
452
|
it 'respects :subunit_to_unit currency property' do
|
428
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
429
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
430
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
453
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1'), 'USD')).to eq Money.new(1_00, 'USD')
|
454
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1'), 'TND')).to eq Money.new(1_000, 'TND')
|
455
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1'), 'JPY')).to eq Money.new(1, 'JPY')
|
431
456
|
end
|
432
457
|
|
433
458
|
it 'respects rounding mode when rounding amount to the nearest cent' do
|
434
|
-
amount = BigDecimal
|
459
|
+
amount = BigDecimal('1.005')
|
435
460
|
|
436
461
|
expect(Monetize.from_bigdecimal(amount, 'USD')).to eq Money.from_amount(amount, 'USD')
|
437
462
|
end
|
438
463
|
|
439
464
|
it 'accepts a currency options' do
|
440
|
-
m = Monetize.from_bigdecimal(BigDecimal
|
465
|
+
m = Monetize.from_bigdecimal(BigDecimal('1'))
|
441
466
|
expect(m.currency).to eq Money.default_currency
|
442
467
|
|
443
|
-
m = Monetize.from_bigdecimal(BigDecimal
|
468
|
+
m = Monetize.from_bigdecimal(BigDecimal('1'), Money::Currency.wrap('EUR'))
|
444
469
|
expect(m.currency).to eq Money::Currency.wrap('EUR')
|
445
470
|
|
446
|
-
m = Monetize.from_bigdecimal(BigDecimal
|
471
|
+
m = Monetize.from_bigdecimal(BigDecimal('1'), 'EUR')
|
447
472
|
expect(m.currency).to eq Money::Currency.wrap('EUR')
|
448
473
|
end
|
449
474
|
|
@@ -457,11 +482,11 @@ describe Monetize do
|
|
457
482
|
end
|
458
483
|
|
459
484
|
it 'keeps precision' do
|
460
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
461
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
462
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
463
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
464
|
-
expect(Monetize.from_bigdecimal(BigDecimal
|
485
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1'))).to eq Money.new(100)
|
486
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1.23456'))).to eq Money.new(123.456)
|
487
|
+
expect(Monetize.from_bigdecimal(BigDecimal('-1.23456'))).to eq Money.new(-123.456)
|
488
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1.23456'))).to eq Money.new(123.456, 'USD')
|
489
|
+
expect(Monetize.from_bigdecimal(BigDecimal('1.23456'), 'EUR')).to eq Money.new(123.456, 'EUR')
|
465
490
|
|
466
491
|
expect('1'.to_money).to eq Money.new(100)
|
467
492
|
expect('1.23456'.to_money).to eq Money.new(123.456)
|
@@ -476,7 +501,7 @@ describe Monetize do
|
|
476
501
|
it 'converts given amount to cents' do
|
477
502
|
expect(Monetize.from_numeric(1)).to eq Money.new(1_00)
|
478
503
|
expect(Monetize.from_numeric(1.0)).to eq Money.new(1_00)
|
479
|
-
expect(Monetize.from_numeric(BigDecimal
|
504
|
+
expect(Monetize.from_numeric(BigDecimal('1'))).to eq Money.new(1_00)
|
480
505
|
end
|
481
506
|
|
482
507
|
it 'raises ArgumentError with unsupported argument' do
|
@@ -508,6 +533,20 @@ describe Monetize do
|
|
508
533
|
end
|
509
534
|
|
510
535
|
describe '.extract_cents' do
|
536
|
+
it 'is deprecated' do
|
537
|
+
allow(Monetize).to receive(:warn)
|
538
|
+
|
539
|
+
Monetize.extract_cents('100')
|
540
|
+
|
541
|
+
expect(Monetize)
|
542
|
+
.to have_received(:warn)
|
543
|
+
.with('[DEPRECATION] Monetize.extract_cents is deprecated. Use Monetize.parse().cents')
|
544
|
+
end
|
545
|
+
|
546
|
+
it 'extracts cents from a given string' do
|
547
|
+
expect(Monetize.extract_cents('10.99')).to eq(1099)
|
548
|
+
end
|
549
|
+
|
511
550
|
it "correctly treats pipe marks '|' in input (regression test)" do
|
512
551
|
expect(Monetize.extract_cents('100|0')).to eq Monetize.extract_cents('100!0')
|
513
552
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monetize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Emmons
|
8
|
-
|
8
|
+
- Anthony Dmitriyev
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2021-01-17 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: money
|
@@ -28,30 +29,30 @@ dependencies:
|
|
28
29
|
name: bundler
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- - "
|
32
|
+
- - ">="
|
32
33
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
+
version: '0'
|
34
35
|
type: :development
|
35
36
|
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
|
-
- - "
|
39
|
+
- - ">="
|
39
40
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
41
|
+
version: '0'
|
41
42
|
- !ruby/object:Gem::Dependency
|
42
43
|
name: rake
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
44
45
|
requirements:
|
45
|
-
- - "
|
46
|
+
- - "~>"
|
46
47
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
+
version: '10.2'
|
48
49
|
type: :development
|
49
50
|
prerelease: false
|
50
51
|
version_requirements: !ruby/object:Gem::Requirement
|
51
52
|
requirements:
|
52
|
-
- - "
|
53
|
+
- - "~>"
|
53
54
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
+
version: '10.2'
|
55
56
|
- !ruby/object:Gem::Dependency
|
56
57
|
name: rspec
|
57
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -69,14 +70,14 @@ dependencies:
|
|
69
70
|
description: A library for converting various objects into `Money` objects.
|
70
71
|
email:
|
71
72
|
- shane@emmons.io
|
73
|
+
- anthony.dmitriyev@gmail.com
|
72
74
|
executables: []
|
73
75
|
extensions: []
|
74
76
|
extra_rdoc_files: []
|
75
77
|
files:
|
76
|
-
- ".
|
78
|
+
- ".github/workflows/ruby.yml"
|
77
79
|
- ".gitignore"
|
78
80
|
- ".rubocop.yml"
|
79
|
-
- ".travis.yml"
|
80
81
|
- CHANGELOG.md
|
81
82
|
- CONTRIBUTING.md
|
82
83
|
- Gemfile
|
@@ -101,8 +102,11 @@ files:
|
|
101
102
|
homepage: https://github.com/RubyMoney/monetize
|
102
103
|
licenses:
|
103
104
|
- MIT
|
104
|
-
metadata:
|
105
|
-
|
105
|
+
metadata:
|
106
|
+
changelog_uri: https://github.com/RubyMoney/monetize/blob/master/CHANGELOG.md
|
107
|
+
source_code_uri: https://github.com/RubyMoney/monetize/
|
108
|
+
bug_tracker_uri: https://github.com/RubyMoney/monetize/issues
|
109
|
+
post_install_message:
|
106
110
|
rdoc_options: []
|
107
111
|
require_paths:
|
108
112
|
- lib
|
@@ -117,9 +121,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
121
|
- !ruby/object:Gem::Version
|
118
122
|
version: '0'
|
119
123
|
requirements: []
|
120
|
-
|
121
|
-
|
122
|
-
signing_key:
|
124
|
+
rubygems_version: 3.0.3
|
125
|
+
signing_key:
|
123
126
|
specification_version: 4
|
124
127
|
summary: A library for converting various objects into `Money` objects.
|
125
128
|
test_files:
|
data/.coveralls.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
repo_token: pbKErt5rAW1iRYGMIAGGAAHfVRmiBzxfd
|