提交 3b40a5d8 编写于 作者: C Carlos Antonio da Silva

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.
上级 bc26f442
......@@ -23,15 +23,17 @@ def #{sym}(*args, &block) # def html(*args, &block)
protected
def method_missing(symbol, &block)
mime_const = 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)
const_name = symbol.upcase
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)
......
......@@ -348,8 +348,10 @@ def respond_to(*mimes, &block)
# 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!
......
......@@ -66,15 +66,15 @@ def formats
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册