Sha256: 5b2b9fc8a79dff84630f04a859eb1ce3a546963643a3ab1d1663f6b07a480e5a
Contents?: true
Size: 1.87 KB
Versions: 1
Compression:
Stored size: 1.87 KB
Contents
require 'searchlogic' module Espresso # @author Alexander Semyonov module Model unloadable def self.included(model) model.class_eval do extend ClassMethods include InstanceMethods end end module ClassMethods # Paginates search results # # @param [Integer] page number of results’ page # @param [Hash] query searchlogic fields (proc’ed named scopes’ names with values) # @param [String] simple_query params for simple «LIKE '%something%'» searches (e.g. /people?q=Alexander) # @return [Array] searchlogic object and collection of results # # @todo Add an options to paginating def paginate_found(page = nil, query = {}, simple_query = nil) query ||= {} query.merge!(self.parse_simple_query(simple_query)) if simple_query @search = search(query) @results = @search.paginate(:page => page) [@search, @results] end alias_method :search_results, :paginate_found # Make searchlogic query from simple query option # Needed to be reimplemented in subclasses # # @param [String] simple query string # @return [Hash] searchlogic query def parse_simple_query(query) {:"#{name_field}_like" => query} end # «NameField» is a main field, used to represent model in to_s method and in simple queries # @param [Symbol, String] new_name_field new field name # @return [Symbol] field name def name_field :name end # Make a slug from object’s NameField # @param [ActiveRecord::Base] object, which slug is making # @return [String] slug def make_slug(object) object.send(name_field).parameterize end end module InstanceMethods def to_s send(self.class.name_field).to_s end protected end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
espresso-0.1.1 | lib/espresso/model.rb |