ActiveResourceを少し触ってみた

TwitterAPIRailsのActive Resouceを試してみる
http://blog.tkmr.org/tatsuya/show/318-twitter-api-rails-active-resouce

の影響を受けてActiveResourceを使ってみた。

上の記事と合わせて思ったことをつらつらと書きます。

多くの場合書くクラスの設定は共通しているのでサイトごとにベースのクラスを用意してやって小クラスはそれを継承してやってから使う方が色々と楽でよいと思う。つまり上の記事の例なら、

require 'highline'
require 'logger'

class Twitter::API < ActiveResource::Base
 USER = HighLine.new.ask('user:')
 PASSWD = HighLine.new.ask('passwd:') {|q| q.echo = '*' }
 self.site = "http://#{USER}:#{PASSWD}@twitter.com"
 self.logger = Logger.new($stderr)
end

class Twitter::API::Status < Twitter::API
end

Twitter::API::Status.find(:all, :from => :user_timeline)
   #=> ...
   # Log
   GET http://twitter.com:80/statuses/user_timeline.xml--> 200 OK (12220b 0.80s)

みたいな感じに仕える。また、クラスアクセサにloggerを渡してやるとアクセスするたびにログにはかれるのでrequestメソッドをHackする必要はない。

ちなみにActiveResource::StructのRDocを見る限りでは将来的にはログイン情報などはcredentialsとして渡せるようになりそう。つまり上記のは次のように書ける。

class Twitter::API < ActiveResource::Base
 self.site = 'http://twitter.com'
 self.credentials({
   :username => HighLine.new.ask('user:'),
   :password => HighLine.new.ask('passwd:') {|q| q.echo = '*' }
 })
end

早速HighLineの出番がきた。HighLine++