instance_eval in Tumblr::API.write()
どうもインスタンス変数をTumblr::API.write() のブロック部で使ってもうまく参照できてないと思ったら、write() 内で渡されたブロックを writer オブジェクトで instance_eval してるからっぽい。
class Img .. def post Tumblr::API.write(email, passwd) do photo(@uri, @comment) # @uri, @comment は Img クラスのインスタンス変数 end end .. end
とした時、@uri, @comment がブロック内で期待どおりに評価されていない( nil になってる)。
tumblr.rb を見ると、
def self.write(email, password, generator="ruby-tumblr", &b) Net::HTTP.start("www.tumblr.com") do |http| writer = Writer.new(http, email, password, generator) writer.instance_eval &b end end
、、、うーん、、、スコープが writer オブジェクトになっちゃうから、Imgオブジェクトのインスタンスは参照できなくなっちゃうのかな?とりあえずローカル変数に直して渡してあげることで対処。