class ActiveStorageValidations::Matchers::ContentTypeValidatorMatcher
Public Class Methods
new(attribute_name)
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 12 def initialize(attribute_name) @attribute_name = attribute_name end
Public Instance Methods
allowing(*types)
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 20 def allowing(*types) @allowed_types = types.flatten self end
description()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 16 def description "validate the content types allowed on attachment #{@attribute_name}" end
failure_message()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 35 def failure_message <<~MESSAGE Expected #{@attribute_name} Accept content types: #{allowed_types.join(", ")} #{accepted_types_and_failures} Reject content types: #{rejected_types.join(", ")} #{rejected_types_and_failures} MESSAGE end
matches?(subject)
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 30 def matches?(subject) @subject = subject.is_a?(Class) ? subject.new : subject responds_to_methods && allowed_types_allowed? && rejected_types_rejected? end
rejecting(*types)
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 25 def rejecting(*types) @rejected_types = types.flatten self end
Protected Instance Methods
accepted_types_and_failures()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 73 def accepted_types_and_failures if @missing_allowed_types.present? "#{@missing_allowed_types.join(", ")} were rejected." else "All were accepted successfully." end end
allowed_types()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 55 def allowed_types @allowed_types || [] end
allowed_types_allowed?()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 63 def allowed_types_allowed? @missing_allowed_types ||= allowed_types.reject { |type| type_allowed?(type) } @missing_allowed_types.none? end
attachment_for(type)
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 95 def attachment_for(type) suffix = type.to_s.split('/').last { io: Tempfile.new('.'), filename: "test.#{suffix}", content_type: type } end
rejected_types()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 59 def rejected_types @rejected_types || (Marcel::TYPES.keys - allowed_types) end
rejected_types_and_failures()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 81 def rejected_types_and_failures if @missing_rejected_types.present? "#{@missing_rejected_types.join(", ")} were accepted." else "All were rejected successfully." end end
rejected_types_rejected?()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 68 def rejected_types_rejected? @missing_rejected_types ||= rejected_types.select { |type| type_allowed?(type) } @missing_rejected_types.none? end
responds_to_methods()
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 49 def responds_to_methods @subject.respond_to?(@attribute_name) && @subject.public_send(@attribute_name).respond_to?(:attach) && @subject.public_send(@attribute_name).respond_to?(:detach) end
type_allowed?(type)
click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 89 def type_allowed?(type) @subject.public_send(@attribute_name).attach(attachment_for(type)) @subject.validate @subject.errors.details[@attribute_name].all? { |error| error[:error] != :content_type_invalid } end