Sha256: a63a84edff7e8bef04e93e48415f86f3ffe0989e7364b30ba8562877871b42a5

Contents?: true

Size: 954 Bytes

Versions: 1

Compression:

Stored size: 954 Bytes

Contents

module FilterParam
  class Field
    TYPES = %i[boolean string integer decimal date datetime].freeze

    attr_reader :type, :name

    def initialize(name, type, options = {})
      @name = name
      @type = field_type(type)
      @rename = field_rename(options[:rename])
      @value_transformer = options[:value]
    end

    def transform_value(value)
      return value if value_transformer.blank?

      value_transformer.call(value)
    end

    def actual_name
      rename.presence || name
    end

    def allow_operator?(operator)
      true
    end

    private

    attr_reader :value_transformer, :rename

    def field_rename(rename)
      return rename.call(name) if rename.is_a?(Proc)

      rename
    end

    def field_type(type)
      type = (type.presence || :string).to_sym
      return type if type.in?(TYPES)

      raise UnknownType.new("Unknown type '#{type}' for field '#{name}'. Allowed types: #{TYPES}.")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
filter_param-0.1.2 lib/filter_param/field.rb