Module: Querifier::Queries::Where

Defined in:
lib/querifier/queries/where.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(message, *args, &block) ⇒ Object



29
30
31
32
# File 'lib/querifier/queries/where.rb', line 29

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

Class Method Details

.included(klass) ⇒ Object



44
45
46
# File 'lib/querifier/queries/where.rb', line 44

def self.included(klass)
  klass.extend(ClassMethods)
end

Instance Method Details

#collectionObject



4
5
6
7
8
# File 'lib/querifier/queries/where.rb', line 4

def collection
  super
  filter
  @collection
end

#filterObject



10
11
12
13
14
15
16
17
# File 'lib/querifier/queries/where.rb', line 10

def filter
  return self if @filtered
  filter_params.each do |(attribute, value)|
    send("filter_by_#{attribute}", value) if value
  end
  @filtered = true
  self
end

#filter_by(name, value) ⇒ Object



23
24
25
26
27
# File 'lib/querifier/queries/where.rb', line 23

def filter_by(name, value)
  filter_content = filter_value(name)
  @collection = @collection.where("#{name} LIKE ?", "%#{filter_content}%") if filter_content
  self
end

#filter_paramsObject



38
39
40
41
# File 'lib/querifier/queries/where.rb', line 38

def filter_params
  @filter_params ||=
    params.fetch(Config.where_param, {}).select { |k| valid_option? k.to_sym }
end

#filter_value(key) ⇒ Object



19
20
21
# File 'lib/querifier/queries/where.rb', line 19

def filter_value(key)
  filter_params.fetch(key.to_sym, nil)
end

#valid_option?(option) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/querifier/queries/where.rb', line 34

def valid_option?(option)
  self.class.where_attributes.include?(option.to_sym)
end