123456789_123456789_123456789_123456789_123456789_

Class: RSpec::Core::Example::Procsy

Relationships & Source Files
Inherits: Object
Defined in: rspec-core/lib/rspec/core/example.rb

Overview

Note:

This class also exposes the instance methods of ::RSpec::Core::Example, proxying them through to the wrapped ::RSpec::Core::Example instance.

Wraps both a Proc and an ::RSpec::Core::Example for use in around hooks. In around hooks we need to yield this special kind of object (rather than the raw ::RSpec::Core::Example) because when there are multiple around hooks we have to wrap them recursively.

Examples:

RSpec.configure do |c|
  c.around do |ex| # Procsy which wraps the example
    if ex.[:key] == :some_value && some_global_condition
      raise "some message"
    end
    ex.run         # run delegates to ex.call.
  end
end

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(example, &block) ⇒ Procsy

[ GitHub ]

  
# File 'rspec-core/lib/rspec/core/example.rb', line 362

def initialize(example, &block)
  @example  = example
  @proc     = block
  @executed = false
end

Instance Attribute Details

#example (readonly)

The ::RSpec::Core::Example instance.

[ GitHub ]

  
# File 'rspec-core/lib/rspec/core/example.rb', line 333

attr_reader :example

#executed?Boolean (readonly)

Indicates whether or not the around hook has executed the example.

[ GitHub ]

  
# File 'rspec-core/lib/rspec/core/example.rb', line 374

def executed?
  @executed
end

Instance Method Details

#call(*args, &block) Also known as: #run

Calls the proc and notes that the example has been executed.

[ GitHub ]

  
# File 'rspec-core/lib/rspec/core/example.rb', line 350

def call(*args, &block)
  @executed = true
  @proc.call(*args, &block)
end

#inspect

This method is for internal use only.
[ GitHub ]

  
# File 'rspec-core/lib/rspec/core/example.rb', line 379

def inspect
  @example.inspect.gsub('Example', 'Example::Procsy')
end

#run(*args, &block)

Alias for #call.

[ GitHub ]

  
# File 'rspec-core/lib/rspec/core/example.rb', line 354

alias run call

#to_proc

Provides a wrapped proc that will update our #executed? state when executed.

[ GitHub ]

  
# File 'rspec-core/lib/rspec/core/example.rb', line 358

def to_proc
  method(:call).to_proc
end

#wrap(&block)

This method is for internal use only.
[ GitHub ]

  
# File 'rspec-core/lib/rspec/core/example.rb', line 369

def wrap(&block)
  self.class.new(example, &block)
end