money 6.18.0 → 6.19.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -4
- data/LICENSE +1 -1
- data/README.md +4 -0
- data/config/currency_backwards_compatible.json +16 -0
- data/config/currency_iso.json +5 -21
- data/lib/money/money/allocation.rb +29 -7
- data/lib/money/money/formatting_rules.rb +1 -1
- data/lib/money/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 331d852b12ab9a5e62108f3610d1ec5eed8f4fa9bb683be1aab2703cd2df26cd
|
4
|
+
data.tar.gz: 56e2bcad250542c80b800db800c2216dd2b3b10f1df5d8a77819d13153a77844
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae6d529a7382aaab721a4ae933658828f975eaa4c9a0ad9444b74b28d8ff1141d59f3e264d08b650367e327987266be03dcd480e0a850fe224feb6cdca4163d1
|
7
|
+
data.tar.gz: bbb76570efd7bf4be700cc3f46d01e26945e9790f5f9f3fee666d4ac3164d1422f5ca1614622a429c430804a9047bcc8f5178886905e5ad814ce21ab4117f94a
|
data/CHANGELOG.md
CHANGED
@@ -2,14 +2,25 @@
|
|
2
2
|
|
3
3
|
## Upcoming
|
4
4
|
|
5
|
-
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
-
|
6
|
+
|
7
|
+
## 6.19.0
|
8
|
+
|
9
|
+
- Change Peruvian Sol (PEN) decimal mark and thousands separator.
|
10
|
+
- Improves Precision and Simplifies Allocation Logic
|
11
|
+
- explicit declaration of i18n locales
|
12
|
+
- Add space to CHF format
|
13
|
+
- Update deprecation message to suggest correct formatting.
|
9
14
|
|
10
15
|
## 6.18.0
|
11
16
|
|
17
|
+
- Add second dobra (STN) from São Tomé and Príncipe
|
18
|
+
- Correct South African Rand (ZAR) to use comma decimal mark, and space thousands separator
|
19
|
+
- Use euro symbol as html_entity for euro currency
|
20
|
+
- Update Georgian Lari symbol
|
21
|
+
- Add Ruby 3.1 and 3.2 to the CI matrix
|
12
22
|
- Add `Money.from_dollars` alias as a more explicit initializer, it's the same as `Money.from_amount`
|
23
|
+
- Mark Croatian Kuna (HRK) as obsolete by moving its definition to the backwards compatibility data source
|
13
24
|
|
14
25
|
## 6.17.0
|
15
26
|
|
data/LICENSE
CHANGED
@@ -2,7 +2,7 @@ MIT License
|
|
2
2
|
|
3
3
|
Copyright (c) 2005 Tobias Lutke
|
4
4
|
Copyright (c) 2008 Phusion
|
5
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2024 Shane Emmons
|
6
6
|
|
7
7
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
8
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
@@ -60,6 +60,10 @@ The development version (hosted on Github) can be installed with:
|
|
60
60
|
``` ruby
|
61
61
|
require 'money'
|
62
62
|
|
63
|
+
# explicitly define locales
|
64
|
+
I18n.config.available_locales = :en
|
65
|
+
Money.locale_backend = :i18n
|
66
|
+
|
63
67
|
# 10.00 USD
|
64
68
|
money = Money.from_cents(1000, "USD")
|
65
69
|
money.cents #=> 1000
|
@@ -31,6 +31,22 @@
|
|
31
31
|
"iso_numeric": "288",
|
32
32
|
"smallest_denomination": 1
|
33
33
|
},
|
34
|
+
"hrk": {
|
35
|
+
"priority": 100,
|
36
|
+
"iso_code": "HRK",
|
37
|
+
"name": "Croatian Kuna",
|
38
|
+
"symbol": "kn",
|
39
|
+
"alternate_symbols": [],
|
40
|
+
"subunit": "Lipa",
|
41
|
+
"subunit_to_unit": 100,
|
42
|
+
"symbol_first": false,
|
43
|
+
"format": "%n %u",
|
44
|
+
"html_entity": "",
|
45
|
+
"decimal_mark": ",",
|
46
|
+
"thousands_separator": ".",
|
47
|
+
"iso_numeric": "191",
|
48
|
+
"smallest_denomination": 1
|
49
|
+
},
|
34
50
|
"ltl": {
|
35
51
|
"priority": 100,
|
36
52
|
"iso_code": "LTL",
|
data/config/currency_iso.json
CHANGED
@@ -452,7 +452,7 @@
|
|
452
452
|
"subunit": "Rappen",
|
453
453
|
"subunit_to_unit": 100,
|
454
454
|
"symbol_first": true,
|
455
|
-
"format": "%u%n",
|
455
|
+
"format": "%u %n",
|
456
456
|
"html_entity": "",
|
457
457
|
"decimal_mark": ".",
|
458
458
|
"thousands_separator": ",",
|
@@ -922,22 +922,6 @@
|
|
922
922
|
"iso_numeric": "340",
|
923
923
|
"smallest_denomination": 5
|
924
924
|
},
|
925
|
-
"hrk": {
|
926
|
-
"priority": 100,
|
927
|
-
"iso_code": "HRK",
|
928
|
-
"name": "Croatian Kuna",
|
929
|
-
"symbol": "kn",
|
930
|
-
"alternate_symbols": [],
|
931
|
-
"subunit": "Lipa",
|
932
|
-
"subunit_to_unit": 100,
|
933
|
-
"symbol_first": false,
|
934
|
-
"format": "%n %u",
|
935
|
-
"html_entity": "",
|
936
|
-
"decimal_mark": ",",
|
937
|
-
"thousands_separator": ".",
|
938
|
-
"iso_numeric": "191",
|
939
|
-
"smallest_denomination": 1
|
940
|
-
},
|
941
925
|
"htg": {
|
942
926
|
"priority": 100,
|
943
927
|
"iso_code": "HTG",
|
@@ -1706,8 +1690,8 @@
|
|
1706
1690
|
"subunit_to_unit": 100,
|
1707
1691
|
"symbol_first": true,
|
1708
1692
|
"html_entity": "S/",
|
1709
|
-
"decimal_mark": "
|
1710
|
-
"thousands_separator": "
|
1693
|
+
"decimal_mark": ",",
|
1694
|
+
"thousands_separator": ".",
|
1711
1695
|
"iso_numeric": "604",
|
1712
1696
|
"smallest_denomination": 1
|
1713
1697
|
},
|
@@ -2695,8 +2679,8 @@
|
|
2695
2679
|
"subunit_to_unit": 100,
|
2696
2680
|
"symbol_first": true,
|
2697
2681
|
"html_entity": "R",
|
2698
|
-
"decimal_mark": "
|
2699
|
-
"thousands_separator": "
|
2682
|
+
"decimal_mark": ",",
|
2683
|
+
"thousands_separator": " ",
|
2700
2684
|
"iso_numeric": "710",
|
2701
2685
|
"smallest_denomination": 10
|
2702
2686
|
},
|
@@ -2,16 +2,17 @@
|
|
2
2
|
|
3
3
|
class Money
|
4
4
|
class Allocation
|
5
|
-
# Splits a given amount in parts
|
6
|
-
#
|
7
|
-
# parts listed first will likely receive more pennies than the ones listed later.
|
5
|
+
# Splits a given amount in parts. The allocation is based on the parts' proportions
|
6
|
+
# or evenly if parts are numerically specified.
|
8
7
|
#
|
9
8
|
# The results should always add up to the original amount.
|
10
9
|
#
|
11
|
-
# The
|
12
|
-
#
|
13
|
-
#
|
10
|
+
# @param amount [Numeric] The total amount to be allocated.
|
11
|
+
# @param parts [Numeric, Array<Numeric>] Number of parts to split into or an array (proportions for allocation)
|
12
|
+
# @param whole_amounts [Boolean] Specifies whether to allocate whole amounts only. Defaults to true.
|
14
13
|
#
|
14
|
+
# @return [Array<Numeric>] An array containing the allocated amounts.
|
15
|
+
# @raise [ArgumentError] If parts is empty or not provided.
|
15
16
|
def self.generate(amount, parts, whole_amounts = true)
|
16
17
|
parts = if parts.is_a?(Numeric)
|
17
18
|
Array.new(parts, 1)
|
@@ -21,7 +22,12 @@ class Money
|
|
21
22
|
parts.dup
|
22
23
|
end
|
23
24
|
|
24
|
-
raise ArgumentError, 'need at least one
|
25
|
+
raise ArgumentError, 'need at least one part' if parts.empty?
|
26
|
+
|
27
|
+
if [amount, *parts].any? { |i| i.is_a?(BigDecimal) || i.is_a?(Float) || i.is_a?(Rational) }
|
28
|
+
amount = convert_to_big_decimal(amount)
|
29
|
+
parts.map! { |p| convert_to_big_decimal(p) }
|
30
|
+
end
|
25
31
|
|
26
32
|
result = []
|
27
33
|
remaining_amount = amount
|
@@ -42,5 +48,21 @@ class Money
|
|
42
48
|
|
43
49
|
result
|
44
50
|
end
|
51
|
+
|
52
|
+
# Converts a given number to BigDecimal.
|
53
|
+
# This method supports inputs of BigDecimal, Rational, and other numeric types by ensuring they are all returned
|
54
|
+
# as BigDecimal instances for consistent handling.
|
55
|
+
#
|
56
|
+
# @param number [Numeric, BigDecimal, Rational] The number to convert.
|
57
|
+
# @return [BigDecimal] The converted number as a BigDecimal.
|
58
|
+
def self.convert_to_big_decimal(number)
|
59
|
+
if number.is_a? BigDecimal
|
60
|
+
number
|
61
|
+
elsif number.is_a? Rational
|
62
|
+
BigDecimal(number.to_f.to_s)
|
63
|
+
else
|
64
|
+
BigDecimal(number.to_s)
|
65
|
+
end
|
66
|
+
end
|
45
67
|
end
|
46
68
|
end
|
@@ -117,7 +117,7 @@ class Money
|
|
117
117
|
def warn_about_deprecated_rules(rules)
|
118
118
|
if rules.has_key?(:symbol_position)
|
119
119
|
position = rules[:symbol_position]
|
120
|
-
template = position == :before ? '%u
|
120
|
+
template = position == :before ? '%u%n' : '%n%u'
|
121
121
|
|
122
122
|
warn "[DEPRECATION] `symbol_position: :#{position}` is deprecated - you can replace it with `format: #{template}`"
|
123
123
|
end
|
data/lib/money/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Emmons
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-03-
|
12
|
+
date: 2024-03-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: i18n
|