From 6080b7a32cc098595b3da6a254dc837270b9052f Mon Sep 17 00:00:00 2001 From: Howard Wilson Date: Fri, 9 Oct 2015 18:09:58 +0200 Subject: [PATCH] Add support for specifying a custom Paginator --- .../kaminari/actionview/action_view_extension.rb | 4 +++- .../spec/helpers/action_view_extension_spec.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/kaminari-actionview/lib/kaminari/actionview/action_view_extension.rb b/kaminari-actionview/lib/kaminari/actionview/action_view_extension.rb index 607478a..c69d828 100644 --- a/kaminari-actionview/lib/kaminari/actionview/action_view_extension.rb +++ b/kaminari-actionview/lib/kaminari/actionview/action_view_extension.rb @@ -18,11 +18,13 @@ module Kaminari # * :params - url_for parameters for the links (:controller, :action, etc.) # * :param_name - parameter name for page number in the links (:page by default) # * :remote - Ajax? (false by default) + # * :paginator_class - Specify a custom Paginator (Kaminari::Helpers::Paginator by default) # * :ANY_OTHER_VALUES - Any other hash key & values would be directly passed into each tag as :locals value. def paginate(scope, options = {}) options[:total_pages] ||= scope.total_pages + options[:paginator_class] ||= Kaminari::Helpers::Paginator - paginator = Kaminari::Helpers::Paginator.new(self, options.reverse_merge(:current_page => scope.current_page, :per_page => scope.limit_value, :remote => false)) + paginator = options[:paginator_class].new(self, options.reverse_merge(:current_page => scope.current_page, :per_page => scope.limit_value, :remote => false)) paginator.to_s end diff --git a/kaminari-core/spec/helpers/action_view_extension_spec.rb b/kaminari-core/spec/helpers/action_view_extension_spec.rb index 6d4c48a..47380db 100644 --- a/kaminari-core/spec/helpers/action_view_extension_spec.rb +++ b/kaminari-core/spec/helpers/action_view_extension_spec.rb @@ -33,6 +33,19 @@ describe 'Kaminari::ActionViewExtension', :if => defined?(::Rails::Railtie) && d it { should eq(" 1\n") } end + context 'accepts :paginator_class option' do + let(:custom_paginator) do + Class.new(Kaminari::Helpers::Paginator) do + def to_s + "CUSTOM PAGINATION" + end + end + end + + subject { helper.paginate @users, :paginator_class => custom_paginator, :params => {:controller => 'users', :action => 'index'} } + it { should eq("CUSTOM PAGINATION") } + end + context "total_pages: 3" do subject { helper.paginate @users, :total_pages => 3, :params => {:controller => 'users', :action => 'index'} } it { should match(/Last/) }