Ramaze 0.3.5 がリリースされました

本日 Ramaze 0.3.5 がリリースされたようです。大変に目出度い事だと思います。なお、リリースアナウンスは次をご覧下さい。

Ramaze 0.3.5

次は0.3.1かと思っていたんですが、まぁ0.3.0から結構追加されたモノ多くなっちゃってますからね。そんなわけで何が新しくなったのかをまとめておきましょう。

開発体制と現状

0.3.0から62個のパッチが適用されたそうです。0.3.0 のリリース日が2008年1月10日ですから、マイナーバージョンアップとは言え、たった17日間でというのはなかなか勢い良く進化している証拠ではないでしょうか。貢献者リストも9人に増えましたが、その内 first patch な人は私も含めて四人というわけで、段々と注目が集まってきている気がします。

Core

  • Ramaze::Contrib::Route made available by default as Ramaze::Route (backwards compatibility retained)
  • Support added for ETag and If-Modified-Since in Dispatcher::File
  • Adapter for LiteSpeed webserver added
  • Added ability to set default session cookie options using Session::COOKIE
  • Support added for Content-Language based localization and gettext
http://groups.google.com/group/ramaze/browse_thread/thread/193a4374b46cbe30

まず一点目ですが、Ramaze::Contrib::Route は Ramaze::Route に移されて標準でロードされるようになりました。Ramaze::Route はリクエストされたパスのルーティングを滅法簡単に行なうものです。具体的に何をするものなのかは lib/ramaze/route.rb にある例を見れば簡単に分かるものと思います。

# regex ルーター
#   '/123.txt'  =>  '/text/123'
#   '/789.text' =>  '/text/789'

Ramaze::Route[ %r!^/(\d+)\.te?xt$! ] = "/text/%d"

# lambda ルーター
#   '/foo'        =>  '/foo'
#   '/foo?bar=1'  =>  '/bar'

Ramaze::Route[ 'name of route' ] = lambda{ |path, request|
  '/bar' if path == '/foo' and request[:bar] == '1'
}

二点目はファイルの送信時にETagやIf-Modified-Sinceヘッダを付けるようになったというものです。If-Modified-Sinceは私がいじったヤツだから何か間違ってたら御免なさい。

三点目は、HTTPサーバであるLiteSpeedのサポートが追加されたというもの。Rack使ってるからこういう対応は簡単で良いですね。LiteSpeedは試したことがないのでいずれ試してみたいと思います(でも個人的にはバイナリ配布なのが玉に瑕かも)。なお、adapter名は :lsws なのでご注意下さい。

四点目のは Ramaze::Session::COOKIE に色々セットしておくことができますよ、というもの。具体的な内容はパッチ見たら分かり易いと思います。

Add session cookie options to Session::COOKIE so default values can be modified using Ramaze::Session::COOKIE.merge!(:expires => 120.days.from_now)

五点目は私の送ったパッチです。Content-Languageヘッダをみて出力すべき言語を決定します。日本語を出力したい時には以下のような感じで。

class MainController < Ramaze::Controller
  trait :lang => nil
  def index
    response["Content-Language"] = "ja"
  end
end

Templates

  • Support added for passing in locals to render_template
  • Added support for symbol argument to template_root
  • render_template no longer requires template extensions
  • Dots allowed in template extensions (template.html.erb)
http://groups.google.com/group/ramaze/browse_thread/thread/193a4374b46cbe30

一点目は PartialHelper の render_template にローカル変数を渡せるようになったというものです。使い方は以下のような感じで。

render_template 'template.haml', :hoge => 'hage'

二点目は Ramaze::Controllerl.template_root の引数にシンボルを指定できるようになったという細かい修正です。引数pathにto_sしてるだけ。

template_root should take symbols as argument

三点目は render_template で指定するテンプレートに拡張子を付けなくても良くなったというもの。

四点目は template.html.erb のようなドットを含む拡張子のテンプレートを扱えるようになったというものです。例えば次にように使います。

class Ramaze::Template::Erubis
  ENGINES[self] = %w[ rhtml html.erb ]
end

Templating Engines

  • Builder templating engine added to produce XML
  • RedCloth templating engine added
  • Amrita2 templating engine updated to latest release
http://groups.google.com/group/ramaze/browse_thread/thread/193a4374b46cbe30

一点目は lib/ramaze/template/builder.rb のこと。

二点目はtextileが使いたくて仕方のなかった私のパッチです。

三点目は先日のAmrita2の正式リリースに追随したものです。これも私のパッチなので間違ってたり不便があったら御免なさい。

Helpers

  • Simple EmailHelper added
  • IdentityHelper updated for latest ruby-openid
  • MarukuHelper added
  • AuthHelper cleaned up
  • LinkHelper improved: A(), R(), Rs() and breadcrumbs
http://groups.google.com/group/ramaze/browse_thread/thread/193a4374b46cbe30

一点目はメール送信用の Ramaze::EmailHelper のこと。trait を色々設定してから使いましょう。でも多分日本語の事を考えていなかったりファイルを添付したり出来なかったりするだろう極めて素朴な実装です(嘘だったら御免なさい)。誰か改良してくれないかなぁ、と願っております。

二点目は ruby-openid ライブラリの変更に対応したそうです。IdentifyHelper というのは OpenID を使って認証するヘルパーのことです。使い方は examples/identity.rb をご覧下さい。基本的には helper :identity して openid_login_form でフォームをレンダリングするだけ。なんて簡単なんでしょう。

三点目は Maruku を使えるようにする MarukuHelper なんですけれども、require 'maruku'してないから動かないでしょコレ。テストも書いてないしさー。何故 templating engine にしないでヘルパーにしたのかもよく分からない。

四点目は ">" が落ちてたのを修正しただけ。と思って今確認してみたら、まだミスってるよ!うひょー。

五点目は A(), Rs() を R() の挙動に合わせたものです。

感想

おお、思ったより変更点がありました。こんな感じでRamazeさんは地味に地味に進化しておりますが、いかがでしょうか。御興味を持たれた方は是非ともRamazeさんを応援しましょう。

追記

現在 thin のテストが失敗します(というか停止して先に進まなくなるようです)。thin 0.6.1 に対応してないかも。要修正です。AuthHelperに対するパッチを投げようと思った矢先にまったくもう。