Sha256: e11268f90d83e45baf7f45b3da92c2a95dc9bdb79a26e22605b118a319703e3e

Contents?: true

Size: 1.52 KB

Versions: 9

Compression:

Stored size: 1.52 KB

Contents

require 'active_support/core_ext/module/delegation'
require 'active_support/core_ext/object/blank'

module Might
  # User provided filtering on particular parameter
  #
  class FilterParameter
    # @return [String, nil]
    #
    attr_reader :predicate

    # @return [ParameterDefinition, nil]
    #
    attr_reader :definition

    def initialize(value, predicate, definition)
      @value = value
      @predicate = predicate.to_s
      @definition = definition
    end

    delegate :name, to: :definition
    delegate :on, to: :definition

    # Check if this parameter provided by user.
    # If the parameter defined by not given by user this returns false.
    # @return [Boolean]
    def provided?
      value.present? && predicate.present?
    end

    def ==(other)
      is_a?(other.class) &&
        value == other.value &&
        predicate == other.predicate &&
        definition == other.definition
    end

    # @return [String, Array<String>]
    # TODO: memoize
    def value
      if @value.is_a?(Array)
        @value.map { |v| definition.coerce(v) }
      else
        definition.coerce(@value)
      end
    end

    def valid?
      validators.all?(&:valid?)
    end

    def invalid?
      validators.any?(&:invalid?)
    end

    def errors
      validators.map(&:errors).flat_map(&:full_messages).compact.uniq
    end

    private

    def validators
      values_for_validation = @value.is_a?(Array) ? @value : [@value]
      @validators ||= values_for_validation.map { |v| definition.validator.new(v) }
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
might-0.7.1 lib/might/filter_parameter.rb
might-0.7.0 lib/might/filter_parameter.rb
might-0.6.0 lib/might/filter_parameter.rb
might-0.5.2 lib/might/filter_parameter.rb
might-0.5.1 lib/might/filter_parameter.rb
might-0.5.0 lib/might/filter_parameter.rb
might-0.4.0 lib/might/filter_parameter.rb
might-0.3.1 lib/might/filter_parameter.rb
might-0.3.0 lib/might/filter_parameter.rb