Core Ext Kernel

目次

試した環境

$ ruby -v
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]
$ bundle exec ruby -r active_support -e 'puts ActiveSupport::VERSION::STRING'
4.0.0.rc1

機能を追加する方法

require 'active_support/core_ext/kernel

Agnostics

`` によるコマンド実行の機能を上書きしている。

この機能だけ読み込みする方法

require 'active_support/core_ext/kernel/agnostics'

#`

`` によるコマンド実行時に Errno::ENOENT 例外が発生した場合、レスキューして標準エラー出力に出力する。

Debugger

debugger が定義されている場合、debugger の動作を拡張します。

#debugger

debugger が定義されている場合、debugger が起動した際に追加のメッセージが表示されます。 また、breakpoint というエイリアスを作成します。

ruby 2.0.0 以降では debugger を使用するには debugger2 gem を使用します。 それ以前は debugger gem を使用します。

Reporting

標準出力や標準出力などに書き込みする際に影響を与えるメソッドが定義されている。

この機能だけ読み込みする方法

require 'active_support/core_ext/kernel/reporting'

#silence_warning

一時的に VERVOSEVERVOSE が nil の状態で動作します。

#enable_warning

silence_warning とは逆に、 一時的にVERVOSEVERVOSE が true の状態で動作します。

#with_warings

一時的に VERVOSEflagVERVOSE の値になります。

#silence_stream

引数stream を /devu/null に流して、捨てることができます。

#suppress

引数 excption_classes に指定した例外が発生した場合に無視するようにできます。

#capture

ブロック内での、引数 stream への書き込みを取得できます。 silence というエイリアスがあります。

#quietly

ブロック内での、標準出力、標準エラー出力への書き込みを捨てることができます。

Singleton Class

シングルトンクラスに対する eval を提供する class_eval が実装されています。

この機能だけ読み込みする方法

require 'active_support/core_ext/kernel/singleton_class'

#class_eval

singleton_class.class_eval と等価。

オブジェクトのシングルトンクラスのコンテキストでevalができます。

h = "hoge"
h.class_eval do
  # h が 指すオブジェクトに `a`メソッド と `a=` メソッドを定義
  attr_accessor :a
end


h.a = 'goro'
h.a           # => 'goro'
"hoge".a      # => raise NoMethodError

以下のコードとスコープが違いますが、できることは同じです。

h = "hoge"
class << h
  attr_accessor :a
end

h.a = 'goro'
h.a           # => 'goro'
"hoge".a      # => raise NomethodError