Module: Elasticsearch::Model::Response::Pagination::WillPaginate
- Defined in:
- lib/elasticsearch/model/response/pagination.rb
Overview
Allow models to be paginated with the “will_paginate” gem [github.com/mislav/will_paginate]
Class Method Summary collapse
Instance Method Summary collapse
-
#current_page ⇒ Object
Return the current page.
- #length ⇒ Object
- #offset ⇒ Object
-
#page(num) ⇒ Object
Pagination method.
-
#paginate(options) ⇒ Object
Main pagination method.
-
#per_page(num = nil) ⇒ Object
Return or set the “size” value.
-
#total_entries ⇒ Object
Returns the total number of results.
Class Method Details
.included(base) ⇒ Object
100 101 102 103 104 105 106 107 108 |
# 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 |
Instance Method Details
#current_page ⇒ Object
Return the current page
135 136 137 |
# 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 ⇒ Object
114 115 116 |
# File 'lib/elasticsearch/model/response/pagination.rb', line 114 def length search.definition[:size] end |
#offset ⇒ Object
110 111 112 |
# File 'lib/elasticsearch/model/response/pagination.rb', line 110 def offset (current_page - 1) * per_page end |
#page(num) ⇒ Object
Pagination method
145 146 147 |
# File 'lib/elasticsearch/model/response/pagination.rb', line 145 def page(num) paginate(page: num, per_page: per_page) # shorthand end |
#paginate(options) ⇒ Object
Main pagination method
124 125 126 127 128 129 130 131 |
# File 'lib/elasticsearch/model/response/pagination.rb', line 124 def paginate() page = [[:page].to_i, 1].max per_page = ([:per_page] || klass.per_page).to_i search.definition.update size: per_page, from: (page - 1) * per_page self end |
#per_page(num = nil) ⇒ Object
Return or set the “size” value
155 156 157 158 159 160 161 |
# 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 ⇒ Object
Returns the total number of results
165 166 167 |
# File 'lib/elasticsearch/model/response/pagination.rb', line 165 def total_entries results.total end |