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.rb, line 11
          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, to: :response
            Elasticsearch::Model::Response::Records.__send__ :delegate, :limit_value, :offset_value, :total_count, 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 ||= klass.default_per_page

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

                self
              end
            RUBY
          end

Public Instance Methods

limit(value) click to toggle source

Set the “limit” (‘size`) value

# File lib/elasticsearch/model/response/pagination.rb, line 68
def limit(value)
  @results  = nil
  @records  = nil
  @response = nil
  @per_page = value

  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.rb, line 46
def limit_value
  case
    when search.definition[:size]
      search.definition[:size]
    else
      search.klass.default_per_page
  end
end
offset(value) click to toggle source

Set the “offset” (‘from`) value

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

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

# File lib/elasticsearch/model/response/pagination.rb, line 57
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.rb, line 92
def total_count
  results.total
end