class Indago::Search

Public Class Methods

new(scope, fields, params) click to toggle source
# File lib/indago/search.rb, line 2
def initialize(scope, fields, params)
  @scope = scope
  @params = params.presence || {}
  @fields = fields
  @field_names = @fields.map { |field| field.name.to_sym }
end

Public Instance Methods

method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/indago/search.rb, line 16
def method_missing(name, *args, &block)
  if @field_names.include?(name) && args.empty?
    @params[name]
  elsif @scope.respond_to?(name)
    @scope.send(name, *args, &block)
  else
    super
  end
end
respond_to_missing?(name, include_private = false) click to toggle source
Calls superclass method
# File lib/indago/search.rb, line 26
def respond_to_missing?(name, include_private = false)
  @field_names.include?(name) || @scope.respond_to?(name) || super
end
result() click to toggle source
# File lib/indago/search.rb, line 9
def result
  @result ||= @fields.reduce(@scope) do |scope, field|
    value = @params[field.name]
    value.present? ? field.call(scope, value) : scope
  end
end