Sha256: b9d6b9e3e743f37d431dde63df530b31a05d35b0a465754159cb0123a8b39abb

Contents?: true

Size: 1.18 KB

Versions: 4

Compression:

Stored size: 1.18 KB

Contents

module BMC::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(BMC::ActiveModelTypeCast::Date)
ActiveModel::Type::Boolean.prepend(BMC::ActiveModelTypeCast::Boolean)
ActiveModel::Type::Decimal.prepend(BMC::ActiveModelTypeCast::Decimal)
ActiveModel::Type::Float.prepend(BMC::ActiveModelTypeCast::Decimal)

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
bmc-1.6.1 lib/bmc/active_model_type_cast.rb
bmc-1.6.0 lib/bmc/active_model_type_cast.rb
bmc-1.5.1 lib/bmc/active_model_type_cast.rb
bmc-1.5.0 lib/bmc/active_model_type_cast.rb