1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Add ActionController::Renderers.remove.

This commit is contained in:
Zuhao Wan 2014-05-18 16:54:20 +08:00
parent dbbcc8388a
commit ac36b45672
2 changed files with 35 additions and 0 deletions

View file

@ -6,6 +6,11 @@ module ActionController
Renderers.add(key, &block)
end
# See <tt>Renderers.remove</tt>
def self.remove_renderer(key)
Renderers.remove(key)
end
class MissingRenderer < LoadError
def initialize(format)
super "No renderer defined for format: #{format}"
@ -83,6 +88,17 @@ module ActionController
RENDERERS << key.to_sym
end
# This method is the opposite of add method.
#
# Usage:
#
# ActionController::Renderers.remove(:csv)
def self.remove(key)
RENDERERS.delete(key.to_sym)
method = "_render_option_#{key}"
remove_method(method) if method_defined?(method)
end
module All
extend ActiveSupport::Concern
include Renderers

View file

@ -643,6 +643,8 @@ class RespondWithControllerTest < ActionController::TestCase
get :index, format: 'csv'
assert_equal Mime::CSV, @response.content_type
assert_equal "c,s,v", @response.body
ensure
ActionController::Renderers.remove :csv
end
def test_raises_missing_renderer_if_an_api_behavior_with_no_renderer
@ -652,6 +654,23 @@ class RespondWithControllerTest < ActionController::TestCase
end
end
def test_removing_renderers
ActionController::Renderers.add :csv do |obj, options|
send_data obj.to_csv, type: Mime::CSV
end
@controller = CsvRespondWithController.new
@request.accept = "text/csv"
get :index, format: 'csv'
assert_equal Mime::CSV, @response.content_type
ActionController::Renderers.remove :csv
assert_raise ActionController::MissingRenderer do
get :index, format: 'csv'
end
ensure
ActionController::Renderers.remove :csv
end
def test_error_is_raised_if_no_respond_to_is_declared_and_respond_with_is_called
@controller = EmptyRespondWithController.new
@request.accept = "*/*"