Class: RSpec::Mocks::ConstantMutator

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/mocks/mutate_const.rb

Overview

Provides a means to stub constants.

Class Method Summary (collapse)

Class Method Details

+ (Object) hide(constant_name)

Note:

It's recommended that you use hide_const in your examples. This is an alternate public API that is provided so you can hide constants in other contexts (e.g. helper classes).

Hides a constant.

Parameters:

  • constant_name (String)

    The fully qualified name of the constant. The current constant scoping at the point of call is not considered.

See Also:

190
191
192
193
# File 'lib/rspec/mocks/mutate_const.rb', line 190
def self.hide(constant_name)
  mutate(ConstantHider.new(constant_name, nil, { }))
  nil
end

+ (Object) raise_on_invalid_const

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Used internally by the constant stubbing to raise a helpful error when a constant like "A::B::C" is stubbed and A::B is not a module (and thus, it's impossible to define "A::B::C" since only modules can have nested constants).

390
391
392
393
394
395
# File 'lib/rspec/mocks/mutate_const.rb', line 390
def self.raise_on_invalid_const
  lambda do |const_name, failed_name|
    raise "Cannot stub constant #{failed_name} on #{const_name} " +
          "since #{const_name} is not a module."
  end
end

+ (Object) stub(constant_name, value, options = {})

Note:

It's recommended that you use stub_const in your examples. This is an alternate public API that is provided so you can stub constants in other contexts (e.g. helper classes).

Stubs a constant.

Parameters:

  • constant_name (String)

    The fully qualified name of the constant. The current constant scoping at the point of call is not considered.

  • value (Object)

    The value to make the constant refer to. When the example completes, the constant will be restored to its prior state.

  • options (Hash) (defaults to: {})

    Stubbing options.

Options Hash (options):

  • :transfer_nested_constants (Boolean, Array<Symbol>)

    Determines what nested constants, if any, will be transferred from the original value of the constant to the new value of the constant. This only works if both the original and new values are modules (or classes).

Returns:

  • (Object)

    the stubbed value of the constant

See Also:

170
171
172
173
174
175
176
177
178
179
# File 'lib/rspec/mocks/mutate_const.rb', line 170
def self.stub(constant_name, value, options = {})
  mutator = if recursive_const_defined?(constant_name, &raise_on_invalid_const)
    DefinedConstantReplacer
  else
    UndefinedConstantSetter
  end
  mutate(mutator.new(constant_name, value, options[:transfer_nested_constants]))
  value
end