spec/spec_helper.rb in instrumental_agent-0.5.1 vs spec/spec_helper.rb in instrumental_agent-0.6.0
- old
+ new
@@ -10,5 +10,61 @@
config.after(:all) do
end
end
+
+
+def parse_constant(constant)
+ source, _, constant_name = constant.to_s.rpartition('::')
+
+ [source.constantize, constant_name]
+end
+
+def with_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)
+ Kernel::silence_warnings { source_object.const_set(const_name, val) }
+ end
+
+ begin
+ block.call
+ ensure
+ constants.each do |constant, val|
+ source_object, const_name = parse_constant(constant)
+
+ Kernel::silence_warnings { source_object.const_set(const_name, saved_constants[constant]) }
+ end
+ end
+end
+alias :with_constant :with_constants
+
+class String
+ # From Rails
+ def constantize
+ names = 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
+end
+
+module Kernel
+ # File activesupport/lib/active_support/core_ext/kernel/reporting.rb, line 10
+ def silence_warnings
+ with_warnings(nil) { yield }
+ end
+
+ def with_warnings(flag)
+ old_verbose, $VERBOSE = $VERBOSE, flag
+ yield
+ ensure
+ $VERBOSE = old_verbose
+ end
+end
\ No newline at end of file