minting 1.9.6 → 1.9.7
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 +4 -4
- data/README.md +30 -25
- data/Rakefile +16 -20
- data/bin/bench_check +2 -2
- data/doc/Mint/Currency.html +183 -94
- data/doc/Mint/Money.html +866 -334
- data/doc/Mint/RangeStepPatch.html +1 -1
- data/doc/Mint/Registry.html +10 -10
- data/doc/Mint/Rounding.html +2 -2
- data/doc/Mint/UnknownCurrency.html +6 -4
- data/doc/Mint.html +33 -106
- data/doc/Minting.html +2 -2
- data/doc/Numeric.html +479 -0
- data/doc/String.html +241 -0
- data/doc/_index.html +27 -1
- data/doc/agents/copilot-instructions.md +3 -3
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +47 -33
- data/doc/index.html +47 -33
- data/doc/method_list.html +125 -53
- data/doc/top-level-namespace.html +5 -21
- data/lib/minting/currency/currency.rb +6 -3
- data/lib/minting/data/world-currencies.yaml +75 -23
- data/lib/minting/mint/i18n.rb +1 -1
- data/lib/minting/mint/rounding.rb +1 -0
- data/lib/minting/money/conversion.rb +1 -0
- data/lib/minting/money/format/formatting.rb +88 -55
- data/lib/minting/money/format/to_s.rb +20 -3
- data/lib/minting/money/money.rb +0 -4
- data/lib/minting/version.rb +1 -1
- metadata +3 -2
- data/doc/Mint/CurrencyRegistry.html +0 -511
data/doc/index.html
CHANGED
|
@@ -78,11 +78,11 @@
|
|
|
78
78
|
<h3 id="Exact_precision">Exact precision</h3>
|
|
79
79
|
<p>Amounts are stored as <code>Rational</code> and rounded to the currency subunit. No floating-point surprises, ever.</p>
|
|
80
80
|
<h3 id="Blazing_performance">Blazing performance</h3>
|
|
81
|
-
<p>Minting is faster than the Money gem for everyday operations and <strong>over 10× faster for formatting</strong>. See full benchmarks in the <a href="test/performance/
|
|
81
|
+
<p>Minting is faster than the Money gem for everyday operations and <strong>over 10× faster for formatting</strong>. See full benchmarks in the <a href="test/performance/BENCHMARKS.md">Performance Guide</a>.</p>
|
|
82
82
|
<h3 id="Clean__modern_API">Clean, modern API</h3>
|
|
83
83
|
<p>Intuitive interface, descriptive error messages, and sensible defaults. Works the way you expect.</p>
|
|
84
84
|
<h3 id="Rails_ready">Rails-ready</h3>
|
|
85
|
-
<p>Use with the <a href="https://github.com/gferraz/
|
|
85
|
+
<p>Use with the <a href="https://github.com/gferraz/attribute-money">attribute-money</a> companion gem for drop-in ActiveRecord type casting, validators, and form helpers.</p>
|
|
86
86
|
<h3 id="Quality_code">Quality code</h3>
|
|
87
87
|
<ul>
|
|
88
88
|
<li><strong>100% test coverage</strong> — every line exercised</li>
|
|
@@ -101,9 +101,6 @@
|
|
|
101
101
|
<span class='comment'># Create money
|
|
102
102
|
</span><span class='id identifier rubyid_ten'>ten</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> [USD 10.00]
|
|
103
103
|
</span>
|
|
104
|
-
<span class='comment'># Create money using Numeric refinements
|
|
105
|
-
</span><span class='id identifier rubyid_using'>using</span> <span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span>
|
|
106
|
-
|
|
107
104
|
<span class='int'>1</span><span class='period'>.</span><span class='id identifier rubyid_dollar'>dollar</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='int'>1</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> true
|
|
108
105
|
</span><span class='id identifier rubyid_ten'>ten</span> <span class='op'>=</span> <span class='int'>10</span><span class='period'>.</span><span class='id identifier rubyid_dollars'>dollars</span> <span class='comment'>#=> [USD 10.00]
|
|
109
106
|
</span><span class='int'>4</span><span class='period'>.</span><span class='id identifier rubyid_to_money'>to_money</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> [USD 4.00]
|
|
@@ -124,34 +121,51 @@
|
|
|
124
121
|
</span>
|
|
125
122
|
<span class='comment'># Format (uses Kernel.format syntax)
|
|
126
123
|
</span><span class='id identifier rubyid_price'>price</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='float'>9.99</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
124
|
+
<span class='id identifier rubyid_loss'>loss</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='op'>-</span><span class='float'>1234.56</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
127
125
|
|
|
128
|
-
<span class='
|
|
129
|
-
</span><span class='id identifier
|
|
130
|
-
</span><span class='
|
|
131
|
-
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier
|
|
132
|
-
</span><span class='
|
|
126
|
+
<span class='comment'># Built-in named presets
|
|
127
|
+
</span><span class='id identifier rubyid_loss'>loss</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='symbol'>:accounting</span><span class='rparen'>)</span> <span class='comment'>#=> "($1,234.56)"
|
|
128
|
+
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='float'>1234.56</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>EUR</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'><span class='object_link'><a href="Mint/Money.html#format-instance_method" title="Mint::Money#format (method)">format</a></span></span><span class='lparen'>(</span><span class='symbol'>:european</span><span class='rparen'>)</span> <span class='comment'>#=> "1.234,56 €"
|
|
129
|
+
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='symbol'>:amount</span><span class='rparen'>)</span> <span class='comment'>#=> "9.99"
|
|
130
|
+
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='symbol'>:currency</span><span class='rparen'>)</span> <span class='comment'>#=> "USD 9.99"
|
|
131
|
+
</span>
|
|
132
|
+
<span class='comment'># Presets can be overridden with explicit kwargs
|
|
133
|
+
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='float'>1234.56</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>EUR</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'><span class='object_link'><a href="Mint/Money.html#format-instance_method" title="Mint::Money#format (method)">format</a></span></span><span class='lparen'>(</span><span class='symbol'>:european</span><span class='comma'>,</span> <span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<amount>f %<currency>s</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
134
|
+
<span class='comment'>#=> "1.234,56 EUR"
|
|
135
|
+
</span>
|
|
136
|
+
<span class='comment'># Or use direct format strings
|
|
137
|
+
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span> <span class='comment'>#=> "$9.99",
|
|
138
|
+
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<amount>d</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "9",
|
|
139
|
+
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<symbol>s%<amount>f</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "$9.99",
|
|
140
|
+
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<symbol>s%<amount>+f</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "$+9.99",
|
|
141
|
+
</span><span class='lparen'>(</span><span class='op'>-</span><span class='id identifier rubyid_price'>price</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<amount>f</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "-9.99",
|
|
133
142
|
</span>
|
|
134
143
|
<span class='comment'># Format with padding
|
|
135
144
|
</span><span class='id identifier rubyid_price_in_euros'>price_in_euros</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='float'>12.34</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>EUR</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
136
145
|
|
|
137
|
-
<span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier
|
|
138
|
-
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier
|
|
139
|
-
</span><span class='lparen'>(</span><span class='op'>-</span><span class='id identifier rubyid_price'>price</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier
|
|
146
|
+
<span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>--%<amount>7d</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "-- 9"
|
|
147
|
+
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> %<amount>10f %<currency>s</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> " 9.99 USD"
|
|
148
|
+
</span><span class='lparen'>(</span><span class='op'>-</span><span class='id identifier rubyid_price'>price</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> %<amount>10f</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> " -9.99"
|
|
140
149
|
</span>
|
|
141
|
-
<span class='id identifier rubyid_price_in_euros'>price_in_euros</span><span class='period'>.</span><span class='id identifier
|
|
150
|
+
<span class='id identifier rubyid_price_in_euros'>price_in_euros</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<symbol>2s%<amount>+10f</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> " € +12.34"
|
|
142
151
|
</span>
|
|
143
152
|
<span class='comment'># Integral & fractional parts
|
|
144
|
-
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier
|
|
145
|
-
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='float'>0.99</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier
|
|
153
|
+
</span><span class='id identifier rubyid_price'>price</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<integral>d %<fractional>d/100</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "9 99/100"
|
|
154
|
+
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='float'>0.99</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'><span class='object_link'><a href="Mint/Money.html#format-instance_method" title="Mint::Money#format (method)">format</a></span></span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<integral>d dollars and %<fractional>02d cents</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
146
155
|
<span class='comment'>#=> "0 dollars and 99 cents"
|
|
147
156
|
</span>
|
|
148
157
|
<span class='comment'># Per-sign Hash format (e.g. accounting parentheses for losses)
|
|
149
158
|
</span><span class='id identifier rubyid_loss'>loss</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='op'>-</span><span class='float'>1234.56</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
150
|
-
<span class='id identifier rubyid_loss'>loss</span><span class='period'>.</span><span class='id identifier
|
|
151
|
-
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='int'>0</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>BRL</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier
|
|
159
|
+
<span class='id identifier rubyid_loss'>loss</span><span class='period'>.</span><span class='id identifier rubyid_format'>format</span><span class='lparen'>(</span><span class='label'>format:</span> <span class='lbrace'>{</span> <span class='label'>negative:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>(%<symbol>s%<amount>f)</span><span class='tstring_end'>'</span></span> <span class='rbrace'>}</span><span class='rparen'>)</span> <span class='comment'>#=> "($1,234.56)"
|
|
160
|
+
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='int'>0</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>BRL</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'><span class='object_link'><a href="Mint/Money.html#format-instance_method" title="Mint::Money#format (method)">format</a></span></span><span class='lparen'>(</span><span class='label'>format:</span> <span class='lbrace'>{</span> <span class='label'>zero:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>--</span><span class='tstring_end'>'</span></span> <span class='rbrace'>}</span><span class='rparen'>)</span> <span class='comment'>#=> "--"
|
|
152
161
|
</span><span class='comment'># All three keys at once:
|
|
153
162
|
</span><span class='id identifier rubyid_fmt'>fmt</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>positive:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<symbol>s%<amount>f</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>negative:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>(%<symbol>s%<amount>f)</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>zero:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>--</span><span class='tstring_end'>'</span></span> <span class='rbrace'>}</span>
|
|
154
|
-
<span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='float'>1234.56</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier
|
|
163
|
+
<span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='float'>1234.56</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'><span class='object_link'><a href="Mint/Money.html#format-instance_method" title="Mint::Money#format (method)">format</a></span></span><span class='lparen'>(</span><span class='label'>format:</span> <span class='id identifier rubyid_fmt'>fmt</span><span class='rparen'>)</span> <span class='comment'>#=> "$1,234.56"
|
|
164
|
+
</span>
|
|
165
|
+
<span class='comment'># Disambiguated symbol (e.g. "US$" vs "C$" vs "A$")
|
|
166
|
+
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>USD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'><span class='object_link'><a href="Mint/Money.html#format-instance_method" title="Mint::Money#format (method)">format</a></span></span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<dsymbol>s%<amount>f</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "US$10.00"
|
|
167
|
+
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>CAD</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'><span class='object_link'><a href="Mint/Money.html#format-instance_method" title="Mint::Money#format (method)">format</a></span></span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<dsymbol>s%<amount>f</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "C$10.00"
|
|
168
|
+
</span><span class='const'><span class='object_link'><a href="Mint.html" title="Mint (module)">Mint</a></span></span><span class='period'>.</span><span class='id identifier rubyid_money'><span class='object_link'><a href="Mint.html#money-class_method" title="Mint.money (method)">money</a></span></span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>EUR</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_format'><span class='object_link'><a href="Mint/Money.html#format-instance_method" title="Mint::Money#format (method)">format</a></span></span><span class='lparen'>(</span><span class='label'>format:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>%<dsymbol>s%<amount>f</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='comment'>#=> "€10.00" (no dsymbol, falls back to symbol)
|
|
155
169
|
</span>
|
|
156
170
|
<span class='comment'># Json serialization
|
|
157
171
|
</span>
|
|
@@ -234,29 +248,29 @@
|
|
|
234
248
|
<blockquote>
|
|
235
249
|
<p><strong>Performance note:</strong> Rounding-mode support is not loaded by default — <code>require 'minting'</code> uses the fastest possible rounding (equivalent to <code>:half_up</code>) with zero dispatch overhead. The first call to <code>Mint.with_rounding</code> loads the rounding module and patches <code>Currency#normalize_amount</code>, adding ~10–35 ns per money creation or mutation. If your application never uses custom rounding modes (the common case), there is <strong>no performance cost</strong>.</p>
|
|
236
250
|
</blockquote>
|
|
237
|
-
<p><strong>Refinements</strong> — <code>10.dollars</code> and similar helpers require <code>using Mint</code> in the current scope (see Usage above).</p>
|
|
238
251
|
<p><strong>Division</strong> — <code>money / 5</code> returns new <code>Money</code>; <code>money / other_money</code> returns a numeric ratio, not money.</p>
|
|
239
252
|
<p><strong>Zero equality</strong> — Any zero amount is considered equal across currencies and to numeric zero (<code>Mint.money(0, 'USD') == Mint.money(0, 'EUR')</code> is intentionally <code>true</code>). Non-zero amounts must match currency and value.</p>
|
|
240
253
|
<p><strong>Zero helper</strong> — <code>Currency.zero('USD')</code> returns a frozen zero-Money, useful as a default value for discounts, totals, or counters.</p>
|
|
241
254
|
<p><strong>Registered currencies</strong> — <code>Currency.register(code:, subunit:, symbol:, priority:)</code> adds custom currencies. Only registered codes and symbols are recognized by the parser or searches. Nonetheless, you don't need to register a currency to use it with most of the features.</p>
|
|
242
255
|
<p><strong>Built-in currencies</strong> — 150+ ISO-4217 world currencies ship in <code>lib/minting/data/currencies.yaml</code> and load when the registry is first accessed.</p>
|
|
243
256
|
<h2 id="Optional_top_level__Money__and__Currency_">Optional top-level <code>Money</code> and <code>Currency</code></h2>
|
|
244
|
-
<p>By default,
|
|
257
|
+
<p>By default, <code>require "minting"</code> exposes <code>Mint::Money</code> as the top-level <code>Money</code> constant, so you can write <code>Money.from(10, "USD")</code> directly:</p>
|
|
245
258
|
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>minting</span><span class='tstring_end'>"</span></span>
|
|
246
|
-
|
|
247
|
-
</span></
|
|
248
|
-
<
|
|
249
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Minting.html" title="Minting (module)">Minting</a></span></span><span class='period'>.</span><span class='id identifier rubyid_use_top_level_constants!'>use_top_level_constants!</span>
|
|
259
|
+
|
|
260
|
+
<span class='id identifier rubyid_price'>price</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="top-level-namespace.html#Money-constant" title="Money (constant)">Money</a></span></span><span class='period'>.</span><span class='id identifier rubyid_from'>from</span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>USD</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='comment'># equivalent to Mint::Money.from
|
|
261
|
+
</span><span class='id identifier rubyid_tax'>tax</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="top-level-namespace.html#Money-constant" title="Money (constant)">Money</a></span></span><span class='period'>.</span><span class='id identifier rubyid_from'>from</span><span class='lparen'>(</span><span class='float'>2.50</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>USD</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
250
262
|
</code></pre>
|
|
251
|
-
<p>
|
|
252
|
-
<pre class="code ruby"><code class="ruby"><span class='
|
|
253
|
-
|
|
263
|
+
<p><code>Currency</code> is <strong>not</strong> auto-bound, because application domain models are commonly named <code>Currency</code> (e.g. a Rails model). To opt in to the top-level <code>Currency</code> constant:</p>
|
|
264
|
+
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>minting</span><span class='tstring_end'>"</span></span>
|
|
265
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>minting/mint/aliases</span><span class='tstring_end'>"</span></span> <span class='comment'># opt-in top-level Currency
|
|
266
|
+
</span>
|
|
267
|
+
<span class='id identifier rubyid_cur'>cur</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="top-level-namespace.html#Currency-constant" title="Currency (constant)">Currency</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>code:</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>EUR</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>symbol:</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>€</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>subunit:</span> <span class='int'>2</span><span class='comma'>,</span> <span class='label'>priority:</span> <span class='int'>0</span><span class='rparen'>)</span>
|
|
254
268
|
</code></pre>
|
|
255
|
-
<p>
|
|
256
|
-
<pre class="code ruby"><code class="ruby"><span class='
|
|
257
|
-
</span><span class='id identifier
|
|
258
|
-
<span class='id identifier rubyid_cur'>cur</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="top-level-namespace.html#Currency-constant" title="Currency (constant)">Currency</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>code:</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>EUR</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>symbol:</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>€</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>subunit:</span> <span class='int'>2</span><span class='comma'>,</span> <span class='label'>priority:</span> <span class='int'>0</span><span class='rparen'>)</span>
|
|
269
|
+
<p>For Rails applications, you can enable the top-level <code>Currency</code> constant in an initializer:</p>
|
|
270
|
+
<pre class="code ruby"><code class="ruby"><span class='comment'># config/initializers/minting.rb
|
|
271
|
+
</span><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>minting/mint/aliases</span><span class='tstring_end'>"</span></span>
|
|
259
272
|
</code></pre>
|
|
273
|
+
<p>If another <code>Money</code> is already defined when <code>require "minting"</code> runs (e.g. the <code>money</code> gem was loaded first), Minting warns and skips the auto-bind — use <code>Mint::Money</code> in that case. The same applies to <code>Currency</code> via <code>minting/mint/aliases</code>.</p>
|
|
260
274
|
<p><strong>Good fit:</strong> Application code, especially Rails apps.
|
|
261
275
|
<strong>Not recommended:</strong> Reusable gems/libraries — stick to <code>Mint::Money</code> to avoid conflicts.</p>
|
|
262
276
|
<h2 id="Roadmap">Roadmap</h2>
|
|
@@ -267,7 +281,7 @@
|
|
|
267
281
|
<p>MIT</p></div></div>
|
|
268
282
|
|
|
269
283
|
<div id="footer">
|
|
270
|
-
Generated on
|
|
284
|
+
Generated on Wed Jul 1 01:11:52 2026 by
|
|
271
285
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
272
286
|
0.9.44 (ruby-4.0.5).
|
|
273
287
|
</div>
|