class RSpec::Matchers::BuiltIn::ChangeDetails

def initialize(matcher_name, receiver=nil, message=nil, &block)

def initialize(matcher_name, receiver=nil, message=nil, &block)
  if receiver && !message
    raise(
      ArgumentError,
      "`change` requires either an object and message " \
      "(`change(obj, :msg)`) or a block (`change { }`). " \
      "You passed an object but no message."
    )
  end
  @matcher_name = matcher_name
  @receiver = receiver
  @message = message
  @value_proc = block
  # TODO: temporary measure to mute warning of access to an initialized
  # instance variable when a deprecated implicit block expectation
  # syntax is used. This may be removed once `fail` is used, and the
  # matcher never issues this warning.
  @actual_after = UNDEFINED
end