| Class | Mack::Database::Paginator |
| In: |
lib/mack-data_mapper/paginator.rb
|
| Parent: | Object |
Implements the paginate method from the Mack::Database::Paginator spec in mack-orm.
# File lib/mack-data_mapper/paginator.rb, line 7
7: def paginate
8: order_clause = [self.query_options.delete(:order)].flatten.compact
9:
10: self.total_results = self.klass.count(self.query_options)
11: self.total_pages = (self.total_results.to_f / self.results_per_page).ceil
12:
13: self.current_page = self.total_pages if self.current_page > self.total_pages
14:
15: if order_clause.empty?
16: self.klass.key.each do |k|
17: order_clause << k.name.to_sym.asc
18: end
19: end
20:
21: self.query_options.reverse_merge!({
22: :order => order_clause
23: })
24:
25: offset = (self.current_page - 1) * self.results_per_page
26: offset = 0 if offset < 0
27:
28: self.query_options.merge!({
29: :limit => self.results_per_page,
30: :offset => offset
31: })
32:
33: self.results = self.klass.all(self.query_options)
34: self
35: end