Sha256: a4986abe89644023bd8d364735622a818eaf30eb589ba960a82bc95c9420b691

Contents?: true

Size: 1.2 KB

Versions: 3

Compression:

Stored size: 1.2 KB

Contents

module Agilibox::ActiveModelTypeCast
  module Decimal
    def cast_value(value)
      if value.is_a?(String)
        super value.tr(",", ".").gsub(/[^-0-9\.]/, "")
      else
        super value
      end
    end
  end

  module Date
    # rubocop:disable Style/RegexpLiteral
    SANITIZABLE_FORMATS = [
      /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/,
      /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/,
    ]
    # rubocop:enable Style/RegexpLiteral

    def cast_value(value)
      if sanitizable?(value)
        super sanitize(value)
      else
        super value
      end
    end

    private

    def sanitize(value)
      value.delete(" ")
    end

    def sanitizable?(value)
      return false unless value.is_a?(String)
      sanitized = sanitize(value)
      SANITIZABLE_FORMATS.any? { |r| r =~ sanitized }
    end
  end

  module Boolean
    def cast_value(value)
      value = value.strip if value.is_a?(String)
      super value
    end
  end
end

ActiveModel::Type::Date.prepend(Agilibox::ActiveModelTypeCast::Date)
ActiveModel::Type::Boolean.prepend(Agilibox::ActiveModelTypeCast::Boolean)
ActiveModel::Type::Decimal.prepend(Agilibox::ActiveModelTypeCast::Decimal)
ActiveModel::Type::Float.prepend(Agilibox::ActiveModelTypeCast::Decimal)

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
agilibox-1.9.5 lib/agilibox/active_model_type_cast.rb
agilibox-1.9.4 lib/agilibox/active_model_type_cast.rb
agilibox-1.9.3 lib/agilibox/active_model_type_cast.rb