diff --git a/lib/will_paginate/mongoid.rb b/lib/will_paginate/mongoid.rb index 1eb3bcf55..58b6cee6d 100644 --- a/lib/will_paginate/mongoid.rb +++ b/lib/will_paginate/mongoid.rb @@ -6,8 +6,8 @@ module Mongoid module CriteriaMethods def paginate(options = {}) extend CollectionMethods - @current_page = WillPaginate::PageNumber(options[:page] || 1) - @per_page = (options[:per_page] || WillPaginate.per_page).to_i + @current_page = WillPaginate::PageNumber(options[:page] || @current_page || 1) + @per_page = (options[:per_page] || @per_page || WillPaginate.per_page).to_i @page_multiplier = current_page - 1 limit(per_page).skip(@page_multiplier * per_page) end diff --git a/spec/finders/mongoid_spec.rb b/spec/finders/mongoid_spec.rb index a05c87215..a8d46c19e 100644 --- a/spec/finders/mongoid_spec.rb +++ b/spec/finders/mongoid_spec.rb @@ -20,6 +20,11 @@ class MongoidModel criteria.expects(:paginate).with(:page => 2).returns("itself") criteria.page(2).should == "itself" end + + it "should not override per_page if set earlier in the chain" do + criteria.paginate(:per_page => 10).page(1).per_page.should == 10 + criteria.paginate(:per_page => 20).page(1).per_page.should == 20 + end end describe "#paginate" do @@ -27,6 +32,10 @@ class MongoidModel criteria.paginate.should be_instance_of(::Mongoid::Criteria) end + it "should not override page number if set earlier in the chain" do + criteria.page(3).paginate.current_page.should == 3 + end + it "should limit according to per_page parameter" do criteria.paginate(:per_page => 10).options.should include(:limit => 10) end