class Pickel::Search

Attributes

klass[R]
params[R]
relation[R]
s[R]
sorts[R]

Public Class Methods

new(relation, params = {}) click to toggle source
# File lib/pickel/search.rb, line 7
def initialize(relation, params = {})
  @relation = relation
  @klass = relation.klass
  @params = params || {}
  @sorts = []
  @sorts << @params.delete(:s)
  @sorts << @params.delete(:sorts)
  @sorts.compact!
end

Public Instance Methods

html_id() click to toggle source
# File lib/pickel/search.rb, line 34
def html_id
  "#{klass.to_s.underscore}_search"
end
method_missing(method_id, *args) click to toggle source
Calls superclass method
# File lib/pickel/search.rb, line 42
def method_missing(method_id, *args)
  method_name = method_id.to_s
  getter_name = method_name.delete_suffix('=')
  predicate = Predicate.find(getter_name)

  if predicate && method_name.end_with?('=')
    params[getter_name] = *args
  elsif predicate
    params[getter_name]
  else
    super
  end
end
respond_to?(name, include_all = false) click to toggle source
Calls superclass method
# File lib/pickel/search.rb, line 38
def respond_to?(name, include_all = false)
  super || params.key?(name)
end
result() click to toggle source
# File lib/pickel/search.rb, line 24
def result
  conditions = params.map { |k, v| Condition.for(klass, k).build(v) }

  if sorts.empty?
    conditions.inject(relation, :merge)
  else
    conditions.inject(relation, :merge).order(sorts)
  end
end
s=(args)
Alias for: sorts=
sorts=(args) click to toggle source
# File lib/pickel/search.rb, line 19
def sorts=(args)
  @sorts = args
end
Also aliased as: s=