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