class Lolita::Configuration::Search
Proxy class for search. It supports two methods with
and run
. By default with method accepts method name or nothing and creates Lolita::Search::Simple
instance that will be used to run search on current dbi. By default search run against all content fields, but when :fields options is passed it search in those fields only.
Example¶ ↑
class Post < ActiveRecord::Base include Lolita::Configuration lolita do list do search :fields => [:name] end end end
with
method also accepts class or instance of some class, that will be used to run search. That class should have run
method that accepts query and request.
Example¶ ↑
class MyCustomSearch def initialize(dbi) @dbi = dbi end def run(query,request = nil) @dbi.klass.where(:my_field => query) end end
Also you can put your search method in model. For more see Lolita::Search::Simple
Example¶ ↑
class Post < ActiveRecord::Base include Lolita::Configuration lolita do list do search :my_custom_search end end def self.my_custom_search(query,request) self.where(:title => query, :user_id => request.params[:user_id]) end end
Attributes
dbi[R]
fields[W]
with[W]
Public Class Methods
new(dbi, *args, &block)
click to toggle source
# File lib/lolita/configuration/search.rb, line 48 def initialize dbi, *args, &block @dbi = dbi set_attributes(args ? args.extract_options! : {}) instance_eval(&block) if block_given? @with ||= args[0]!=true && args[0] ? args[0] : nil end
Public Instance Methods
run(query,request = nil)
click to toggle source
# File lib/lolita/configuration/search.rb, line 70 def run(query,request = nil) if self.with.method(:run).arity < 0 || self.with.method(:run).arity > 1 self.with.run(query,request) else self.with.run(query) end end
update(method_name, list, request)
click to toggle source
# File lib/lolita/configuration/search.rb, line 78 def update method_name, list, request if method_name == :paginate && list.search search_criteria = list.search.run(request && request.params[:q] || "", request) page_criteria = if search_criteria.respond_to?(:where) list.page_criteria.merge(search_criteria) elsif search_criteria.nil? list.page_criteria else search_criteria end list.instance_variable_set(:@page_criteria,page_criteria) end end
with(value = nil)
click to toggle source
# File lib/lolita/configuration/search.rb, line 55 def with(value = nil) @with = value if value if !@with || [String,Symbol].include?(@with.class) @with = Lolita::Search::Simple.new(dbi,@with, :fields => @fields) elsif @with.class == Class initialize_arity = @with.instance_method(:initialize).arity @with = if initialize_arity < 0 || initialize_arity > 1 @with.new(dbi,:fields => @fields) else @with.new(dbi) end end @with end
Private Instance Methods
set_attributes(options)
click to toggle source
# File lib/lolita/configuration/search.rb, line 94 def set_attributes options if options.respond_to?(:each) options.each do |method_name, value| self.send(:"#{method_name}=",value) end end end