Class: QueryFilter::Rules::Scope

Inherits:
Object
  • Object
show all
Defined in:
lib/query_filter/rules/scope.rb

Direct Known Subclasses

DateRange, OrderBy, Range, SplitterRange

Constant Summary collapse

VALIDATON_KEYS =
[:in, :only, :format, :if, :unless].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(keys, options = {}) ⇒ Scope

Returns a new instance of Scope.



10
11
12
13
# File 'lib/query_filter/rules/scope.rb', line 10

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

Instance Attribute Details

#keysObject (readonly)

Returns the value of attribute keys.



8
9
10
# File 'lib/query_filter/rules/scope.rb', line 8

def keys
  @keys
end

Instance Method Details

#blank_validation?Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/query_filter/rules/scope.rb', line 15

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

#can_apply?(target) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
55
# File 'lib/query_filter/rules/scope.rb', line 47

def can_apply?(target)
  conditions = QueryFilter::Utils::UserConditions.new(target, @options)

  if conditions.present?
    conditions.passed?
  else
    valid?(target.params)
  end
end

#endpointObject



31
32
33
# File 'lib/query_filter/rules/scope.rb', line 31

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

#keyObject



39
40
41
# File 'lib/query_filter/rules/scope.rb', line 39

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

#nameObject



35
36
37
# File 'lib/query_filter/rules/scope.rb', line 35

def name
  'scope'.freeze
end

#normalize_params(params) ⇒ Object



43
44
45
# File 'lib/query_filter/rules/scope.rb', line 43

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

#valid?(params) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
22
23
24
25
26
27
28
29
# File 'lib/query_filter/rules/scope.rb', line 19

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