Commit dd99e70d by Geoffrey Hichborn Committed by Mike Burns

Improved the output of the content_type validator so the actual failure

is displayed
parent c54708f2
...@@ -39,18 +39,10 @@ module Paperclip ...@@ -39,18 +39,10 @@ module Paperclip
end end
def failure_message def failure_message
"".tap do |str| "#{expected_attachment}\n".tap do |message|
str << "Content types #{@allowed_types.join(", ")} should be accepted" if @allowed_types.present? message << accepted_types_and_failures
str << "\n" if @allowed_types.present? && @rejected_types.present? message << "\n\n" if @allowed_types.present? && @rejected_types.present?
str << "Content types #{@rejected_types.join(", ")} should be rejected by #{@attachment_name}" if @rejected_types.present? message << rejected_types_and_failures
end
end
def negative_failure_message
"".tap do |str|
str << "Content types #{@allowed_types.join(", ")} should be rejected" if @allowed_types.present?
str << "\n" if @allowed_types.present? && @rejected_types.present?
str << "Content types #{@rejected_types.join(", ")} should be accepted by #{@attachment_name}" if @rejected_types.present?
end end
end end
...@@ -59,21 +51,48 @@ module Paperclip ...@@ -59,21 +51,48 @@ module Paperclip
end end
protected protected
def accepted_types_and_failures
if @allowed_types.present?
"Accept content types: #{@allowed_types.join(", ")}\n".tap do |message|
if @missing_allowed_types.any?
message << " #{@missing_allowed_types.join(", ")} were rejected."
else
message << " All were accepted successfully."
end
end
end
end
def rejected_types_and_failures
if @rejected_types.present?
"Reject content types: #{@rejected_types.join(", ")}\n".tap do |message|
if @missing_rejected_types.any?
message << " #{@missing_rejected_types.join(", ")} were accepted."
else
message << " All were rejected successfully."
end
end
end
end
def expected_attachment
"Expected #{@attachment_name}:\n"
end
def type_allowed?(type) def type_allowed?(type)
file = Paperclip.io_adapters.for(StringIO.new(".")) @subject.send("#{@attachment_name}_content_type=", type)
file.content_type = type
@subject.attachment_for(@attachment_name).assign(file)
@subject.valid? @subject.valid?
@subject.errors[:"#{@attachment_name}_content_type"].blank? @subject.errors[:"#{@attachment_name}_content_type"].blank?
end end
def allowed_types_allowed? def allowed_types_allowed?
@allowed_types.all? { |type| type_allowed?(type) } @missing_allowed_types ||= @allowed_types.reject { |type| type_allowed?(type) }
@missing_allowed_types.none?
end end
def rejected_types_rejected? def rejected_types_rejected?
!@rejected_types.any? { |type| type_allowed?(type) } @missing_rejected_types ||= @rejected_types.select { |type| type_allowed?(type) }
@missing_rejected_types.none?
end end
end end
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment