Module: Mpp::Units
- Extended by:
- T::Sig
- Defined in:
- lib/mpp/units.rb
Class Method Summary collapse
Class Method Details
.parse_units(value, decimals) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/mpp/units.rb', line 15 def parse_units(value, decimals) Kernel.raise ArgumentError, "amount is required" unless value.is_a?(String) && !value.strip.empty? stripped = value.strip d = Kernel.BigDecimal(stripped) rescue ArgumentError Kernel.raise ArgumentError, "Invalid amount: #{value.inspect}" else Kernel.raise ArgumentError, "amount must be finite" unless d.finite? Kernel.raise ArgumentError, "amount must be non-negative" if d.negative? result = d * (Kernel.BigDecimal(10)**decimals) int_result = result.to_i unless T.unsafe(result) == int_result Kernel.raise ArgumentError, "Amount #{value.inspect} with #{decimals} decimals produces fractional base units" end int_result end |
.transform_units(request) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/mpp/units.rb', line 40 def transform_units(request) return request unless request.key?("decimals") result = request.dup decimals = result.delete("decimals") Kernel.raise ArgumentError, "decimals must be an integer, got #{decimals.class.name}" unless decimals.is_a?(Integer) result["amount"] = parse_units(result["amount"], decimals).to_s if result.key?("amount") if result.key?("suggestedDeposit") && !result["suggestedDeposit"].nil? result["suggestedDeposit"] = parse_units(result["suggestedDeposit"], decimals).to_s end result end |