Module: Kernel

Defined in:
lib/active_support/vendor/builder/blankslate.rb,
lib/active_support/core_ext/kernel/requires.rb,
lib/active_support/core_ext/kernel/reporting.rb,
lib/active_support/core_ext/kernel/daemonizing.rb

Overview

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 defined

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.blank_slate_method_addedObject



39
# File 'lib/active_support/vendor/builder/blankslate.rb', line 39

alias_method :blank_slate_method_added, :method_added

.method_added(name) ⇒ Object

Detect method additions to Kernel and remove them in the BlankSlate class.



43
44
45
46
47
# File 'lib/active_support/vendor/builder/blankslate.rb', line 43

def method_added(name)
  blank_slate_method_added(name)
  return if self != Kernel
  Builder::BlankSlate.hide(name)
end

Instance Method Details

#daemonizeObject

Turns the current script into a daemon process that detaches from the console. It can be shut down with a TERM signal.



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/active_support/core_ext/kernel/daemonizing.rb', line 4

def daemonize
  exit if fork                   # Parent exits, child continues.
  Process.setsid                 # Become session leader.
  exit if fork                   # Zap session leader. See [1].
  Dir.chdir "/"                  # Release old working directory.
  File.umask 0000                # Ensure sensible umask. Adjust as needed.
  STDIN.reopen "/dev/null"       # Free file descriptors and
  STDOUT.reopen "/dev/null", "a" # point them somewhere sensible.
  STDERR.reopen STDOUT           # STDOUT/ERR should better go to a logfile.
  trap("TERM") { exit }
end

#enable_warningsObject

Sets $VERBOSE to true for the duration of the block and back to its original value afterwards.



17
18
19
20
21
22
# 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_library_or_gem(library_name) ⇒ Object

Require a library with fallback to RubyGems. Warnings during library loading are silenced to increase signal/noise for application warnings.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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

#silence_stderrObject

For compatibility



25
26
27
# File 'lib/active_support/core_ext/kernel/reporting.rb', line 25

def silence_stderr #:nodoc:
  silence_stream(STDERR) { yield }
end

#silence_stream(stream) ⇒ Object

Silences any stream for the duration of the block.

silence_stream(STDOUT) do
  puts 'This will never be seen'
end

puts 'But this will'


36
37
38
39
40
41
42
43
# File 'lib/active_support/core_ext/kernel/reporting.rb', line 36

def silence_stream(stream)
  old_stream = stream.dup
  stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
  stream.sync = true
  yield
ensure
  stream.reopen(old_stream)
end

#silence_warningsObject

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


9
10
11
12
13
14
# 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

#suppress(*exception_classes) ⇒ Object



45
46
47
48
49
50
# File 'lib/active_support/core_ext/kernel/reporting.rb', line 45

def suppress(*exception_classes)
  begin yield
  rescue Exception => e
    raise unless exception_classes.any? { |cls| e.kind_of?(cls) }
  end
end