Sha256: 2ecb45af4e77ecdc7e6625615e8043a3a8a34ae401569d2c72aaeebc0dadb9fd

Contents?: true

Size: 1.5 KB

Versions: 213

Compression:

Stored size: 1.5 KB

Contents

# Allows easy mocking of global and class constants

# Inspired by:
# http://missingbit.blogspot.com/2011/07/stubbing-constants-in-rspec_20.html
# http://digitaldumptruck.jotabout.com/?p=551

def mock_constants(constants, &block)
  saved_constants = {}
  constants.each do |constant, val|
    source_object, const_name = parse_constant(constant)
    saved_constants[constant] = source_object.const_get(const_name)
    with_warnings(nil) {source_object.const_set(const_name, val) }
  end

  begin
    block.call
  ensure
    constants.each do |constant, val|
      source_object, const_name = parse_constant(constant)
      with_warnings(nil) { source_object.const_set(const_name, saved_constants[constant]) }
    end
  end
end

def parse_constant(constant)
  source, _, constant_name = constant.to_s.rpartition('::')
  [constantize(source), constant_name]
end

# Taken from ActiveSupport

# File activesupport/lib/active_support/core_ext/kernel/reporting.rb, line 3
#
# Sets $VERBOSE for the duration of the block and back to its original value afterwards.
def with_warnings(flag)
  old_verbose, $VERBOSE = $VERBOSE, flag
  yield
ensure
  $VERBOSE = old_verbose
end

# File activesupport/lib/active_support/inflector/methods.rb, line 209
def constantize(camel_cased_word)
  names = camel_cased_word.split('::')
  names.shift if names.empty? || names.first.empty?

  constant = Object
  names.each do |name|
    constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
  end
  constant
end

Version data entries

213 entries across 213 versions & 3 rubygems

Version Path
chef-12.6.0 spec/support/mock/constant.rb
chef-12.6.0-universal-mingw32 spec/support/mock/constant.rb
chef-12.5.1-universal-mingw32 spec/support/mock/constant.rb
chef-12.5.1 spec/support/mock/constant.rb
chef-12.4.3-universal-mingw32 spec/support/mock/constant.rb
chef-12.4.3 spec/support/mock/constant.rb
chef-12.4.2-universal-mingw32 spec/support/mock/constant.rb
chef-12.4.2 spec/support/mock/constant.rb
chef-12.5.0.alpha.1 spec/support/mock/constant.rb
chef-12.4.1-universal-mingw32 spec/support/mock/constant.rb
chef-12.4.1 spec/support/mock/constant.rb
chef-12.4.0 spec/support/mock/constant.rb
chef-12.4.0-universal-mingw32 spec/support/mock/constant.rb
chef-12.4.0.rc.2 spec/support/mock/constant.rb
chef-12.4.0.rc.2-universal-mingw32 spec/support/mock/constant.rb
chef-12.4.0.rc.0 spec/support/mock/constant.rb
chef-12.4.0.rc.0-universal-mingw32 spec/support/mock/constant.rb
chef-11.18.12-x86-mingw32 spec/support/mock/constant.rb
chef-11.18.12 spec/support/mock/constant.rb
chef-12.3.0-x86-mingw32 spec/support/mock/constant.rb