読者です 読者をやめる 読者になる 読者になる

rdefsをRails仕様に拡張してみる

最近はRubygemsRSSを眺めて面白そうだなと思ったらインストールして軽く使い方とソースを眺めるというのがマイブームだったりするのですが、ソースを眺めるときに青木さんのrdefsは便利だなぁと思いました。

ただRailsとかだとcattr_readerとか色々拡張されているのでそれっぽいのをActiveSupportから調べてみました。(既に誰かやってそうな気もするけど。

--- bin/rdefs_orig      2006-09-12 23:29:24.000000000 +0900
+++ bin/rdefs   2006-09-10 16:55:17.000000000 +0900
@@ -7,10 +7,25 @@
 DEF_RE = /\A\s*(?:
     def\s | class\s | module\s | include[\s\(]
   | alias(?:_\w+)?
+  | alias_method(?:_\w+)?
   | attr_reader[\s\(]
   | attr_writer[\s\(]
   | attr_accessor[\s\(]
   | attr[\s\(]
+  | cattr_reader[\s\(]
+  | cattr_writer[\s\(]
+  | cattr_accessor[\s\(]
+  | mattr_reader[\s\(]
+  | mattr_writer[\s\(]
+  | mattr_accessor[\s\(]
+  | class_inheritable_reader[\s\(]
+  | class_inheritable_writer[\s\(]
+  | class_inheritable_array_writer[\s\(]
+  | class_inheritable_hash_writer[\s\(]
+  | class_inheritable_accessor[\s\(]
+  | class_inheritable_array[\s\(]
+  | class_inheritable_hash[\s\(]
+  | reset_inheritable_attributes
   | public[\s\(]
   | private[\s\(]
   | protected[\s\(]

何か抜けとか他にもこういうのも加えとくと良さそうとかあればコメントとかください。

cattr_readerなどは同様のことをしたいときのデフォルトになり得る気もするので、ActiveSupportの中身を再解体してCPANっぽくclass-attribute_accessorsとかclass-inheritable_attributesとかに分けて欲しいなと思いました。

さすがに

 require 'rubygems'
 require 'active_support/core_ext/class/attribute_accessors'

はめんどいと思ってしまう。(と思いつつ今打ってみたら案外めんどくさくなかった

まぁRuby使ってる人はたいていActiveSuportをインストールしてるのでActiveSupportに依存した方が可搬性は高いと思いますが。