ActiveResource すごい。
redmine_client ってホントに小さなライブラリなのに、redmine の API にアクセスできちゃう。
サンプルプログラム
#!ruby # -*- coding: utf-8 -*- require 'rubygems' require 'redmine_client' RedmineClient::Base.configure do self.site = 'http://xxx.xxx.xxx.xxx/' self.user = 'userid' self.password = 'password' end issue = RedmineClient::Project.find(:all).each do |project| p project.id p project.name p project.identifier p project.description p project.created_on p project.updated_on end issue = RedmineClient::Issue.find(150) p issue.id p issue.project.name p issue.tracker.name p issue.status.name p issue.priority.name p issue.author.name p issue.assigned_to.name p issue.subject p issue.description p issue.start_date p issue.due_date p issue.done_ratio p issue.estimated_hours p issue.custom_fields.custom_field p issue.created_on p issue.updated_on RedmineClient::Issue.find(:all).each do |issue| puts issue.id puts issue.project.name puts issue.description end
こんな感じで、ActiveRecord のように操作できる。
肝心のライブラリはというと
redmine_client.rb
require 'active_resource' require 'redmine_client/base' require 'redmine_client/project' require 'redmine_client/issue' require 'redmine_client/news'
base.rb
module RedmineClient class Base < ActiveResource::Base def self.configure(&block) instance_eval &block end end end
project.rb
module RedmineClient class Project < RedmineClient::Base end end
issue.rb
module RedmineClient class Issue < RedmineClient::Base end end
news.rb
module RedmineClient class News < RedmineClient::Base end end
たったのこれだけ。すげえ。ActiveResource 頑張りすぎ。ただ、ここまで簡単にできるためには API が rails の作法に従っていないとだめなんだけど、これについての説明は下記のサイトがとっても分かりやすかった。
URL というのはそもそもリソースの場所を表すもので、それに対する操作は HTTP メソッドで指定するべきだ、という REST の思想を実現するためです。しかしまあ、それはさておき、 ActiveResource 的に重要なことは、これによって「あるリソースへのアクセスが単一の URL で行え、しかもその URL が一定の規則を持っている」点です。
ActiveResource の使い方(前編) : Rails 同士で通信する
REST に関しては
を読み返したいところ。ActiveResource についてはこちらにも記述があるので読み返してみた。Rails3 対応版がでないかなぁ (´・ω・`)