krunaldo-dm-pagination 0.3.0.0 → 0.3.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -21,3 +21,10 @@ USAGE:
21
21
  </ul>
22
22
  <%= paginate @posts %>
23
23
 
24
+ Paramaters:
25
+ :order = same paramaters as the :order in a normal DM call
26
+ (http://datamapper.org/doku.php?id=docs:finders&s[]=order#order)
27
+
28
+ :per_page = Number of items per page
29
+
30
+ :page = What page number
@@ -1,40 +1,30 @@
1
1
  module DmPagination
2
2
  class Pagination
3
+ attr_reader :page, :num_pages
4
+
3
5
  def initialize(collection, options)
6
+ @proxy_collection = collection
7
+ order = options[:order]
8
+
4
9
  @page = (options[:page] || 1).to_i
5
10
  @per_page = (options[:per_page] || 10).to_i
6
- @reverse = true if options[:reverse]
7
- @proxy_collection = collection
8
- @offset = offset
9
11
  @num_pages = (@proxy_collection.count + @per_page - 1) / @per_page
10
- @collection = collection.all(
11
- :offset => @offset , :limit => @per_page)
12
- end
12
+ @offset = (@page - 1)*@per_page
13
13
 
14
- def page
15
- @page
14
+ @collection = collection.all(:offset => @offset, :limit => @per_page)
15
+ @collection = @collection.all(:order => order) if order
16
16
  end
17
17
 
18
- def offset
19
- if @reverse
20
- (@page - @numpages)*@per_page
21
- else
22
- (@page - 1)*@per_page
23
- end
24
- end
25
-
26
-
27
18
  def pages(window = 5, left = 2, right = 2)
28
- return [] if @num_pages <= 1
29
- (1..@num_pages).inject([]) do |result, i|
30
- i <= left || (@num_pages - i) < right || (i-page).abs < window ?
19
+ return [] if num_pages <= 1
20
+ (1..num_pages).inject([]) do |result, i|
21
+ i <= left || (num_pages - i) < right || (i-page).abs < window ?
31
22
  result << i : (result.last.nil? ? result : result << nil)
32
23
  end
33
24
  end
34
25
 
35
26
  def count
36
- offset = (@page - 1)*@per_page
37
- [0, [@proxy_collection.count - offset, @per_page].min].max
27
+ [0, [@proxy_collection.count - @offset, @per_page].min].max
38
28
  end
39
29
 
40
30
  def respond_to?(*args, &block)
@@ -50,6 +50,10 @@ describe "dm-pagination" do
50
50
  Post.paginate(:page => 12).count.should == 0
51
51
  Post.paginate(:page => 5, :per_page => 6).count.should == 6
52
52
  end
53
+
54
+ it "should handle :order parametetr" do
55
+ Post.paginate(:page => 1, :order => [:id.desc]).first.id.should == 101
56
+ end
53
57
  end
54
58
 
55
59
  describe "pagination builder" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: krunaldo-dm-pagination
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.0
4
+ version: 0.3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Takiuchi