Sha256: 1da43e0f4994916933826b69fc4804908ab5d75c250bef8eef7d33b3b6582eab

Contents?: true

Size: 974 Bytes

Versions: 4

Compression:

Stored size: 974 Bytes

Contents

# Define filter rules
#
module QueryFilter::Rules
  class Scope
    VALIDATON_KEYS = [:in, :only, :format].freeze

    attr_reader :keys

    def initialize(keys, options = {})
      @keys = Array(keys)
      @options = options
    end

    def blank_validation?
      (@options.keys & VALIDATON_KEYS).empty?
    end

    def valid?(params)
      values = normalize_params(params)

      checks = []
      checks << @options[:in].include?(values.first) if @options[:in]
      checks << @options[:only].include?(values.first) if @options[:only]
      checks << !values.map(&:blank?).all? if blank_validation?
      checks << @options[:intersect] & Array.wrap(values) if @options[:intersect]

      !checks.empty? && checks.all?
    end

    def endpoint
      @options[:to] || "#{name}_#{key}"
    end

    def name
      'scope'.freeze
    end

    def key
      @key ||= @keys.first
    end

    def normalize_params(params)
      params.values_at(*keys)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
query_filter-0.1.3 lib/query_filter/rules/scope.rb
query_filter-0.1.2 lib/query_filter/rules/scope.rb
query_filter-0.1.1 lib/query_filter/rules/scope.rb
query_filter-0.1.0 lib/query_filter/rules/scope.rb