class RSpec::Mocks::ConstantMutator
Provides a means to stub constants.
Public Class Methods
Hides a constant.
@param (see ExampleMethods#hide_const
)
@see 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 rspec-mocks/lib/rspec/mocks/mutate_const.rb, line 131 def self.hide(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.
@private
# File rspec-mocks/lib/rspec/mocks/mutate_const.rb, line 320 def self.mutate(mutator) ::RSpec::Mocks.space.register_constant_mutator(mutator) mutator.mutate 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 rspec-mocks/lib/rspec/mocks/mutate_const.rb, line 331 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
Stubs a constant.
@param (see ExampleMethods#stub_const
) @option (see ExampleMethods#stub_const
) @return (see ExampleMethods#stub_const
)
@see 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 rspec-mocks/lib/rspec/mocks/mutate_const.rb, line 107 def self.stub(constant_name, value, options={}) unless String === constant_name raise ArgumentError, "`stub_const` requires a String, but you provided a #{constant_name.class.name}" end 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