ruby

DataMapper 0.10.2 Reading (その 4: dm-core/core_ext/)

このディレクトリに配置されたコードは,ruby の標準クラス (モジュール) を拡張するためのもの.具体的には以下の 3 つが拡張されている. Enumerable Kernel Symbol それぞれは小さなコードだが,影響範囲は広い. Enumerable empty?/one?/first/size メソ…

DataMapper 0.10.2 Reading (その 3: dm-core/)

今回からは dm-core/ 以下のコードを見ていきます. 配置確認 うーん,かなり変更されている... dm-core/ adapters/ abstract_adapter.rb data_objects_adapter.rb in_memory_adapter.rb mysql_adapter.rb oracle_adapter.rb postgres_adapter.rb sqlite3…

忘れてた...

DataMapper を 0.10.2 に upgrade したとき... {:nullable=>false} is deprecated, use {:required=>true} instead (./tables.rb:14)あー,ですよねー.

DataMapper 0.10.2 Reading (その 2: dm-core.rb)

やはり,最初はここから. 0.9.x に比べて,格段にモジュール化が進み,非常にシンプルになっている. 最初の方 ひたすら require して,必要なコードを読み込んでいる.所々 TODO があるので,また変わるんだろうなぁ... DataMapper.root module DataMap…

DataMapper 0.10.2 Reading (その 1: パッケージ)

今回から 0.10.2 のコードへ突入. その前に,0.9.11 のコードを読み進めたときの反省点. 全体像の把握をきちんとしていなかった 気づいたら深さ優先になってた 図がない! 自分で読み返してもわかりづらい! と,いうわけで,気をつけろよ!>自分 パッケ…

名前データが大量に欲しくなって

テーブルに突っ込むデータとして,名前データが欲しくなったわけです.そしたらこんな記事を発見. http://itpro.nikkeibp.co.jp/article/COLUMN/20060131/228230/ とりあえず ruby 用に書き直してみた.重複云々の部分 (元記事の if 文) は省略しています.…

DataMapper Reading (その 4: Adapter 補足)

前回積み残した TODO の Adapter について.実際に DB へ SQL 発行を行うのが Adapter なので,こいつを実装すればいろんなストレージにアクセスできるようになる.なお,自分で Adapter を実装する場合は,in_memory_adapter.rb が参考になる. AbstractAda…

DataMapper Reading (その 3: 検索メソッド all の処理)

かなーり間が空いてしまいましたが,続きます.早く version 10.x に突入したい.今回は代表的な検索用メソッドである Model#all を読んでいきます. Model#all module DataMapper module Model def all(query = {}) query = scoped_query(query) query.repo…

DataMapper の公式サイトが...

デザインが新しくなってる. http://datamapper.org/ 内容は充実しているのだろうか? (なんか Transaction が見つからないけど)

DataMapper Reading (その 2: モデルの save 処理)

今回はモデルの save 処理を軸に読み進めていきます. Resource#save メソッド モデルの save メソッドは,Resource モジュールに定義されている. module Resource def save(context = :default) ... associations_saved = false child_associations.each {…

DataMapper Reading (その 1: module DataMapper)

DataMapper モジュールには,setup や repository メソッド,migration 関連メソッドが定義されている. 対象バージョン 0.9.11 DataMapper.setup メソッド # 使用例 DataMapper.setup(:default, 'mysql://localhost/hoge_db') DataMapper を使うときに必ず…

DataMapper Reading (はじまり)

DataMapper のコードを読む.最終的には Adapter を実装したい. 公式 http://datamapper.org/ github http://github.com/datamapper 作業環境 OS ubuntu 9.04 DataMapper 0.9.11 (data_objects や extlib は 0.9.12) でもこれは途中まで (0.10.1 に上がって…

DataMapper を使う (Hook)

メソッド呼び出し前後に callback を仕掛けることができる. DataMapper Hooks http://datamapper.org/doku.php?id=docs:hooks インスタンスメソッドに対する Hook class Post include DataMapper::Resource ... before :save, :do_before_save # save メソ…

DataMapper を使う (Single Table Inheritance)

DataMapper で STI を表現する場合は,以下のようにする. class Person include DataMapper::Resource property :id, Serial property :name, String property :type, Discriminator ... end class Employee < Person property :dept, String # 所属 end cl…

DataMapper を使う (Index)

