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 87 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 71 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 50 def does_not_match?(event_proc) raise_block_syntax_error if block_given? perform_change(event_proc) && !change_details.changed? end
failure_message()
click to toggle source
@api private @return [String]
# File lib/rspec/matchers/built_in/change.rb, line 57 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 64 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) raise_block_syntax_error if block_given? 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 76 def supports_block_expectations? true end
supports_value_expectations?()
click to toggle source
@private
# File lib/rspec/matchers/built_in/change.rb, line 81 def supports_value_expectations? false 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 93 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 119 def negative_failure_reason return "was not given a block" unless Proc === @event_proc "did change from #{@actual_before_description} " \ "to #{description_of change_details.actual_after}" end
perform_change(event_proc)
click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 97 def perform_change(event_proc) @event_proc = event_proc change_details.perform_change(event_proc) do |actual_before| # pre-compute values derived from the `before` value before the # mutation is applied, in case the specified mutation is mutation # of a single object (rather than a changing what object a method # returns). We need to cache these values before the `before` value # they are based on potentially gets mutated. @actual_before_description = description_of(actual_before) end end
positive_failure_reason()
click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 114 def positive_failure_reason return "was not given a block" unless Proc === @event_proc "is still #{@actual_before_description}" end
raise_block_syntax_error()
click to toggle source
# File lib/rspec/matchers/built_in/change.rb, line 109 def raise_block_syntax_error raise SyntaxError, "Block not received by the `change` matcher. " \ "Perhaps you want to use `{ ... }` instead of do/end?" end