Ruby:http-access2.rb

RAAのhttp-access2/lib/http-access2.rbリーディングメモ。

LoadErrorのcatch

30行目以降

   30:   SSLEnabled = begin
   31:       require 'openssl'
   32:       true
   33:     rescue LoadError
   34:       false
   35:     end

ユーザプログラムが動作の前提となるライブラリを呼べない場合、コンパイル言語ではコンパイルエラーを発すればよいが、コンパイルしない言語ではどう捉えるか。

  1. ロード時の動的エラーをそのまま投げる。
  2. 1. を受け取って例外処理(結果をbool値で持ち回る)。

考えてみれば確かにこの2つくらいしかないかと思うが、考えたこともなかったのでメモ。

クラスメソッドをインスタンスメソッドに委譲

74行目以降

   74:   class << self
   75:     %w(get_content head get post put delete options trace).each do |name|
   76:       eval <<-EOD
   77:         def #{name}(*arg)
   78:           new.#{name}(*arg)
   79:         end
   80:       EOD
   81:     end
   82:   end

インスタンスメソッドと同名のクラスメソッドを作成してインスタンスメソッドに委譲させているみたい。なぜそんなことを……?