lib/will_paginate/railtie.rb in will_paginate-3.0.0 vs lib/will_paginate/railtie.rb in will_paginate-3.0.1
- old
+ new
@@ -1,6 +1,7 @@
require 'will_paginate'
+require 'will_paginate/page_number'
require 'will_paginate/collection'
require 'will_paginate/i18n'
module WillPaginate
class Railtie < Rails::Railtie
@@ -16,16 +17,46 @@
ActiveSupport.on_load :action_view do
require 'will_paginate/view_helpers/action_view'
end
self.class.add_locale_path config
+
+ # early access to ViewHelpers.pagination_options
+ require 'will_paginate/view_helpers'
end
def self.setup_actioncontroller
- ActionDispatch::ShowExceptions.rescue_responses['WillPaginate::InvalidPage'] = :not_found
+ ActionDispatch::ShowExceptions.send :include, ShowExceptionsPatch
+ ActionController::Base.extend ControllerRescuePatch
end
def self.add_locale_path(config)
config.i18n.railties_load_path.unshift(*WillPaginate::I18n.load_path)
+ end
+
+ # Extending the exception handler middleware so it properly detects
+ # WillPaginate::InvalidPage regardless of it being a tag module.
+ module ShowExceptionsPatch
+ extend ActiveSupport::Concern
+ included { alias_method_chain :status_code, :paginate }
+ private
+ def status_code_with_paginate(exception)
+ if exception.is_a?(WillPaginate::InvalidPage) or
+ (exception.respond_to?(:original_exception) &&
+ exception.original_exception.is_a?(WillPaginate::InvalidPage))
+ Rack::Utils.status_code(:not_found)
+ else
+ status_code_without_paginate(exception)
+ end
+ end
+ end
+
+ module ControllerRescuePatch
+ def rescue_from(*args, &block)
+ if idx = args.index(WillPaginate::InvalidPage)
+ args[idx] = args[idx].name
+ end
+ super(*args, &block)
+ end
end
end
end