ActiveResourceを少し触ってみた
TwitterのAPIでRailsの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++