module Elasticsearch::Model::Response::Pagination::Kaminari

Allow models to be paginated with the “kaminari” gem [github.com/amatsuda/kaminari]

Public Class Methods

included(base) click to toggle source
# File lib/elasticsearch/model/response/pagination/kaminari.rb, line 28
          def self.included(base)
            # Include the Kaminari configuration and paging method in response
            #
            base.__send__ :include, ::Kaminari::ConfigurationMethods::ClassMethods
            base.__send__ :include, ::Kaminari::PageScopeMethods

            # Include the Kaminari paging methods in results and records
            #
            Elasticsearch::Model::Response::Results.__send__ :include, ::Kaminari::ConfigurationMethods::ClassMethods
            Elasticsearch::Model::Response::Results.__send__ :include, ::Kaminari::PageScopeMethods
            Elasticsearch::Model::Response::Records.__send__ :include, ::Kaminari::PageScopeMethods

            Elasticsearch::Model::Response::Results.__send__ :delegate, :limit_value, :offset_value, :total_count, :max_pages, to: :response
            Elasticsearch::Model::Response::Records.__send__ :delegate, :limit_value, :offset_value, :total_count, :max_pages, to: :response

            base.class_eval <<-RUBY, __FILE__, __LINE__ + 1
              # Define the `page` Kaminari method
              #
              def #{::Kaminari.config.page_method_name}(num=nil)
                @results  = nil
                @records  = nil
                @response = nil
                @page     = [num.to_i, 1].max
                @per_page ||= __default_per_page

                self.search.definition.update size: @per_page,
                                              from: @per_page * (@page - 1)

                self
              end
            RUBY
          end

Public Instance Methods

__default_per_page() click to toggle source

Returns the models's `per_page` value or the default

@api private

# File lib/elasticsearch/model/response/pagination/kaminari.rb, line 119
def __default_per_page
  klass.respond_to?(:default_per_page) && klass.default_per_page || ::Kaminari.config.default_per_page
end
limit(value) click to toggle source

Set the “limit” (`size`) value

# File lib/elasticsearch/model/response/pagination/kaminari.rb, line 85
def limit(value)
  return self if value.to_i <= 0
  @results  = nil
  @records  = nil
  @response = nil
  @per_page = value.to_i

  search.definition.update :size => @per_page
  search.definition.update :from => @per_page * (@page - 1) if @page
  self
end
limit_value() click to toggle source

Returns the current “limit” (`size`) value

# File lib/elasticsearch/model/response/pagination/kaminari.rb, line 63
def limit_value
  case
  when search.definition[:size]
    search.definition[:size]
  else
    __default_per_page
  end
end
offset(value) click to toggle source

Set the “offset” (`from`) value

# File lib/elasticsearch/model/response/pagination/kaminari.rb, line 99
def offset(value)
  return self if value.to_i < 0
  @results  = nil
  @records  = nil
  @response = nil
  @page     = nil
  search.definition.update :from => value.to_i
  self
end
offset_value() click to toggle source

Returns the current “offset” (`from`) value

# File lib/elasticsearch/model/response/pagination/kaminari.rb, line 74
def offset_value
  case
  when search.definition[:from]
    search.definition[:from]
  else
    0
  end
end
total_count() click to toggle source

Returns the total number of results

# File lib/elasticsearch/model/response/pagination/kaminari.rb, line 111
def total_count
  results.total
end