Permalink
Browse files

Improved the output of the content_type validator so the actual failure

is displayed
  • Loading branch information...
phene authored and mike-burns committed May 31, 2012
1 parent c54708f commit dd99e70d403088edb73dce81b0df0bd0660d2815
Showing with 36 additions and 17 deletions.
  1. +36 −17 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
@@ -39,18 +39,10 @@ def matches? subject
end
def failure_message
- "".tap do |str|
- str << "Content types #{@allowed_types.join(", ")} should be accepted" if @allowed_types.present?
- str << "\n" if @allowed_types.present? && @rejected_types.present?
- str << "Content types #{@rejected_types.join(", ")} should be rejected by #{@attachment_name}" if @rejected_types.present?
- 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?
+ "#{expected_attachment}\n".tap do |message|
+ message << accepted_types_and_failures
+ message << "\n\n" if @allowed_types.present? && @rejected_types.present?
+ message << rejected_types_and_failures
end
end
@@ -59,21 +51,48 @@ def description
end
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)
- file = Paperclip.io_adapters.for(StringIO.new("."))
- file.content_type = type
- @subject.attachment_for(@attachment_name).assign(file)
+ @subject.send("#{@attachment_name}_content_type=", type)
@subject.valid?
@subject.errors[:"#{@attachment_name}_content_type"].blank?
end
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
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

0 comments on commit dd99e70

Please sign in to comment.