api 確認とか ActiveResource 確認とか
curl でレスポンスを確認できたのですが、ActiveResource の試験の方法を調査する必要あり。とりあえずやらなきゃ、なのは
- ActiveResource な model クラスの作成
- controller の作成
- とりあえず index アクションのみ実装の方向
- それぞれの試験作成
scaffold で作って云々、な方が良いのかなぁ。
例えば
cloudstack な VM の一覧は以下で取得できるんですが
http://fuga.jp/client/api?command=listVirtualMachines
この場合、http://fuga.jp/client/api?command= な site (ここは基本的に固定だな) に対して listVirtualMachines というモデルなオブジェクトを要求する形になるのか。
ええと、rails の REPL ってどうやって動かすんだったかいな。とりあえず簡単な model クラス作って動作確認する必要あり。
class listVirtualMachines < ActiveResource::Base self.site = 'http://fuga.jp/' end
上記を作成して rails console から云々してみりゃ良いのか。REPL って本当に有り難いッスよね。有り難や有り難や。
とは言え、きちんと rails で作った方が良いですね。
$ rails generate model CloudStackAPI invoke active_record create db/migrate/20111210121948_create_cloud_stack_apis.rb create app/models/cloud_stack_api.rb invoke rspec create spec/models/cloud_stack_api_spec.rb $
で、以下に修正して
class CloudStackApi < ActiveRecord::Base self.site = 'http://hoge.jp/' end
う、site が云々って叱られるな。あ、ActiveResource にしてないしorz
修正してリトライ。
$ rails c Loading development environment (Rails 3.0.9) ruby-1.9.2-p180 :001 > CloudStackApi => CloudStackApi ruby-1.9.2-p180 :002 > CloudStackApi.find(:from => '/client/api?command=listVirtualMachines') ActiveResource::ClientError: Failed. Response code = 432. Response message = Unknown API command: listVirtualMachines%22%7D.xml. (ry
う。どうもこれはパラメータが微妙らしい。リトライしてみます。
ruby-1.9.2-p180 :010 > CloudStackApi.find(:from => '/client/api', :params => {:command => 'listVirtualMachines'}) ActiveResource::ClientError: Failed. Response code = 432. Response message = Invalid request, no command sent.
うーん。以下のコマンドは返事が戻ってくるんだけどなぁ。
$ curl http://fuga.jp/client/api?command=listVirtualMachines
で、よくよく見てみたら以下で、な模様orz
ruby-1.9.2-p180 :017 > CloudStackApi.find(:one, :from => '/client/api', :params => {:command => 'listVirtualMachines'})
戻りが大量すぎで一体何が戻ってきてるのかは不明。どっかに出力を redirect できんかのう。一応配列になってるカンジなのは分かるんですがどうしたものか。