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/will_paginate.rb, line 30 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
__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/will_paginate.rb, line 104 def __default_per_page klass.respond_to?(:per_page) && klass.per_page || ::WillPaginate.per_page end
current_page()
click to toggle source
Return the current page
# File lib/elasticsearch/model/response/pagination/will_paginate.rb, line 66 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/will_paginate.rb, line 44 def length search.definition[:size] end
offset()
click to toggle source
# File lib/elasticsearch/model/response/pagination/will_paginate.rb, line 40 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/will_paginate.rb, line 76 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/will_paginate.rb, line 54 def paginate(options) param_name = options[:param_name] || :page page = [options[param_name].to_i, 1].max per_page = (options[:per_page] || __default_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/will_paginate.rb, line 86 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/will_paginate.rb, line 96 def total_entries results.total end