module Normalizy::Filters::Percent
Public Class Methods
call(input, options = {})
click to toggle source
# File lib/normalizy/filters/percent.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/percent.rb, line 27 def cents?(options) options[:type]&.to_sym == :cents end
precision(options)
click to toggle source
# File lib/normalizy/filters/percent.rb, line 31 def precision(options) options.fetch :precision, I18n.t('percentage.format.precision', default: 2) end
precisioned(value, options)
click to toggle source
# File lib/normalizy/filters/percent.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/percent.rb, line 39 def separator(options) options.fetch :separator, I18n.t('percentage.format.separator', default: '.') end