module RSpec

Namespace for all core RSpec code.

This is borrowed (slightly modified) from Scott Taylor’s project_path project:

http://github.com/smtlaissezfaire/project_path

Constants

MODULES_TO_AUTOLOAD

@private

SharedContext

@private

Attributes

configuration[W]

Setters for shared global objects @api private

world[W]

Setters for shared global objects @api private

Public Class Methods

clear_examples() click to toggle source

Used to ensure examples get reloaded between multiple runs in the same process and ensures user configuration is persisted.

Users must invoke this if they want to clear all examples but preserve current configuration when they use the runner multiple times within the same process.

# File lib/rspec/core.rb, line 70
def self.clear_examples
  world.reset
  configuration.reset_reporter
  configuration.start_time = ::RSpec::Core::Time.now
  configuration.reset_filters
end
configuration() click to toggle source

Returns the global [Configuration](RSpec/Core/Configuration) object. While you can use this method to access the configuration, the more common convention is to use [RSpec.configure](RSpec#configure-class_method).

@example

RSpec.configuration.drb_port = 1234

@see RSpec.configure @see Core::Configuration

# File lib/rspec/core.rb, line 85
def self.configuration
  @configuration ||= RSpec::Core::Configuration.new
end
configure() { |configuration| ... } click to toggle source

Yields the global configuration to a block. @yield [Configuration] global configuration

@example

RSpec.configure do |config|
  config.add_formatter 'documentation'
end

@see Core::Configuration

# File lib/rspec/core.rb, line 97
def self.configure
  yield configuration if block_given?
end
const_missing(name) click to toggle source

@private

Calls superclass method
# File lib/rspec/core.rb, line 194
def self.const_missing(name)
  # Load rspec-expectations when RSpec::Matchers is referenced. This allows
  # people to define custom matchers (using `RSpec::Matchers.define`) before
  # rspec-core has loaded rspec-expectations (since it delays the loading of
  # it to allow users to configure a different assertion/expectation
  # framework). `autoload` can't be used since it works with ruby's built-in
  # require (e.g. for files that are available relative to a load path dir),
  # but not with rubygems' extended require.
  #
  # As of rspec 2.14.1, we no longer require `rspec/mocks` and
  # `rspec/expectations` when `rspec` is required, so we want
  # to make them available as an autoload.
  require MODULES_TO_AUTOLOAD.fetch(name) { return super }
  ::RSpec.const_get(name)
end
current_example() click to toggle source

The example being executed.

The primary audience for this method is library authors who need access to the example currently being executed and also want to support all versions of RSpec 2 and 3.

@example

RSpec.configure do |c|
  # context.example is deprecated, but RSpec.current_example is not
  # available until RSpec 3.0.
  fetch_current_example = RSpec.respond_to?(:current_example) ?
    proc { RSpec.current_example } : proc { |context| context.example }

  c.before(:example) do
    example = fetch_current_example.call(self)

    # ...
  end
end
# File lib/rspec/core.rb, line 122
def self.current_example
  RSpec::Support.thread_local_data[:current_example]
end
current_example=(example) click to toggle source

Set the current example being executed. @api private

# File lib/rspec/core.rb, line 128
def self.current_example=(example)
  RSpec::Support.thread_local_data[:current_example] = example
end
current_scope() click to toggle source

Get the current RSpec execution scope

Returns (in order of lifecycle):

* `:suite` as an initial value, this is outside of the test lifecycle.
* `:before_suite_hook` during `before(:suite)` hooks.
* `:before_context_hook` during `before(:context)` hooks.
* `:before_example_hook` during `before(:example)` hooks and `around(:example)` before `example.run`.
* `:example` within the example run.
* `:after_example_hook` during `after(:example)` hooks and `around(:example)` after `example.run`.
* `:after_context_hook` during `after(:context)` hooks.
* `:after_suite_hook` during `after(:suite)` hooks.
* `:suite` as a final value, again this is outside of the test lifecycle.

Reminder, ‘:context` hooks have `:all` alias and `:example` hooks have `:each` alias. @return [Symbol]

# File lib/rspec/core.rb, line 154
def self.current_scope
  RSpec::Support.thread_local_data[:current_scope]
end
current_scope=(scope) click to toggle source

Set the current scope rspec is executing in @api private

# File lib/rspec/core.rb, line 134
def self.current_scope=(scope)
  RSpec::Support.thread_local_data[:current_scope] = scope
end
reset() click to toggle source

Used to ensure examples get reloaded and user configuration gets reset to defaults between multiple runs in the same process.

Users must invoke this if they want to have the configuration reset when they use the runner multiple times within the same process. Users must deal themselves with re-configuration of RSpec before run.

# File lib/rspec/core.rb, line 58
def self.reset
  RSpec::ExampleGroups.remove_all_constants
  @world = nil
  @configuration = nil
end
world() click to toggle source

@private Internal container for global non-configuration data.

# File lib/rspec/core.rb, line 160
def self.world
  @world ||= RSpec::Core::World.new
end