Sha256: 90aec54f8a8b4afc9a6e797cf32251a3212af1cdb115004f64200c8ff511a621

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

# The Pagination filter extracts segments matching /page/:page from the end of
# the recognized url and exposes the page parameter as params[:page]. When a
# url is generated the filter adds the segments to the url accordingly if the
# page parameter is passed to the url helper.
#
#   incoming url: /products/page/1
#   filtered url: /products
#   params:       params[:page] = 1
#
# You can install the filter like this:
#
#   # in config/routes.rb
#   Rails.application.routes.draw do
#     filter :pagination
#   end
#
# To make your named_route helpers or url_for add the pagination segments you
# can use:
#
#   products_path(:page => 1)
#   url_for(:products, :page => 1)

module RoutingFilter
  class Pagination < Filter
    PAGINATION_SEGMENT = %r(/page/([\d]+)/?$)

    def around_recognize(path, env, &block)
      page = extract_segment!(PAGINATION_SEGMENT, path)
      yield.tap do |params|
        params[:page] = page.to_i if page
      end
    end

    def around_generate(params, &block)
      page = params.delete(:page)
      yield.tap do |result|
        append_segment!(result, "page/#{page}") if append_page?(page)
      end
    end

    protected

      def append_page?(page)
        page && page.to_i != 1
      end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
routing-filter-0.3.1 lib/routing_filter/filters/pagination.rb
routing-filter-0.3.0 lib/routing_filter/filters/pagination.rb
routing-filter-0.3.0.beta lib/routing_filter/filters/pagination.rb