Since Ruby is very dynamic, methods added to the ancestors of BlankSlate after BlankSlate is defined will show up in the list of available BlankSlate methods. We handle this by defining a hook in the Object and Kernel classes that will hide any method defined after BlankSlate has been loaded.
Detect method additions to Kernel and remove them in the BlankSlate class.
# File lib/active_support/vendor/builder-2.1.2/blankslate.rb, line 65 def method_added(name) result = blank_slate_method_added(name) return result if self != Kernel BlankSlate.hide(name) result end
# File lib/active_support/core_ext/kernel/debugger.rb, line 11 def breakpoint message = "\n***** The 'breakpoint' command has been renamed 'debugger' -- please change *****\n" defined?(Rails) ? Rails.logger.info(message) : $stderr.puts(message) debugger end
class_eval on an object acts like singleton_class.class_eval.
# File lib/active_support/core_ext/kernel/singleton_class.rb, line 10 def class_eval(*args, &block) singleton_class.class_eval(*args, &block) end
Turns the current script into a daemon process that detaches from the console. It can be shut down with a TERM signal.
# File lib/active_support/core_ext/kernel/daemonizing.rb, line 4 def daemonize Process.daemon end
Starts a debugging session if ruby-debug has been loaded (call script/server --debugger to do load it).
# File lib/active_support/core_ext/kernel/debugger.rb, line 4 def debugger message = "\n***** Debugger requested, but was not available: Start server with --debugger to enable *****\n" defined?(Rails) ? Rails.logger.info(message) : $stderr.puts(message) end
Sets $VERBOSE to true for the duration of the block and back to its original value afterwards.
# File lib/active_support/core_ext/kernel/reporting.rb, line 17 def enable_warnings old_verbose, $VERBOSE = $VERBOSE, true yield ensure $VERBOSE = old_verbose end
Require a library with fallback to RubyGems. Warnings during library loading are silenced to increase signal/noise for application warnings.
# File lib/active_support/core_ext/kernel/requires.rb, line 4 def require_library_or_gem(library_name) silence_warnings do begin require library_name rescue LoadError => cannot_require # 1. Requiring the module is unsuccessful, maybe it's a gem and nobody required rubygems yet. Try. begin require 'rubygems' rescue LoadError => rubygems_not_installed raise cannot_require end # 2. Rubygems is installed and loaded. Try to load the library again begin require library_name rescue LoadError => gem_not_installed raise cannot_require end end end end
Silences any stream for the duration of the block.
silence_stream(STDOUT) do puts 'This will never be seen' end puts 'But this will'
# File lib/active_support/core_ext/kernel/reporting.rb, line 36 def silence_stream(stream) old_stream = stream.dup stream.reopen(RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'NUL:' : '/dev/null') stream.sync = true yield ensure stream.reopen(old_stream) end
Sets $VERBOSE to nil for the duration of the block and back to its original value afterwards.
silence_warnings do value = noisy_call # no warning voiced end noisy_call # warning voiced
# File lib/active_support/core_ext/kernel/reporting.rb, line 9 def silence_warnings old_verbose, $VERBOSE = $VERBOSE, nil yield ensure $VERBOSE = old_verbose end
Returns the object's singleton class.
# File lib/active_support/core_ext/kernel/singleton_class.rb, line 3 def singleton_class class << self self end end
Blocks and ignores any exception passed as argument if raised within the block.
suppress(ZeroDivisionError) do 1/0 puts "This code is NOT reached" end puts "This code gets executed and nothing related to ZeroDivisionError was seen"
# File lib/active_support/core_ext/kernel/reporting.rb, line 53 def suppress(*exception_classes) begin yield rescue Exception => e raise unless exception_classes.any? { |cls| e.kind_of?(cls) } end end
Generated with the Darkfish Rdoc Generator 2.