2010/04/02

TinyDSメモ(Base編)

JRuby on gae/jで使えるDatastoreのラッパーであるTinyDSの個人的メモ (0.0.3 pre)

間違っていたら指摘をお願いします。

TinyDS::Base

エンティティの基底クラス。

基本的な使い方

class Person << TinyDS::Base property :user_name, :string end # 作成 Person.create({:user_name => "hoge"}) # idから検索 hoge = Person.get_by_id(id) puts hoge.user_name #=> hoge

保存したいプロパティはproperty :カラム名, :型名で定義

プロパティの型

シンボル説明
string文字列 RubyのString(500byte以下)
integer整数 RubyのInteger
text長い文字列 RubyのString(DatastoreのTextクラス)
time日付 RubyのTime
listリスト RubyのArray
float浮動小数点 RubyのFloat *0.0.2にはない
booleanブール値 Rubyのtrue/false *0.0.2にはない

floatとbooleanを使うにはGithubから最新版を取得する必要がある。

予約されているプロパティ名

  • id: Keyのid
  • name: Keyのname
  • key: key
  • entity: Baseの中で使っている
  • parent_key: 親のKey
  • parent: 親

プロパティ名がcreated_atとupdated_atの場合はsaveを行う際に自動的に作成日と更新日時が設定される。

メソッド

メソッド名説明
initialize(attrs={}, opts={}コンストラクタ
attrs:このエンティティに設定したいプロパティのHash(key=>name, value=>値)
opts:オプションのHash :id, :name, :key, :parentと:entityが指定できる。
:id:このエンティティのidに指定したい整数値
:name:このエンティティのKeyのnameに指定したい文字列
:key:このエンティティのKeyに指定したいKey

:id, :name, :keyはいずれか1つだけ指定可能。2以上指定すると例外
:id, :name, :keyを指定しない場合は:id自動発番

:parent:Hashの値にエンティティを入れておくと、それを親エンティティとして作成する。
:entity:Hashの値にエンティティ(生のEntity)を入れておくと、それを元にエンティティを作成する。
:entityを指定しない場合、newで作成した場合は新規レコード扱い(new_record==true)になり、saveするまでDatastoreには格納されない。
self.property(name, type, opts={})プロパティを定義する。
name:プロパティの名前
type:プロパティの型
opts:オプション opts[:default]=デフォルト値とすることでデフォルト値を渡せる。
デフォルト値はProcオブジェクトでもよく、Procの場合はそれをcallした結果がデフォルト値になる。
self.property_definitions定義されているプロパティを取得する(key=>name, value=>PropertyDefinitionsのHash)
>self.property_definitions(name)nameで指定されたプロパティ定義を取得する。存在しない場合は例外
self.valid_property?(name, context)nameで指定されたプロパティが存在すればtrue。contextは使っていないっぽい
self.has_property?(name)nameで指定されたプロパティが存在すればtrue。
self.default_attrsデフォルト値の一覧を返す(key=>name, value=>デフォルト値のHash)
self.kindこのエンティティのKindを返す
keyこのエンティティのKeyを返す
idこのエンティティのidを返す
nameこのエンティティのnameを返す
parent_keyこのエンティティの親のKeyを返す
self.to_key(m)渡されたオブジェクトをKeyとして返す。mの種類によって以下の動作となる。
Key=>そのまま
Entity=>m.key
String=>KeyFactory.stringToKey(m)で生成したKey
Base=>m.key
それ以外=>例外
self.allocate_ids(num)Datastore.allocate_ids(kind, num)の結果(KeyRange)
self.allocate_idDatstore.allocate_ids(1).startの結果(Key)
self.create(attrs={}, opts={})エンティティの作成と同時にDatastoreに保存する。
引数はinitializeと同じ。保存する前にvalid?が呼ばれ、不正なエンティティの場合falseが返る。
self.create!エンティティの作成と同時にDatastoreに保存する。
引数はinitializeと同じ。保存する前にvalid?が呼ばれ、不正なエンティティの場合RecordInvalid例外がスローされる。
self.new_from_entity(_entity)既存のエンティティ(生Entity)からエンティティを生成する。
valid?このエンティティが有効かをチェックする。デフォルト実装では常にtrueを返す。createやsaveのときに暗黙的に呼ばれる。
new_record?新規レコード(まだDatastoreに格納されていない)の場合trueを返す。
saveDatastoreに保存する。保存する前にvalid?が実行され、不正なエンティティの場合falseを返す。
save!Datastoreに保存する。保存する前にvalid?が実行され、不正なエンティティの場合RecordInvalid例外がスローされる。
self.get!(key)指定したkeyのエンティティを取得する。エンティティが見つからない場合EntityNotFound例外をスロー
self.get(key)指定したkeyのエンティティを取得する。エンティティが見つからない場合nil
self.build_key(id_or_name, parent)Keyを生成する。
self._get_by_id_or_name!(id_or_name, parent)指定したidまたはnameのエンティティを取得する。エンティティが見つからない場合EntityNotFound例外
self.get_by_id!(id, parent=nil)指定したidのエンティティを取得する。エンティティが見つからない場合EntityNotFound例外
self.get_by_id(id, parent=nil)指定したidのエンティティを取得する。エンティティが見つからない場合nil
self.get_by_name!(name, parent=nil)指定したnameのエンティティを取得する。エンティティが見つからない場合EntityNotFound例外
self.get_by_name(name, parent=nil)指定したnameのエンティティを取得する。エンティティが見つからない場合nil
self.get_by_ids(ids, parent=nil)指定したidのエンティティを取得する。idsはidのArray。
self.get_by_names(names, parent=nil)指定したnameのエンティティを取得する。namesはnameのArray
self.queryQueryオブジェクトを返す。詳しくはQueryについてを参照。
self.countこのKindの件数を返す
destroyこのエンティティを削除する
self.destroy(array)指定されたArrayに含まれるエンティティを削除する
self.destroy_allこのKindのすべてのエンティティを削除する
read_onlyこのエンティティを読み取り専用にする
regetDatastoreから再度読み込み直す。トランザクション用らしい?
tx(opts={}, &block)トランザクション内でblockを実行する。
optsには:retritesと:force_beginが指定可能。
:retriesはトランザクションの再試行回数(Datastore.transaction(retries)を参照)
:force_beginはDatastore.current_transaction(nil)で強制的にトランザクションを開始する
attributes=(attrs)属性を設定する
set_property(k,v)プロパティを設定する
get_property(k)プロパティを取得する

0 件のコメント: