Sha256: 2b9e00618fe7c049dd1f4b01b2d9a84b7c0710f60c98cf4b465e3442f5db07f6

Contents?: true

Size: 1.73 KB

Versions: 17

Compression:

Stored size: 1.73 KB

Contents

module Paperclip
  module Shoulda
    module Matchers
      def validate_attachment_content_type name
        ValidateAttachmentContentTypeMatcher.new(name)
      end

      class ValidateAttachmentContentTypeMatcher
        def initialize attachment_name
          @attachment_name = attachment_name
        end

        def allowing *types
          @allowed_types = types.flatten
          self
        end

        def rejecting *types
          @rejected_types = types.flatten
          self
        end

        def matches? subject
          @subject = subject
          @allowed_types && @rejected_types &&
          allowed_types_allowed? && rejected_types_rejected?
        end

        def failure_message
          "Content types #{@allowed_types.join(", ")} should be accepted" +
          " and #{@rejected_types.join(", ")} rejected by #{@attachment_name}"
        end

        def negative_failure_message
          "Content types #{@allowed_types.join(", ")} should be rejected" + 
          " and #{@rejected_types.join(", ")} accepted by #{@attachment_name}"
        end

        def description
          "validate the content types allowed on attachment #{@attachment_name}"
        end

        protected

        def allow_types?(types)
          types.all? do |type|
            file = StringIO.new(".")
            file.content_type = type
            (subject = @subject.new).attachment_for(@attachment_name).assign(file)
            subject.valid? && subject.errors.on(:"#{@attachment_name}_content_type").blank?
          end
        end

        def allowed_types_allowed?
          allow_types?(@allowed_types)
        end

        def rejected_types_rejected?
          not allow_types?(@rejected_types)
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 7 rubygems

Version Path
paperclip-cloudfiles-2.3.1.1.6 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip-cloudfiles-2.3.1.1.5 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
mwd-paperclip-2.3.1.1b lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
mwd-paperclip-2.3.1.1.mwd.b lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
mwd-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
alg-paperclip-2.3.1.2 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bteitelb-paperclip-2.3.1.13 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bteitelb-paperclip-2.3.1.12 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
alg-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip-cloudfiles-2.3.1.1.4 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip-cloudfiles-2.3.1.1.3 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip-cloudfiles-2.3.1.1.2 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip-cloudfiles-2.3.1.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
tristandunn-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
monde-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
novelys-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip-cloudfiles-2.3.1.1.0 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb