class RSpec::Matchers::BuiltIn::Change

@api private Provides the implementation for `change`. Not intended to be instantiated directly.

Public Class Methods

new(receiver=nil, message=nil, &block) click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 85
def initialize(receiver=nil, message=nil, &block)
  @receiver = receiver
  @message = message
  @block = block
end

Public Instance Methods

by(expected_delta) click to toggle source

@api public Specifies the delta of the expected change.

# File lib/rspec/matchers/built_in/change.rb, line 10
def by(expected_delta)
  ChangeRelatively.new(change_details, expected_delta, :by) do |actual_delta|
    values_match?(expected_delta, actual_delta)
  end
end
by_at_least(minimum) click to toggle source

@api public Specifies a minimum delta of the expected change.

# File lib/rspec/matchers/built_in/change.rb, line 18
def by_at_least(minimum)
  ChangeRelatively.new(change_details, minimum, :by_at_least) do |actual_delta|
    actual_delta >= minimum
  end
end
by_at_most(maximum) click to toggle source

@api public Specifies a maximum delta of the expected change.

# File lib/rspec/matchers/built_in/change.rb, line 26
def by_at_most(maximum)
  ChangeRelatively.new(change_details, maximum, :by_at_most) do |actual_delta|
    actual_delta <= maximum
  end
end
description() click to toggle source

@api private @return [String]

# File lib/rspec/matchers/built_in/change.rb, line 74
def description
  "change #{change_details.value_representation}"
end
does_not_match?(event_proc) click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 53
def does_not_match?(event_proc)
  raise_block_syntax_error if block_given?
  !matches?(event_proc) && Proc === event_proc
end
failure_message() click to toggle source

@api private @return [String]

# File lib/rspec/matchers/built_in/change.rb, line 60
def failure_message
  "expected #{change_details.value_representation} to have changed, " \
  "but #{positive_failure_reason}"
end
failure_message_when_negated() click to toggle source

@api private @return [String]

# File lib/rspec/matchers/built_in/change.rb, line 67
def failure_message_when_negated
  "expected #{change_details.value_representation} not to have changed, " \
  "but #{negative_failure_reason}"
end
from(value) click to toggle source

@api public Specifies the original value.

# File lib/rspec/matchers/built_in/change.rb, line 40
def from(value)
  ChangeFromValue.new(change_details, value)
end
matches?(event_proc) click to toggle source

@private

# File lib/rspec/matchers/built_in/change.rb, line 45
def matches?(event_proc)
  @event_proc = event_proc
  return false unless Proc === event_proc
  raise_block_syntax_error if block_given?
  change_details.perform_change(event_proc)
  change_details.changed?
end
supports_block_expectations?() click to toggle source

@private

# File lib/rspec/matchers/built_in/change.rb, line 79
def supports_block_expectations?
  true
end
to(value) click to toggle source

@api public Specifies the new value you expect.

# File lib/rspec/matchers/built_in/change.rb, line 34
def to(value)
  ChangeToValue.new(change_details, value)
end

Private Instance Methods

change_details() click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 91
def change_details
  @change_details ||= ChangeDetails.new(matcher_name, @receiver, @message, &@block)
end
negative_failure_reason() click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 105
def negative_failure_reason
  return "was not given a block" unless Proc === @event_proc
  "did change from #{description_of change_details.actual_before} " \
  "to #{description_of change_details.actual_after}"
end
positive_failure_reason() click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 100
def positive_failure_reason
  return "was not given a block" unless Proc === @event_proc
  "is still #{description_of change_details.actual_before}"
end
raise_block_syntax_error() click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 95
def raise_block_syntax_error
  raise SyntaxError, "Block not received by the `change` matcher. " \
  "Perhaps you want to use `{ ... }` instead of do/end?"
end