Rails1.2rc1 追加機能の斜め読み
Rails1.2rc1がでました。DHH氏がブログで概要を書いています。
http://weblog.rubyonrails.com/2006/11/23/rails-1-2-release-candidate-1
斜め読みした感じ、こんなことが書いてあった気がします。
RESTフレームワークの追加
RubyKaigiでもプレゼンしてたActiveResourceのことでしょうか?(違う?)
本来HTTPはCRUDだ、という考えに基づいているような感じだったかと。
多少理想的過ぎる感もあるけど、scaffoldもついてて便利だし、極度にシンプルだし今後広がっていくのかな。
respond_toの拡張子対応
respond_toという機能が1.1から追加されてました。Acceptフィールドを見てレンダリングするViewを切り替えるような機能だったと思います。1.2からは更に補強されて拡張子に対応したようです。
マルチバイト文字対応
今まではUnicodeで3バイト文字が混じったりすると文字列操作がうまく行かなかったのが直るようです。
ActiveSupport::Multibyteで実現されてるようですが、これをうまいこと拡張すれば様々なエンコーディングに対応できるようにしてあるようです。SJISとか必要なら勝手に拡張して作ってコミットして!という感じでしょうか。
今までまともに動く環境がUnicodeオンリーだったことを考えると、マルチバイト圏としてはかなり大きいかもしれない。
Routes周りの仕様変更
Routes周りは丸々書き直しているようです。確かにあの辺りはevalやり過ぎでアクロバティックだったし、セキュリティホールも出ちゃってたし。
その関係でピリオドとセミコロンがセパレータとして捉えられるように仕様変更があったみたいです。
routes.rbに「/download/:file」と書いても「/download/history.txt」にはマッチしなくなるみたいです。「:requirements => { :file => /.*/ }」を追加すれば行けるみたいです。地味ですが、routesでマジックをバリバリ書いてる場合は影響あることが多いかも。
Autoload周りの仕様変更
requireで明示的に宣言しないとRubyの標準ライブラリにアクセスできなくなったようです。(逆?)
また、モジュール使って「Accounting::Subscription」を呼ぼうとしても「app/models/accounting/subscription.rb」を見るんじゃなくて、「app/models/subscription.rb」を見に行くらしい。どうしてもサブフォルダ配下を見に行かせたい場合はenvironment.rbにaccountingディレクトリを個別に登録しなくちゃいけないみたい。
ちょっと使いづらくなった感もありますがこれもセキュリティ対策なんでしょうか。
(2006/12/5追記)
モジュール使って「Accounting::Subscription」を呼ぼうとした際に、今まではmodels配下のいずれかのサブディレクトリにsubscription.rbがあれば、とりあえずそれを見ていたようです。そこをちゃんとして、「models/accounting/subscription.rb」のみを見に行くようになった、と。
今までの仕様に依存しているアプリケーションがあったら、environment.rbに個別登録しなくてはならないようです。
影響は少ないかな??
ちなみに微妙に違う話ですが、10月頃にtrunkでcomponentsを動かしたときは従来通り「Accounting::Subscription」で「components/accounting/subscription.rb」を見てました。
Prototype周りの仕様変更
Formをシリアライズするときにdisabledなフィールドをポストしなくなるようです。これはRubricksにも影響ありそうだなぁ。地味にきつい。
というか、これってRailsのhelperとかじゃなくて、prototype.jsのFormクラスの仕様変更ですね。あと、Elementクラスとかの可変長APIが固定長になったりとかもあるらしいです。
ActionMailer周りの仕様変更
全てのMIMEがデフォルトでver1.0になったそうです。今までがどうだったのかを把握してないので、ほうそうですか、という感じです。
斜め読みなので内容はあまり信用しないで原文を読んでください。
おかしいところあったら教えてください。
(Shouta)