Sha256: ab6844c82aa8b4686739dd97eede7121059a548274279dd237e0df4634c092a8

Contents?: true

Size: 1.09 KB

Versions: 6

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

module Normalizy
  module Filters
    module Percent
      class << self
        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

        def cents?(options)
          options[:type]&.to_sym == :cents
        end

        def precision(options)
          options.fetch :precision, I18n.t('percentage.format.precision', default: 2)
        end

        def precisioned(value, options)
          format("%0.#{precision(options)}f", value.sub(separator(options), '.'))
        end

        def separator(options)
          options.fetch :separator, I18n.t('percentage.format.separator', default: '.')
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
normalizy-1.5.0 lib/normalizy/filters/percent.rb
normalizy-1.4.0 lib/normalizy/filters/percent.rb
normalizy-1.3.0 lib/normalizy/filters/percent.rb
normalizy-1.2.0 lib/normalizy/filters/percent.rb
normalizy-1.1.1 lib/normalizy/filters/percent.rb
normalizy-1.1.0 lib/normalizy/filters/percent.rb