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

RSpec’s top level namespace. All of rspec-expectations is contained in the ‘RSpec::Expectations` and `RSpec::Matchers` namespaces.

Share the top-level RSpec namespace, because we are a core supported extension.

Constants

MODULES_TO_AUTOLOAD

@private

SharedContext

@private

Attributes

Setters for shared global objects @api private

Setters for shared global objects @api private

Public Class Methods

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 rspec-core/lib/rspec/core.rb, line 69
def self.clear_examples
  world.reset
  configuration.reset_reporter
  configuration.start_time = ::RSpec::Core::Time.now
  configuration.reset_filters
end

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 rspec-core/lib/rspec/core.rb, line 84
def self.configuration
  @configuration ||= RSpec::Core::Configuration.new
end

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 rspec-core/lib/rspec/core.rb, line 96
def self.configure
  yield configuration if block_given?
end

@private

Calls superclass method
# File rspec-core/lib/rspec/core.rb, line 176
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

The example being executed.

The primary audience for this method is library authors who need access to the example currently being executed.

# File rspec-core/lib/rspec/core.rb, line 104
def self.current_example
  RSpec::Support.thread_local_data[:current_example]
end

Set the current example being executed. @api private

# File rspec-core/lib/rspec/core.rb, line 110
def self.current_example=(example)
  RSpec::Support.thread_local_data[:current_example] = example
end

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 rspec-core/lib/rspec/core.rb, line 136
def self.current_scope
  RSpec::Support.thread_local_data[:current_scope]
end

Set the current scope rspec is executing in @api private

# File rspec-core/lib/rspec/core.rb, line 116
def self.current_scope=(scope)
  RSpec::Support.thread_local_data[:current_scope] = scope
end

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 rspec-core/lib/rspec/core.rb, line 57
def self.reset
  RSpec::ExampleGroups.remove_all_constants
  @world = nil
  @configuration = nil
end

@private Internal container for global non-configuration data.

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