Class: Kaminari::Helpers::Paginator
- Includes:
- ActionView::Context
- Defined in:
- lib/kaminari/helpers/paginator.rb
Overview
The main container tag
Defined Under Namespace
Classes: PageProxy
Instance Method Summary collapse
-
#each_relevant_page ⇒ Object
(also: #each_page)
enumerate each page providing PageProxy object as the block parameter Because of performance reason, this doesn’t actually enumerate all pages but pages that are seemingly relevant to the paginator.
-
#initialize(template, options) ⇒ Paginator
constructor
:nodoc:.
- #page_tag(page) ⇒ Object
-
#render(&block) ⇒ Object
render given block as a view template.
-
#to_s ⇒ Object
:nodoc:.
Methods inherited from Tag
Constructor Details
#initialize(template, options) ⇒ Paginator
:nodoc:
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/kaminari/helpers/paginator.rb', line 14 def initialize(template, ) #:nodoc: ActiveSupport::Deprecation.warn 'num_pages is deprecated and will be removed in Kaminari 1.0. Please use total_pages instead.' if .has_key? :num_pages [:num_pages] ||= [:total_pages] @window_options = {}.tap do |h| h[:window] = .delete(:window) || .delete(:inner_window) || Kaminari.config.window outer_window = .delete(:outer_window) || Kaminari.config.outer_window h[:left] = .delete(:left) || Kaminari.config.left h[:left] = outer_window if h[:left] == 0 h[:right] = .delete(:right) || Kaminari.config.right h[:right] = outer_window if h[:right] == 0 end @template, @options = template, @theme = @options[:theme] @views_prefix = @options[:views_prefix] @window_options.merge! @options @window_options[:current_page] = @options[:current_page] = PageProxy.new(@window_options, @options[:current_page], nil) @last = nil # initialize the output_buffer for Context @output_buffer = ActionView::OutputBuffer.new end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
delegates view helper methods to @template
110 111 112 |
# File 'lib/kaminari/helpers/paginator.rb', line 110 def method_missing(name, *args, &block) @template.respond_to?(name) ? @template.send(name, *args, &block) : super end |
Instance Method Details
#each_relevant_page ⇒ Object Also known as: each_page
enumerate each page providing PageProxy object as the block parameter Because of performance reason, this doesn’t actually enumerate all pages but pages that are seemingly relevant to the paginator. “Relevant” pages are:
-
pages inside the left outer window plus one for showing the gap tag
-
pages inside the inner window plus one on the left plus one on the right for showing the gap tags
-
pages inside the right outer window plus one for showing the gap tag
49 50 51 52 53 54 55 |
# File 'lib/kaminari/helpers/paginator.rb', line 49 def each_relevant_page return to_enum(:each_relevant_page) unless block_given? relevant_pages(@window_options).each do |page| yield PageProxy.new(@window_options, page, @last) end end |
#page_tag(page) ⇒ Object
67 68 69 |
# File 'lib/kaminari/helpers/paginator.rb', line 67 def page_tag(page) @last = Page.new @template, @options.merge(:page => page) end |
#render(&block) ⇒ Object
render given block as a view template
38 39 40 41 |
# File 'lib/kaminari/helpers/paginator.rb', line 38 def render(&block) instance_eval(&block) if @options[:total_pages] > 1 @output_buffer end |
#to_s ⇒ Object
:nodoc:
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/kaminari/helpers/paginator.rb', line 79 def to_s #:nodoc: subscriber = ActionView::LogSubscriber.log_subscribers.detect {|ls| ls.is_a? ActionView::LogSubscriber} # There is a logging subscriber # and we don't want it to log render_partial # It is threadsafe, but might not repress logging # consistently in a high-load environment if subscriber unless defined? subscriber.render_partial_with_logging class << subscriber alias_method :render_partial_with_logging, :render_partial attr_accessor :render_without_logging # ugly hack to make a renderer where # we can turn logging on or off def render_partial(event) render_partial_with_logging(event) unless render_without_logging end end end subscriber.render_without_logging = true ret = super @window_options.merge :paginator => self subscriber.render_without_logging = false ret else super @window_options.merge :paginator => self end end |