Sha256: 45567a21a5e757f71f4552fe5e9dda8b8ebfdc021be67ff2bb43b1da9e5f0c84

Contents?: true

Size: 1.72 KB

Versions: 79

Compression:

Stored size: 1.72 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
            attachment = @subject.new.attachment_for(@attachment_name)
            attachment.assign(file)
            attachment.errors[:content_type].nil?
          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

79 entries across 79 versions & 28 rubygems

Version Path
bteitelb-paperclip-2.3.1.7 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
spree-0.9.4 vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
spree-0.9.3 vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
jdrowell-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bamnet-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip_with_versions-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bteitelb-paperclip-2.3.1.6 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bteitelb-paperclip-2.3.1.5 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
spree-0.9.2 vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
spree-0.9.1 vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
dekart-paperclip-2.3.1.2 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
dekart-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
paperclip-2.3.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bteitelb-paperclip-2.3.1.4 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bteitelb-paperclip-2.3.1.3 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bteitelb-paperclip-2.3.1.2 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
bteitelb-paperclip-2.3.1.1 lib/paperclip/matchers/validate_attachment_content_type_matcher.rb
spree-0.9.0 vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb