jasagiri @ ウィキ

Ambitionの拡張

最終更新:

jasagiri

- view
管理者のみ編集可

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

どんなに遠くに来たことでしょう。そしてどんなに遠くへ行こうとしているでしょう。 ここからです。

記事メニュー
目安箱バナー