SusSourceSusRespondToWithParameters

class WithParameters

Represents a constraint on method parameters.

Definitions

def initialize(parameters)

Initialize a new WithParameters constraint.

Signature

parameter parameters Array(Symbol)

List of method parameters in the expected order, must include at least all required parameters but can also list optional parameters.

Implementation

def initialize(parameters)
	@parameters = parameters
end

def call(assertions, subject)

Evaluate this constraint against method parameters.

Signature

parameter assertions Assertions

The assertions instance to use.

parameter subject Array

The method parameters to check.

Implementation

def call(assertions, subject)
	parameters = @parameters.dup
	
	assertions.nested(self) do |assertions|
		subject.each do |type, name|
			expected_name = parameters.shift
			
			case type
			when :req
				assertions.assert(name == expected_name, "parameter #{expected_name} is required, but was #{name}")
			when :opt
				break if expected_name.nil?
				assertions.assert(name == expected_name, "parameter #{expected_name} is specified, but was #{name}")
			else
				break
			end
		end
	end
end