Sha256: dc4dc4c517cfcda389cb6175d6a696c1b0deadad9381b78326925c0708fd2c2d

Contents?: true

Size: 1.48 KB

Versions: 114

Compression:

Stored size: 1.48 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)
  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
    yield
  ensure
    constants.each_key do |constant|
      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

114 entries across 114 versions & 1 rubygems

Version Path
chef-15.17.4-universal-mingw32 spec/support/mock/constant.rb
chef-15.17.4 spec/support/mock/constant.rb
chef-15.16.7-universal-mingw32 spec/support/mock/constant.rb
chef-15.16.7 spec/support/mock/constant.rb
chef-15.16.4-universal-mingw32 spec/support/mock/constant.rb
chef-15.16.4 spec/support/mock/constant.rb
chef-15.16.2-universal-mingw32 spec/support/mock/constant.rb
chef-15.16.2 spec/support/mock/constant.rb
chef-15.15.0-universal-mingw32 spec/support/mock/constant.rb
chef-15.15.0 spec/support/mock/constant.rb
chef-16.6.14-universal-mingw32 spec/support/mock/constant.rb
chef-16.6.14 spec/support/mock/constant.rb
chef-16.5.77 spec/support/mock/constant.rb
chef-16.5.77-universal-mingw32 spec/support/mock/constant.rb
chef-16.5.64 spec/support/mock/constant.rb
chef-16.5.64-universal-mingw32 spec/support/mock/constant.rb
chef-15.14.0 spec/support/mock/constant.rb
chef-15.14.0-universal-mingw32 spec/support/mock/constant.rb
chef-16.4.41 spec/support/mock/constant.rb
chef-16.4.41-universal-mingw32 spec/support/mock/constant.rb