module ActiveStorageValidations::Matchers

Public Class Methods

mock_metadata(attachment, width, height) { || ... } click to toggle source
# File lib/active_storage_validations/matchers.rb, line 24
def self.mock_metadata(attachment, width, height)
  if Rails::VERSION::MAJOR >= 6
    # 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) { || ... } click to toggle source

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

# File lib/active_storage_validations/matchers.rb, line 11
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

Public Instance Methods

validate_attached_of(name) click to toggle source
# File lib/active_storage_validations/matchers/attached_validator_matcher.rb, line 5
def validate_attached_of(name)
  AttachedValidatorMatcher.new(name)
end
validate_content_type_of(name) click to toggle source
# File lib/active_storage_validations/matchers/content_type_validator_matcher.rb, line 7
def validate_content_type_of(name)
  ContentTypeValidatorMatcher.new(name)
end
validate_dimensions_of(name) click to toggle source
# File lib/active_storage_validations/matchers/dimension_validator_matcher.rb, line 5
def validate_dimensions_of(name)
  DimensionValidatorMatcher.new(name)
end
validate_size_of(name) click to toggle source
# File lib/active_storage_validations/matchers/size_validator_matcher.rb, line 7
def validate_size_of(name)
  SizeValidatorMatcher.new(name)
end