2010-11-01から1ヶ月間の記事一覧

メタプログラミングRuby 第9章 安全なメタプログラミング その3

危険なメタプログラミングを防ぐ話題は続きのほうにありました。今日は9.2 「モンキーパッチを防ぐ」からです オープンクラスを無制限に使うのでなく、モジュールを作って include する → ancestors に出る 動的メソッドを定義する時は先に同名のメソッドが…

メタプログラミングRuby 第9章 安全なメタプログラミング その2

ActionController のテストは一見普通のテストだけどその裏には……というところで終わったのでした。続き テスト テストにもメタプログラミングを駆使する そりゃそうだろうと思ってました テストする元のクラスを再オープンしていますが、こういうのでテスト…

メタプログラミングRuby 第9章 安全なメタプログラミング その1

メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る第9章ではメタプログラミングの落とし穴を避け…

メタプログラミングRuby 第8章 ActiveRecord の中身 その2

今日は ActiveRecord の動的ファインダのところです。 ActiveRecord::Base.find は find_by_ のように属性名を含むメソッドでの検索もできる and, or での連結などもできる 「ゴーストメソッド」で実装 長い ここでもやはり最初に method_missing でメソッド…

メタプログラミングRuby 第8章 ActiveRecord の中身 その1

メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る第8章では ActiveRecord の動的属性と動的ファ…

メタプログラミングRuby 第7章 ActiveRecord の設計 その2

今日は ActiveRecord::Base で使われているメタプログラミングの実際について。 autoload で require を遅延 Validations の included でサブモジュールを追加 include させる クラス拡張ミックスインで ActiveRecord::Base の特異クラスに Validations など…

メタプログラミングRuby 第7章 ActiveRecord の設計 その1

メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第2部「Rails におけるメタプログラミ…

メタプログラミングRuby 第5章 金曜日:コードを記述するコード その4

第5章 後半、フックメソッドのところからです。 フックメソッドとは inherited, included, method_added など何かイベントがあった時にインタプリタから自動的に呼ばれるメソッドのこと Merb の例 - included を使って Merb::Cache::CacheMixin が include …

メタプログラミングRuby 第5章 金曜日:コードを記述するコード その3

第5章、eval を使った実践編。 まずはクラスマクロ attr_checked ではなくカーネルメソッドとして add_checked_attr(klass, meth) のようなメソッドを定義(手順1) eval でべったりとクラスを開いてメソッド定義。これはかなりの力技 すぐに eval を使わずに …

メタプログラミングRuby 第5章 金曜日:コードを記述するコード その2

第5章前半、eval の説明がまだ続きます。 「???_eval にブロックを渡すのと文字列を渡すのは同じことだ」 - いつパース、コンパイルされるかは異なりますけどね それにブロックにするか文字列にするかで定数探索が異なる時期があったような……。今の 1.9 だと…

メタプログラミングRuby 第5章 金曜日:コードを記述するコード その1

メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第5章です。「コードを記述するコード…

メタプログラミングRuby 第4章 木曜日:クラス定義 その4

第4章の最後です。 クイズ: モジュールを include してクラスメソッドを定義しようとしてもできない クラスの特異クラスに include する それ extend でできるよ alias でオリジナルのメソッドを退避してラッパを書く手法。アラウンドエイリアスと呼ぶらしい…

メタプログラミングRuby 第4章 木曜日:クラス定義 その3

第4章の特異メソッドのところからです。 クラスメソッドは実は特異メソッドだったんだよ。な、なんだってー>ΩΩΩ とかやって欲しかった attr_reader とか attr_writer のようなメソッドをクラスマクロと言うらしい 「特異クラスはRuby界の UFO だ。実際に目…

メタプログラミングRuby 第4章 木曜日:クラス定義 その2

クラスのインスタンス変数とクラス変数 クラスもオブジェクトなので当然インスタンス変数を持てる クラス変数は継承で共有される クラス変数じゃなくてクラスのインスタンス変数を使うのがいまどきのメインストリームらしい クラスのインスタンス変数に利用…

メタプログラミングRuby 第4章 木曜日:クラス定義 その1

メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第4章です。ここには特異クラスの説明…