module Normalizy::Filters::Money

Public Class Methods

call(input, options = {}) click to toggle source
# File lib/normalizy/filters/money.rb, line 7
def call(input, options = {})
  return input unless input.is_a?(String)

  value = input.gsub(/[^[0-9-]#{separator(options)}]/, '')

  return nil if value.blank?

  if cents?(options)
    value = precisioned(value, options).delete('.') if value.include? separator(options)
  else
    value = precisioned(value, options)
  end

  return value.send(options[:cast]) if options[:cast]

  value
end

Private Class Methods

cents?(options) click to toggle source
# File lib/normalizy/filters/money.rb, line 27
def cents?(options)
  options[:type]&.to_sym == :cents
end
precision(options) click to toggle source
# File lib/normalizy/filters/money.rb, line 31
def precision(options)
  options.fetch :precision, I18n.t('currency.format.precision', default: 2)
end
precisioned(value, options) click to toggle source
# File lib/normalizy/filters/money.rb, line 35
def precisioned(value, options)
  format("%0.#{precision(options)}f", value.sub(separator(options), '.'))
end
separator(options) click to toggle source
# File lib/normalizy/filters/money.rb, line 39
def separator(options)
  options.fetch :separator, I18n.t('currency.format.separator', default: '.')
end