以下の記事によれば,property の定義で index の指定ができるようです. http://jlaine.net/2008/6/2/specifying-indeces-in-datamapper 具体的には,property 定義で :index => true を指定する. unique index にしたい場合は :unique_index => true を指…

DataMapper を使う (Transactions)

今回は Transaction 機能について. 公式サイト http://datamapper.org/doku.php?id=docs:transactions 環境 dm-core-0.9.11 モデル定義 class Account include DataMapper::Resource property :id, Serial property :name, String, :nullable => false prop…

DataMapper を使う (Associations)

目次 has n and belongs_to (One-To-Many) has n, :through (One-To-Many-Through) ここでちょっと補足 has, and belongs to, many (Or Many-To-Many) Self-Referential Has, and belongs to, many Adding To Associations Removing From Associations Custo…

DataMapper を使う (Finding)

さて,今回は検索について.1ヶ月ぐらい前に書いたものだけど... (この続き→ DataMapper を使う - KrdLabの不定期日記) いつも通り以下のサイトを参考に,ざっと使い方をメモってみた. http://datamapper.org/doku.php?id=docs:finders 使えるメソッド D…

DataMapper を使う (Valication)

http://d.hatena.ne.jp/KrdLab/20090503/1241331627 の補足.今回は Validation についてです.一部のサンプルは公式サイトから拝借しています. http://datamapper.org/doku.php?id=docs:validations はじめに Validation を使うには,まず require する. …

DataMapper を使う (モデル定義)

http://d.hatena.ne.jp/KrdLab/20090503/1241331627 の補足. モデル定義についてです.一部のサンプルは公式サイトから拝借しています. プロパティの宣言 モデルクラス内部で property メソッドを呼び出す. class Post include DataMapper::Resource prop…

Getting Started With DataMapper

DataMapper って結構いいのかもしれない...と思い,目下勉強中. 以下,超意訳です.あしからず. 原文: http://datamapper.org/doku.php?id=getting_started_with_datamapper はじめに,もしヘルプが必要だと思った場合,Mailing List と IRC を通したア…

Why DataMapper?

以下,超意訳です.あしからず. 原文:http://datamapper.org/doku.php?id=why_datamapper - DataMapper は,他の O/R Mapper といくつかの点で異なる. Identity Map DB における 1 つの行は,1 つのオブジェクト参照と等しくなるべきである. とても単純…

DataMapper を使う

ActiveRecord はかなり便利な O/R mapper ですが,さらに上(?)がありました. DataMapper http://datamapper.org/ なお,このエントリは 0.9.11 をベースに書いています. このエントリの目次と他エントリへのリンク 概要 [関連するエントリ] Why DataMappe…

JSON の利用

例のごとく忘れないようにメモを残す. OS: ubuntu 8.04 ruby: 1.8.6 インストール sudo gem install json1.1.4 を選択. 使い方 require 'rubygems' require 'json' JSON.parse('{"a":123,"b":"hoge"}') # to Hash JSON.generate(:name => 'krdlab', :lang …

Web チャット?

Comet 勉強の続き (試しにチャットを作ってみましたという話). ShootingStar のコードを読む前に,WEBrick のコードを読んでみました. (呼び出し階層についてはこちら→ http://d.hatena.ne.jp/KrdLab/20090410 の下の方) WEBrick の HTTPServer では,クラ…

継続 (勉強中)

task で定義される一連の流れを中断し,別の処理を実行している.そして戻ってくる.また,別の処理へ値を渡したり,受け取ったりしている.(↓テストコードですのであしからず) def task v = 1 puts "step.1" # ↓ 継続を返し,返した先で継続が呼び出される…

ShootingStar

ruby で comet を利用した Web アプリを作成しようと思い,調べてみると,ShootingStar というコメット対応サーバがありました. (ちなみに,Java だと Tomcat6 で CometProcessor や CometEvent を使う) とりあえず動かす とりあえず,チュートリアルを.Ma…

WEBrick

Apache 使うほど本格的な開発でなかったり,実運用前の開発用としてサーバが欲しい場合,WEBrick がすごく便利ですね.Servlet だから取っ付きやすいし. require 'webrick' include WEBrick $DOC_ROOT = Dir.pwd class WbServlet < HTTPServlet::AbstractSe…

まねして勉強

最近になって ruby を使うようになりました.といっても週一ぐらいの頻度なのですが. を読んでいて,ActiveRecord 便利だなー,とか思いながら使ってました. そんな中で ruby の勉強がてら,マイグレーションのまねごとをしてみた次第です. 勉強は,既存…