class RSpec::Mocks::ConstantStubber
Provides a means to stub constants.
Public Class Methods
# File lib/rspec/mocks/mutate_const.rb, line 379 def self.find(name) mutators.find { |s| s.full_constant_name == name } end
Hides a constant.
@param (see RSpec::Mocks::ExampleMethods#hide_const)
@see RSpec::Mocks::ExampleMethods#hide_const @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).
# File lib/rspec/mocks/mutate_const.rb, line 189 def self.hide(constant_name) return unless recursive_const_defined?(constant_name) mutate(ConstantHider.new(constant_name, nil, { })) nil end
Uses the mutator to mutate (stub or hide) a constant. Ensures that the mutator is correctly registered so it can be backed out at the end of the test.
@api private
# File lib/rspec/mocks/mutate_const.rb, line 348 def self.mutate(mutator) register_mutator(mutator) mutator.mutate end
The list of constant mutators that have been used for the current example.
@api private
# File lib/rspec/mocks/mutate_const.rb, line 370 def self.mutators @mutators ||= [] end
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).
@api private
# File lib/rspec/mocks/mutate_const.rb, line 389 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
@api private
# File lib/rspec/mocks/mutate_const.rb, line 375 def self.register_mutator(mutator) mutators << mutator end
Resets all stubbed constants. This is called automatically by rspec-mocks when an example finishes.
@api private
# File lib/rspec/mocks/mutate_const.rb, line 357 def self.reset_all # We use reverse order so that if the same constant # was stubbed multiple times, the original value gets # properly restored. mutators.reverse.each { |s| s.rspec_reset } mutators.clear end
Stubs a constant.
@param (see RSpec::Mocks::ExampleMethods#stub_const) @option (see RSpec::Mocks::ExampleMethods#stub_const) @return (see RSpec::Mocks::ExampleMethods#stub_const)
@see RSpec::Mocks::ExampleMethods#stub_const @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).
# File lib/rspec/mocks/mutate_const.rb, line 169 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