Skip to content

Commit

Permalink
Add ActionController::Renderers.remove.
Browse files Browse the repository at this point in the history
  • Loading branch information
zuhao committed May 19, 2014
1 parent dbbcc83 commit ac36b45
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
16 changes: 16 additions & 0 deletions actionpack/lib/action_controller/metal/renderers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ def self.add_renderer(key, &block)
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}"
Expand Down Expand Up @@ -83,6 +88,17 @@ def self.add(key, &block)
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
Expand Down
19 changes: 19 additions & 0 deletions actionpack/test/controller/mime/respond_with_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,8 @@ def test_uses_renderer_if_an_api_behavior
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
Expand All @@ -652,6 +654,23 @@ def test_raises_missing_renderer_if_an_api_behavior_with_no_renderer
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 = "*/*"
Expand Down

0 comments on commit ac36b45

Please sign in to comment.