module Querifier::Queries::Where

Public Class Methods

included(klass) click to toggle source
# File lib/querifier/queries/where.rb, line 45
def self.included(klass)
  klass.extend(ClassMethods)
end

Public Instance Methods

collection() click to toggle source
Calls superclass method
# File lib/querifier/queries/where.rb, line 4
def collection
  super
  filter
  @collection
end
filter() click to toggle source
# File lib/querifier/queries/where.rb, line 10
def filter
  return self if @filtered
  filter_params.each do |(attribute, _)|
    value = filter_value(attribute)
    send("filter_by_#{attribute}", value) if value
  end
  @filtered = true
  self
end
filter_by(name, value) click to toggle source
# File lib/querifier/queries/where.rb, line 24
def filter_by(name, value)
  filter_content = filter_value(name)
  @collection = @collection.where("#{name} LIKE ?", "%#{filter_content}%") if filter_content
  self
end
filter_params() click to toggle source
# File lib/querifier/queries/where.rb, line 39
def filter_params
  @filter_params ||=
    params.fetch(Config.where_param, {}).select { |(k, _)| valid_option? k.to_sym }
end
filter_value(key) click to toggle source
# File lib/querifier/queries/where.rb, line 20
def filter_value(key)
  filter_params.fetch(key.to_sym, nil)
end
method_missing(message, *args, &block) click to toggle source
Calls superclass method
# File lib/querifier/queries/where.rb, line 30
def method_missing(message, *args, &block)
  return filter_by(Regexp.last_match(1).to_sym, args.first) if message.to_s =~ /filter_by_(.*)/ # rubocop:disable Performance/RegexpMatch, Metrics/LineLength
  super
end
valid_option?(option) click to toggle source
# File lib/querifier/queries/where.rb, line 35
def valid_option?(option)
  self.class.where_attributes.include?(option.to_sym)
end