jasagiri @ ウィキ
Ambitionの拡張
最終更新:
jasagiri
Ambition についていろいろ話している人は本当に面白いです。 「Oh, Ambition? いいね。」 「Ambition? インピーダンスミスマッチだよ」 「SQL-92 で十分だよ、ありがとう」 言語道断。
わかってます。いくつか気が狂ったことをいいました。 どうやったらAmbition がデータベースの Rack になるかとか、 far fetched as it sounds, どんなに Ambition が LINQ のようなものになるよう願っているか。しかし私たちは話し合っています。
Today we want to show you some plain jane Ruby and how Ambition empowers it to leverage its inherent synergy. Er, I mean, we want to show you something kickass.
New School
This is what we’re used to:
>> SQL::User.select { |m| m.name == 'jon' && m.age == 21 }.to_s => "SELECT * FROM users WHERE users.name = 'jon' AND users.age = 21"
This is what’s new:
>> LDAP::User.select { |m| m.name == 'jon' && m.age == 21 }.to_s => "(&(name=jon)(age=21))"
Adapter School
現在の0.5で、 Ambition はもはや SQL ラッパではありません。 むしろ、あなた独自のアダプタを書くための API です。 もし Ambition で ActiveRecord を使い続けるなら、 ambitious-activerecord gem をインストールしてください。:
$ gem install ambitious-activerecord
そして、もちろん、こう使います。:
require 'rubygems' require 'ambition/adapters/active_record'
古い0.3系もインストールして使うことが出来ます。:
$ gem install ambition -v 0.3.2
とにかく、Ambition は今や任意のデータストアを何でもサポートします。Ambition アダプタは ambition に依存した gem でよりよい 驚くべき API を使います。(?)
他にどんなアダプタが計画されていますか? Oh, I dunno. いくつかあげると ActiveLDAP, CouchDB, Facebook FQL, XPath, DataMapper といったところです。 ちょうど先日の夜、Bostom.rb の連中が Sphinx アダプタをはじめました。 git でチェックしてください:
$ git clone git://technicalpickles.com/ambitious_sphinx.git
また、2つ gem の例があります。:ambitious-activeldap と ambitious-activerecord です。
Ambition の API のための基本的な文書が ambition.rubyforge.org にあります。(また、あなたは自由に ambition.rubyforge.org を熟読できます)。
私たちはすぐ始めるつもりですが悪いスタートではありません。アイデアを得ましたか?ちょっと気が狂ってますか? We’re all about it. メーリングリストに飛び込むか irc.freenode.net #ambition に繋げて、投稿してください。
Dream School
例として youtube-g gem を試しましょう。完成されたアダプタはないのであるフリをします。
新しい Ambition を使うことで、このような問い合わせを(場面に隠れて?)得られます。:
Videos.select { |video| video.user == 'liz' }
入るにはこう:
YouTubeG::Client.new.videos_by(:user => 'liz')
このような問い合わせを得られます:
Videos.select { |video| video.tags.include? 'apple' }
入るにはこう:
YouTubeG::Client.new.videos_by(:tags => 'apple')
そして、こんな問い合わせでさえ可能です。:
Videos.select do |video| video.tags.include?('football') && !video.tags.include?('soccer') end
入るにはこう:
YouTubeG::Client.new.videos_by :tags => { :include => ['football'], :exclude => ['soccer'] }
悪くない。Nic 博士の提供したジェネレータで、アダプタ acaffold を吐き出すようになります。:
$ ambition_adapter ambitious_youtube
Future School
いくつかのソースを示すことでアダプタのためのアイデアを得ましたか? コメントを投稿してください。 クールなアダプタ、高級なトリック、新しい機能の残りに遅れをとる積もり無いと信じてください。
関わりたいですか? 私が言ったように、いつもリストと GitHub レポジトリがあります。バグは Lighthouse にあり、thisaways レポジトリのクローンを作ることが出来る:
$ git clone git://github.com/defunkt/ambition.git
どんなに遠くに来たことでしょう。そしてどんなに遠くへ行こうとしているでしょう。 ここからです。