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