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

Improve a couple exception messages related to variants and mime types

Avoid one-liner conditionals when they are too big. Avoid concatenating
strings to build error messages. Improve messages a bit.
This commit is contained in:
Carlos Antonio da Silva 2013-12-03 22:23:11 -02:00
parent bc26f442d2
commit 3b40a5d83d
3 changed files with 18 additions and 14 deletions

View file

@ -23,15 +23,17 @@ module AbstractController
protected
def method_missing(symbol, &block)
mime_const = symbol.upcase
const_name = symbol.upcase
raise NoMethodError, "To respond to a custom format, register it as a MIME type first:" +
"http://guides.rubyonrails.org/action_controller_overview.html#restful-downloads." +
"If you meant to respond to a variant like :tablet or :phone, not a custom format," +
"be sure to nest your variant response within a format response: format.html" +
"{ |html| html.tablet { ..." unless Mime.const_defined?(mime_const)
unless Mime.const_defined?(const_name)
raise NoMethodError, "To respond to a custom format, register it as a MIME type first: " \
"http://guides.rubyonrails.org/action_controller_overview.html#restful-downloads. " \
"If you meant to respond to a variant like :tablet or :phone, not a custom format, " \
"be sure to nest your variant response within a format response: " \
"format.html { |html| html.tablet { ... } }"
end
mime_constant = Mime.const_get(mime_const)
mime_constant = Mime.const_get(const_name)
if Mime::SET.include?(mime_constant)
AbstractController::Collector.generate_method_for_mime(mime_constant)

View file

@ -348,8 +348,10 @@ module ActionController #:nodoc:
# 2. <tt>:action</tt> - overwrites the default render action used after an
# unsuccessful html +post+ request.
def respond_with(*resources, &block)
raise "In order to use respond_with, first you need to declare the formats your " \
"controller responds to in the class level" if self.class.mimes_for_respond_to.empty?
if self.class.mimes_for_respond_to.empty?
raise "In order to use respond_with, first you need to declare the " \
"formats your controller responds to in the class level."
end
if collector = retrieve_collector_from_mimes(&block)
options = resources.size == 1 ? {} : resources.extract_options!

View file

@ -66,15 +66,15 @@ module ActionDispatch
end
end
# Sets the \variant for template
# Sets the \variant for template.
def variant=(variant)
if variant.is_a? Symbol
@variant = variant
else
raise ArgumentError, "request.variant must be set to a Symbol, not a #{variant.class}. For security reasons," +
"never directly set the variant to a user-provided value, like params[:variant].to_sym." +
"Check user-provided value against a whitelist first, then set the variant:"+
"request.variant = :tablet if params[:some_param] == 'tablet'"
raise ArgumentError, "request.variant must be set to a Symbol, not a #{variant.class}. " \
"For security reasons, never directly set the variant to a user-provided value, " \
"like params[:variant].to_sym. Check user-provided value against a whitelist first, " \
"then set the variant: request.variant = :tablet if params[:variant] == 'tablet'"
end
end