module Elasticsearch::Model::Response::Pagination::WillPaginate

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

Public Class Methods

included(base) click to toggle source
# File lib/elasticsearch/model/response/pagination.rb, line 100
def self.included(base)
  base.__send__ :include, ::WillPaginate::CollectionMethods

  # Include the paging methods in results and records
  #
  methods = [:current_page, :offset, :length, :per_page, :total_entries, :total_pages, :previous_page, :next_page, :out_of_bounds?]
  Elasticsearch::Model::Response::Results.__send__ :delegate, *methods, to: :response
  Elasticsearch::Model::Response::Records.__send__ :delegate, *methods, to: :response
end

Public Instance Methods

current_page() click to toggle source

Return the current page

# File lib/elasticsearch/model/response/pagination.rb, line 135
def current_page
  search.definition[:from] / per_page + 1 if search.definition[:from] && per_page
end
length() click to toggle source
# File lib/elasticsearch/model/response/pagination.rb, line 114
def length
  search.definition[:size]
end
offset() click to toggle source
# File lib/elasticsearch/model/response/pagination.rb, line 110
def offset
  (current_page - 1) * per_page
end
page(num) click to toggle source

Pagination method

@example

Article.search('foo').page(2)
# File lib/elasticsearch/model/response/pagination.rb, line 145
def page(num)
  paginate(page: num, per_page: per_page) # shorthand
end
paginate(options) click to toggle source

Main pagination method

@example

Article.search('foo').paginate(page: 1, per_page: 30)
# File lib/elasticsearch/model/response/pagination.rb, line 124
def paginate(options)
  page = [options[:page].to_i, 1].max
  per_page = (options[:per_page] || klass.per_page).to_i

  search.definition.update size: per_page,
                           from: (page - 1) * per_page
  self
end
per_page(num = nil) click to toggle source

Return or set the “size” value

@example

Article.search('foo').per_page(15).page(2)
# File lib/elasticsearch/model/response/pagination.rb, line 155
def per_page(num = nil)
  if num.nil?
    search.definition[:size]
  else
    paginate(page: current_page, per_page: num) # shorthand
  end
end
total_entries() click to toggle source

Returns the total number of results

# File lib/elasticsearch/model/response/pagination.rb, line 165
def total_entries
  results.total
end