class FuzzyMoney::Price
Constants
- DEFAULT_DENOMINATED_ORDER
- DEFAULT_NORMALIZATIONS
Attributes
denominated_order[R]
normalizations[R]
raw[R]
Public Class Methods
new(raw, options={})
click to toggle source
# File lib/fuzzy_money/price.rb, line 19 def initialize(raw, options={}) if raw.is_a? String @raw = raw.clone.strip else @raw = "" end @normalizations = options.fetch(:normalizations, DEFAULT_NORMALIZATIONS) @denominated_order = options.fetch(:denominated_order, DEFAULT_DENOMINATED_ORDER) end
Public Instance Methods
denominate(convert=:to_f)
click to toggle source
# File lib/fuzzy_money/price.rb, line 69 def denominate(convert=:to_f) value = split[:value].send(convert) denomination = split[:denomination] if denominated_order[denomination] == :after "#{value}#{denomination}" else "#{denomination}#{value}" end end
min()
click to toggle source
# File lib/fuzzy_money/price.rb, line 54 def min if range? range[0] elsif multiple? multiple.sort { |p| p.normalized_float }.first else self end end
multiple()
click to toggle source
# File lib/fuzzy_money/price.rb, line 30 def multiple Array( raw.split('/') .map(&:strip) .map { |r| Price.new(r) } ) end
multiple?()
click to toggle source
# File lib/fuzzy_money/price.rb, line 50 def multiple? multiple.size > 1 end
normalize()
click to toggle source
# File lib/fuzzy_money/price.rb, line 64 def normalize return '' if split[:value].nil? min.denominate(:round) end
normalized_float()
click to toggle source
# File lib/fuzzy_money/price.rb, line 103 def normalized_float return 0.0 if split[:value].nil? split[:value] * normalizations[split[:denomination]] end
range()
click to toggle source
# File lib/fuzzy_money/price.rb, line 38 def range Array( raw.split('-') .map(&:strip) .map { |r| Price.new(r) } ) end
range?()
click to toggle source
# File lib/fuzzy_money/price.rb, line 46 def range? range.size > 1 end
split()
click to toggle source
# File lib/fuzzy_money/price.rb, line 80 def split denomination, value = \ case raw when /C\$(\d+\.?\d{0,2})/ # Canadian ['C$', $1.to_f] when /\$(\d+\.?\d{0,2})/ # USA ['$', $1.to_f] when /€(\d+[\.,]?\d{0,2})/ # Leading Euro ['€', $1.to_f] when /(\d+[\.,]?\d{0,2})€/ # Trailing Euro ['€', $1.to_f] when /£(\d+[\.,]?\d{0,2})/ # Pounds ['£', $1.to_f] else [nil, nil] end { denomination: denomination, value: value } end