Module: ActiveStorageValidations::Matchers

Defined in:
lib/active_storage_validations/matchers.rb,
lib/active_storage_validations/matchers/concerns/rspecable.rb,
lib/active_storage_validations/matchers/concerns/attachable.rb,
lib/active_storage_validations/matchers/concerns/contextable.rb,
lib/active_storage_validations/matchers/concerns/messageable.rb,
lib/active_storage_validations/matchers/concerns/validatable.rb,
lib/active_storage_validations/matchers/size_validator_matcher.rb,
lib/active_storage_validations/matchers/concerns/allow_blankable.rb,
lib/active_storage_validations/matchers/attached_validator_matcher.rb,
lib/active_storage_validations/matchers/base_size_validator_matcher.rb,
lib/active_storage_validations/matchers/concerns/active_storageable.rb,
lib/active_storage_validations/matchers/dimension_validator_matcher.rb,
lib/active_storage_validations/matchers/total_size_validator_matcher.rb,
lib/active_storage_validations/matchers/aspect_ratio_validator_matcher.rb,
lib/active_storage_validations/matchers/content_type_validator_matcher.rb,
lib/active_storage_validations/matchers/processable_image_validator_matcher.rb

Defined Under Namespace

Modules: ActiveStorageable, AllowBlankable, Attachable, Contextable, Messageable, Rspecable, Validatable Classes: AspectRatioValidatorMatcher, AttachedValidatorMatcher, BaseSizeValidatorMatcher, ContentTypeValidatorMatcher, DimensionValidatorMatcher, ProcessableImageValidatorMatcher, SizeValidatorMatcher, TotalSizeValidatorMatcher

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.mock_metadata(attachment, width, height) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/active_storage_validations/matchers.rb', line 27

def self.(attachment, width, height)
  if Rails.gem_version >= Gem::Version.new('6.0.0')
    # Mock the Metadata class for rails 6
    mock = OpenStruct.new(metadata: { width: width, height: height })
    stub_method(ActiveStorageValidations::Metadata, :new, mock) do
      yield
    end
  else
    # Stub the metadata analysis for rails 5
    stub_method(attachment, :analyze, true) do
      stub_method(attachment, :analyzed?, true) do
        stub_method(attachment, :metadata, { width: width, height: height }) do
          yield
        end
      end
    end
  end
end

.stub_method(object, method, result) ⇒ Object

Helper to stub a method with either RSpec or Minitest (whatever is available)



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/active_storage_validations/matchers.rb', line 14

def self.stub_method(object, method, result)
  if defined?(Minitest::Mock)
    object.stub(method, result) do
      yield
    end
  elsif defined?(RSpec::Mocks)
    RSpec::Mocks.allow_message(object, method) { result }
    yield
  else
    raise 'Need either Minitest::Mock or RSpec::Mocks to run this validator matcher'
  end
end

Instance Method Details

#validate_aspect_ratio_of(attribute_name) ⇒ Object



13
14
15
# File 'lib/active_storage_validations/matchers/aspect_ratio_validator_matcher.rb', line 13

def validate_aspect_ratio_of(attribute_name)
  AspectRatioValidatorMatcher.new(attribute_name)
end

#validate_attached_of(attribute_name) ⇒ Object



12
13
14
# File 'lib/active_storage_validations/matchers/attached_validator_matcher.rb', line 12

def validate_attached_of(attribute_name)
  AttachedValidatorMatcher.new(attribute_name)
end

#validate_content_type_of(attribute_name) ⇒ Object



16
17
18
# File 'lib/active_storage_validations/matchers/content_type_validator_matcher.rb', line 16

def validate_content_type_of(attribute_name)
  ContentTypeValidatorMatcher.new(attribute_name)
end

#validate_dimensions_of(attribute_name) ⇒ Object



13
14
15
# File 'lib/active_storage_validations/matchers/dimension_validator_matcher.rb', line 13

def validate_dimensions_of(attribute_name)
  DimensionValidatorMatcher.new(attribute_name)
end

#validate_processable_image_of(name) ⇒ Object



13
14
15
# File 'lib/active_storage_validations/matchers/processable_image_validator_matcher.rb', line 13

def validate_processable_image_of(name)
  ProcessableImageValidatorMatcher.new(name)
end

#validate_size_of(attribute_name) ⇒ Object



7
8
9
# File 'lib/active_storage_validations/matchers/size_validator_matcher.rb', line 7

def validate_size_of(attribute_name)
  SizeValidatorMatcher.new(attribute_name)
end

#validate_total_size_of(attribute_name) ⇒ Object



7
8
9
# File 'lib/active_storage_validations/matchers/total_size_validator_matcher.rb', line 7

def validate_total_size_of(attribute_name)
  TotalSizeValidatorMatcher.new(attribute_name)
end