@m_seki の

I like ruby tooから引っ越し

Koya-0.3の習作

パフォーマンスよりも、Rubyスクリプトっぽさを優先することにしました。Koya-0.2のスクリプトは動かなくなるけど、ユーザ数は0だから気にしない。

http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/prb/koya/


変更点

  • 属性はkoya_attrと宣言していたのだけど、普通のRubyインスタンス変数を使えるようにする
  • 永続化されるclassをnewすると、参照オブジェクトが返る。

クラスの継承関係をあてにしたスクリプトが動かないけど、dRubyでそんなに問題になってないようなのでたぶん困らない。sample/以下を更新するのがめんどくさいので0.3はしばらくアーカイブしない予定。


昔。インスタンス変数じゃなかったのでうんざり。

class Counter < Koya::KoyaObject
  def initialize
    self.value = 0
  end
  koya_attr :value

  def up
    transaction do
      self.value = self.value + 1
    end
  end
end

さっきの変更

class Counter < Koya::KoyaObject
  def initialize
    @value = 0
  end
  attr_reader :value

  def up
    transaction do
      @value +=1
    end
  end
end

実行するにはこんな風にするんだけど、Counter.newの結果はCounterのインスタンスそのものではなく、インスタンスへの参照が返ります。transactionの中でしかインスタンスが生成できないのは従来通り。

s = Koya::Store.new('test.db')
s.transaction do
  unless s.root['count']
    counter = Counter.new
    p counter.class  ## Koya::KoyaRef
    s.root['count'] = counter
  end
end

counter = s.root['count']
counter.up
p counter.value

そうそう。石塚さんの本へもリンクしとく。
オブジェクト指向データベース (Ascii software science―Data base)