From 8c742f3e1f459fd1e0d226d7c7980a949c8c4ee6 Mon Sep 17 00:00:00 2001 From: keating Date: Fri, 28 Sep 2012 14:29:29 +0800 Subject: [PATCH] render page links for zero or one page --- lib/will_paginate/view_helpers.rb | 15 +++++++++++---- spec/view_helpers/base_spec.rb | 19 ++++++++++++++++--- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/lib/will_paginate/view_helpers.rb b/lib/will_paginate/view_helpers.rb index ba00721e2..c5c906cf6 100644 --- a/lib/will_paginate/view_helpers.rb +++ b/lib/will_paginate/view_helpers.rb @@ -41,8 +41,7 @@ class << self include WillPaginate::I18n # Returns HTML representing page links for a WillPaginate::Collection-like object. - # In case there is no more than one page in total, nil is returned. - # + # # ==== Options # * :class -- CSS class name for the generated DIV (default: "pagination") # * :previous_label -- default: "« Previous" @@ -59,6 +58,8 @@ class << self # * :page_links -- when false, only previous/next links are rendered (default: true) # * :container -- toggles rendering of the DIV container for pagination links, set to # false only when you are rendering your own pagination markup (default: true) + # * :always_render -- if there is no more than one page in total, check this param + # to determine if will render the page links # # All options not recognized by will_paginate will become HTML attributes on the container # element for pagination links (the DIV). For example: @@ -70,8 +71,14 @@ class << self # # def will_paginate(collection, options = {}) - # early exit if there is nothing to render - return nil unless collection.total_pages > 1 + # check the always_render param + unless collection.total_pages > 1 + if options[:always_render] + options.delete(:always_render) + else + return nil + end + end options = WillPaginate::ViewHelpers.pagination_options.merge(options) diff --git a/spec/view_helpers/base_spec.rb b/spec/view_helpers/base_spec.rb index 77542bd34..8e0c5efd0 100644 --- a/spec/view_helpers/base_spec.rb +++ b/spec/view_helpers/base_spec.rb @@ -19,11 +19,17 @@ include WillPaginate::ViewHelpers describe "will_paginate" do - it "should render" do - collection = WillPaginate::Collection.new(1, 2, 4) - renderer = mock 'Renderer' + + def builder_renderer collection + renderer = mock 'Renderer' renderer.expects(:prepare).with(collection, instance_of(Hash), self) renderer.expects(:to_html).returns('') + renderer + end + + it "should render" do + collection = WillPaginate::Collection.new(1, 2, 4) + renderer = builder_renderer collection will_paginate(collection, :renderer => renderer).should == '' end @@ -32,6 +38,13 @@ collection = mock 'Collection', :total_pages => 1 will_paginate(collection).should be_nil end + + it "should render for single-page collections with param always_render" do + collection = WillPaginate::Collection.new(1, 1, 1) + renderer = builder_renderer collection + + will_paginate(collection, :renderer => renderer, :always_render => true).should == '' + end end describe "pagination_options" do