気になったRubyのメソッド


このエントリーをはてなブックマークに追加

instance_eval

ブロックの中のselfが呼び出し元オブジェクトになるってことかしら

# lib/daemons/etc_extension.rb
require 'etc'

Etc.instance_eval do
  def groupname(gid)
    Etc.group {|e| return e.name if gid == e.gid }
    nil
  end
  def username(uid)
    Etc.passwd {|e| return e.name if uid == e.uid }
    nil
  end
end

values_at

http://ref.xaio.jp/ruby/classes/hash/values_at

values_atメソッドは、ハッシュから引数で指定したキーに対応する値を取り出し、配列にして返します。引数は複数指定できます。存在しないキーを指定すると、その値はnilになります。

  def initialize(app, options={})
    @secrets = options.values_at(:secret, :old_secret).compact
    @coder  = options[:coder] ||= Base64::Marshal.new
    super(app, options.merge!(:cookie_only => true))
  end

compat

http://doc.ruby-lang.org/ja/search/class:Array/query:compact/version:1.9.3/

配列からnilを取り除く

class_eval

https://github.com/rack/rack/blob/master/test/spec_session_cookie.rb

before do @warnings = warnings = [] Rack:: Session::Cookie.class_eval do define_method(:warn) { |m| warnings << m } end end

after do Rack:: Session::Cookie.class_eval { remove_method :warn } end

参考