DataMapper用のDataStoreアダプター、dm-datastore-adapter-0.2.2をリリースしました。
今回のリリースで以下のような機能がサポートされます。
- トランザクション
- OR条件
ruby>>
Post.all(:id => [1,2,3])
<<--
のような事が出来るようになりました。 - NOT条件
ruby>>
Post.all(:updated_at.not => nil)
Post.all(:id.not => 3)
<<--
などが出来るようになりました。
DataMapperのアダプタとして主に必要な機能はだいたい揃ってきました。
デモサイトであるWatchMe!もアップデートしています。
まだ実用的なサービスになってないですが、登録したサイトをクローリングして全てのページの監視を行い、エラーが発生したらメールで知らせるサービスになる予定です。
posted by
genki on Fri 17 Apr 2009 at 04:29 with 8 comments
class GaeTransaction
def self.transaction
begin
txn = DataMapper.repository(:datastore).adapter.transaction_primitive
txn.begin
DataMapper.repository(:datastore).adapter.push_transaction(txn)
yield
DataMapper.repository(:datastore).adapter.pop_transaction
txn.commit
rescue
pp $@
p $!
txn.rollback
ensure
txn.close
end
end
end
ruby>>
Post.transaction do
# some code goes here
end
<<--
ちなみに、DataMapper.setup(:datastore, :adapter => :datastore, :database => 'gae_sample')を設定しています。また、Rails + DataMapper です。
Adapter not set: default. Did you forget to setup?
--gems/dm-core-0.9.11/lib/dm-core/repository.rb:28:in `adapter'
--gems/dm-core-0.9.11/lib/dm-core/transaction.rb:50:in `link'
--gems/dm-core-0.9.11/lib/dm-core/transaction.rb:44:in `each'
--gems/dm-core-0.9.11/lib/dm-core/transaction.rb:44:in `link'
--gems/dm-core-0.9.11/lib/dm-core/transaction.rb:52:in `link'
--gems/dm-core-0.9.11/lib/dm-core/transaction.rb:44:in `each'
--gems/dm-core-0.9.11/lib/dm-core/transaction.rb:44:in `link'
--gems/dm-core-0.9.11/lib/dm-core/transaction.rb:20:in `initialize'
--gems/dm-core-0.9.11/lib/dm-core/model.rb:510:in `transaction'
--gae-sample-3/app/controllers/products_controller.rb:63:in `update'
ちなみに、DataMapper.setup(:datastore,・・・と設定した場合に、モデルクラスのrepositoriesが以下のようになっているのは、正しい姿なのでしょうか?
「@name=:default」があるために「Adapter not set: default」となるのかと。
DataMapper::Repository:0x591431e8 @identity_maps={}, @name=:datastore
DataMapper::Repository:0x32f9286d @identity_maps={}, @name=:default
DataMapper::Repository:0x3cd2640 @identity_maps={}, @name=:datastore
お手数おかけして申し訳ありません。よろしくお願いします。
しかし、なぜデフォルトでうまくいくのかよく理解できていないので、ソースよく読みます。たびたびお手数おかけして申し訳ございませんでした。