class BeforeAndAfter
Modeled after RSpec::Matchers::BuiltIn::Change
Public Class Methods
new(before_proc, after_proc)
click to toggle source
# File lib/rspec/matchers/before_and_after.rb, line 21 def initialize(before_proc, after_proc) @before_proc = before_proc @after_proc = after_proc end
Public Instance Methods
matches?(event_proc)
click to toggle source
# File lib/rspec/matchers/before_and_after.rb, line 26 def matches?(event_proc) @event_proc = event_proc perform_change(event_proc) end
supports_block_expectations?()
click to toggle source
# File lib/rspec/matchers/before_and_after.rb, line 31 def supports_block_expectations? true end
Private Instance Methods
indent_multiline_message(message)
click to toggle source
# File lib/rspec/matchers/before_and_after.rb, line 59 def indent_multiline_message(message) message.lines.map do |line| line =~ /\S/ ? ' ' + line : line end.join end
perform_change(event_proc)
click to toggle source
# File lib/rspec/matchers/before_and_after.rb, line 37 def perform_change(event_proc) reraise_with_prefix 'before making the change:' do @before_proc.call end return false unless Proc === event_proc event_proc.call reraise_with_prefix 'after making the change:' do @after_proc.call end true end
reraise_with_prefix(prefix) { || ... }
click to toggle source
# File lib/rspec/matchers/before_and_after.rb, line 51 def reraise_with_prefix(prefix) begin yield rescue RSpec::Expectations::ExpectationNotMetError raise $!, "#{prefix}\n#{indent_multiline_message($!.message)}", $!.backtrace end end