Haml の変更履歴
6.3.0
- Turbo のために v6.1.3 で追加された
Haml::RailsTemplate#default_format
を削除 #1152, #1154 (議論)- 推奨される代替案については、リファレンスを参照してください。
6.2.5
- Turbo のために v6.1.3 で追加された
Haml::RailsTemplate#default_format
を非推奨化 (議論)
6.2.4
- case-in 文をサポート #1155
6.2.3
- RDFa doctype のサポートを復活 #1147
6.2.2
Haml::BOOLEAN_ATTRIBUTES
にカスタム属性を追加できるようにする #1148aria-xxx: false
をブール属性とみなす
6.2.1
- 動的な
aria
属性のレンダリングにおける v6.2.0 のバグを修正 #1149
6.2.0
- C 拡張機能を削除 #1146
6.1.4
Haml::Util.escape_html
でERB::Escape
が利用可能な場合はそれを使用するようにする #1145
6.1.3
- Turbo 互換性のために
Haml::RailsTemplate#default_format
を追加 #1144
6.1.2
- Rails テンプレートのパスを
filename
として使用 #1140
6.1.1
- Ruby 3.1 のハッシュ短縮構文の空の出力を修正 #1083
6.1.0
=
スクリプトでのto_s
呼び出しを最適化して削除to_s
でhtml_safe
文字列を返すオブジェクトのエスケープを修正 #1117
6.0.12
>
およびif
-else
ステートメントでの空白削除を修正 #1114
6.0.11
>
およびif
ステートメントでの空白削除を修正 #1114
6.0.10
- Haml 5 のようにテンプレートコンテキストで :erb フィルターを評価
6.0.9
- sass-embedded をサポート #1112
6.0.8
- 6.0.0 から機能していなかった HTML コメントでの補間をサポート #1107
6.0.7
Haml::Engine
およびHaml::Template
は ArrayBuffer の代わりに StringBuffer を使用- 最近の Ruby バージョンでは、多くの場合、よりパフォーマンスが向上しているようです。
Haml::RailsTemplate
は影響を受けません。
6.0.6
- CRuby が Ruby 実装のフォールバックを誤って使用するのを防止
- v6.0.3 と v6.0.4 で行ったことを元に戻しますが、Wasm は引き続きサポートします。
6.0.5
- オブジェクト参照での
#haml_object_ref
のサポートを復活 #1097- これは 6.0.0 で削除され、このバージョンで再び追加されました。
remove_whitespace: true
オプションの警告を停止。
6.0.4
2022 年 10 月 2 日にリリース (差分)。
- 属性での
%
の解析失敗を修正 #1096 - Wasm 用に C から Ruby への別のフォールバックを追加。
6.0.3
2022 年 9 月 28 日にリリース (差分)。
- Wasm の場合、C 拡張機能が利用できない場合は Ruby にフォールバックします。
6.0.2
2022 年 9 月 28 日にリリース (差分)。
- Rails で
surround
、succeed
、およびprecede
の HTML セーフな引数のエスケープを解除 #1088
6.0.1
2022 年 9 月 23 日にリリース (差分)。
- Rails での HTML セーフな補間のエスケープを解除 #1084
- syntax_tree-haml 用に Haml 5 の
AttributeParser.available?
を復活 #1085
6.0.0
2022 年 9 月 21 日にリリース (差分)。
- 実装を Hamlit に置き換え
- Haml 6 は このベンチマーク で Haml 5 より約 1.7 倍高速です。
- パーサーはそのままですが、それ以外のすべてが置き換えられます。
haml
CLI インターフェースも置き換えられました。Haml::Engine
のインターフェースが変更されました。現在必要なのはHaml::Template
である可能性が高いです。- 以前:
Haml::Engine.new("%p Haml code!").render
- 以後:
Haml::Template.new { "%p Haml code!" }.render
- 以前:
- ほとんどの Haml ヘルパーが削除されました。
- Rails
- 維持:
find_and_reserve
、preserve
、surround
、precede
、succeed
、capture_haml
- 削除:
block_is_haml?
、flatten
、haml_concat
、haml_indent
、haml_tag
、haml_tag_if
、html_attrs
、html_escape
、init_haml_helpers
、is_haml?
、list_of
、non_haml
、tab_down
、tab_up
、with_tabs
- 維持:
- Tilt
- 維持:
preserve
- 削除:
block_is_haml?
、capture_haml
、escape_once
、find_and_preserve
、flatten
、haml_concat
、haml_indent
、haml_tag
、haml_tag_if
、html_attrs
、html_escape
、init_haml_helpers
、is_haml?
、list_of
、non_haml
、precede
、succeed
、surround
、tab_down
、tab_up
、with_tabs
- 維持:
:ruby
フィルター- 削除:
haml_io
- 削除:
- 削除されたヘルパーの代替
- いくつかの単純なものは、元の定義をコピーすることで機能する可能性があります。
- 一般的な HTML タグを生成するヘルパーについては、Rails の
content_tag
など、フレームワークが提供するものを使用することも検討してください。capture_haml
にも同じことが当てはまります (例: Rails のcapture
)。 Haml::Buffer
に依存するものは、設計上直接の代替手段がありません。それらはパフォーマンスを犠牲にして存在していました。ヘルパーを定義し、その中に String バッファーをインスタンス化し、そこに内容を追加して、=
内で呼び出す必要があります。
- Rails
- 次の属性と
aria
/data
属性のみがブール属性とみなされます。allowfullscreen
、async
、autobuffer
、autofocus
、autoplay
、checked
、controls
、default
、defer
、disabled
、download
、formnovalidate
、hidden
、inert
、ismap
、itemscope
、loop
、multiple
、muted
、novalidate
、open
、pubdate
、readonly
、required
、reversed
、scoped
、seamless
、selected
、sortable
、truespeed
、typemustmatch
data
およびaria
属性のみが、ネストされたハッシュを使用してハイフン付き属性をレンダリングすることをサポートします。たとえば、data: { foo: 'bar' }
はdata-foo="bar"
になりますが、これはdata
/aria
以外の属性では機能しなくなります。- いくつかのレガシー Rails 統合が削除されました。
escape_html
オプションのデフォルト値が true になりました。-
スクリプト行はキャプチャをサポートしなくなりました。ネストされたブロックを生成するには、=
行のみがサポートされています。- 同じ名前を持つ別の falsey
data-*
属性でdata
属性を上書きすることは、サポートされなくなりました。 #1105 - :erb フィルターはテンプレートコンテキストで実行されません (6.0.10 で修正)。
5.2.2
2021 年 7 月 27 日にリリース (差分)。
- Rails 6.1 の
config.action_view.annotate_rendered_view_with_filenames = true
をサポート
5.2.1
2020 年 11 月 30 日にリリース (差分)。
- 属性の「複数行」サポートを改善して追加 #1043
5.2
2020 年 9 月 28 日にリリース (差分)。
- TrueClass/FalseClass で
#inspect
がオーバーライドされている場合に、属性オプティマイザーでクラッシュする問題を修正 #972 - プレーンテキストとして宣言されているテンプレートを HTML エスケープしない #1014 (ありがとうございます @cesarizu)
- クラス名はアルファベット順に並べられなくなり、REFERENCE で規定されている新しい仕様に従うようになりました #306
5.1.2
2019 年 8 月 6 日にリリース (差分)。
5.1.1
2019 年 5 月 25 日にリリース (差分)。
- ruby 2.6.1-2.6.3 + haml 5.1.0 + rails < 5.1 + erubi で発生する NameError バグを修正。(Akira Matsuda)
5.1.0
2019 年 5 月 16 日にリリース (差分)。
- Rails 6 のサポート #1008 (ありがとうございます Seb Jacobs)
- haml 4 のデフォルトとの後方互換性のために
escape_filter_interpolations
オプションを追加 #984 (ありがとうございます Will Jordan) - 空の :javascript および :css フィルターブロックでのエラーを修正 #986 (ありがとうございます Will Jordan)
Haml::TempleEngine
オプションでHaml::Options.defaults
の変更を尊重 (Takashi Kokubun)- TempleEngine のコンパイル済み文字列リテラルをフリーズ解除 #983 (ありがとうございます Will Jordan)
- パフォーマンス/メモリのさまざまな改善 #965、#966、#963 (ありがとうございます Dillon Welch)
- すべての .rb ファイルで
frozen_string_literal
マジックコメントを有効化 #967 (ありがとうございます Dillon Welch)
5.0.4
2017 年 10 月 13 日にリリース (差分)。
- 5.0.2 での
haml -c --stdin
のリグレッションを修正。 #958 (ありがとうございます Timo Göllner) - Ruby 2.5 のサポート (Ripper API の変更により機能していませんでした)。(Akira Matsuda)
5.0.3
2017 年 9 月 7 日にリリース (差分)。
- 文字列リテラルを生成するために
String#inspect
の代わりにString#dump
を使用します。(Takashi Kokubun) - Erubi のスーパークラスの不一致エラーを修正。 #952 (ありがとうございます Robin Daugherty)
5.0.2
2017 年 8 月 1 日にリリース (差分)。
- 生成された Ruby コードが構文エラーの場合、
haml -c
を失敗させる。 #880 (Takashi Kokubun) - Sprockets 3 および :sass フィルターで発生する
NoMethodError
バグを修正。 #930 (ありがとうございます Gonzalez Maximiliano) - 複数行の内容を持つ
list_of
ヘルパーを修正。 #933 (ありがとうございます Benoit Larroque) - テキストエリアを修正するタイミングを変更することで、レンダリングパフォーマンスを最適化。 #941 (Takashi Kokubun)
- 空の :ruby フィルターで
TypeError
を修正。 #942 (Takashi Kokubun) - 属性のソート順序の不整合を修正。(Takashi Kokubun)
5.0.1
2017 年 5 月 3 日にリリース (差分)。
- 文字列補間を含む属性の解析を修正。 #917 #921
- gem パッケージでのテストファイルの配布を停止し、Windows でのインストールを許可します。
- ActionView でのみ、erb フィルターに ActionView の Erubi/Erubis ハンドラーを使用します。 #914
5.0.0
2017 年 4 月 26 日にリリース (差分)。
破壊的な変更
- Haml は Ruby 2.0.0 以上を必要とするようになりました。
- Rails 3 は公式の Ruby on Rails のメンテナンスポリシーに合わせてサポートされなくなりました。Rails 3 を使用したい場合は、Haml 4 を使用してください。(Tee Parham)
:ugly
オプションを削除 (#894)haml
コマンドのデバッグオプション (-d
) は Haml コードを実行するのではなく、生成された Ruby 構文のエラーをチェックするようになりました。Haml::Engine
からパーサー/コンパイラアクセサーを削除します。代わりに、Haml::Engine#initialize
オプションまたはHaml::Template.options
を変更してください。(Takashi Kokubun)- 動的な引用符のサポートを削除し、
escape_html
/escape_attrs
の場合は常に'
をエスケープします。また、エスケープされた結果はわずかに変更され、常に同じ文字に統一されます。(Takashi Kokubun) - 属性内の改行を保持しないでください。(Takashi Kokubun)
-
フィルター内の補間されたコードを HTML エスケープします。 #770 (Matt Wildig)
:javascript #{JSON.generate(foo: "bar")} Haml 4 output: {"foo":"bar"} Haml 5 output: {"foo":"bar"}
追加
- トレースオプションを追加します。有効にすると、Haml は生成元の Haml ソースファイルへのパスを示す data-trace 属性を各タグに出力します。ありがとうございます Alex Babkin。
- 別の要素で条件付きでラップされたブロックをレンダリングするために
haml_tag_if
を追加 (Matt Wildig) - Rails 5.1 Erubiテンプレートハンドラーをサポート。
- Sprockets 3をサポート。 Sam DaviesとJeremy Veneziaに感謝します。
- 全体的なパフォーマンスとメモリ使用量の改善。(Akira Matsuda)
- Ripperで属性値を解析し、静的な属性を事前にレンダリングします。(Takashi Kokubun)
- 属性のレンダリングを約3倍高速化。(Takashi Kokubun)
- temple gemを依存関係として追加し、
Haml::TempleEngine
クラスを作成。Haml::Compiler
の一部のメソッドをHaml::TempleEngine
に移行。(Takashi Kokubun)
修正済み
- 属性のマージに関する修正。古いスタイルの属性ハッシュで属性メソッド(またはリテラルのネストされたハッシュ)が使用され、さらに(非静的な)新しいスタイルのハッシュがある場合にエラーが発生する問題を修正。この修正により、特定の状況で異なる動作をする可能性があります。詳細については、コミットメッセージを参照してください。(Matt Wildig)
- escape_onceが16進数参照を尊重するように修正。(Matt Wildig)
- 属性ハッシュをマージする際に、「data」属性を特別扱いしないように修正。(Matt Wildig and Norman Clarke)
- html_safeモードで動作していなかった#@fooおよび#$fooスタイルの補間を修正。(Akira Matsuda)
- タグのクラス名として
@
を使用できるように修正。Joe Bartlettに感謝します。 - 属性名に無効な文字が含まれている場合に
Haml::InvalidAttributeNameError
を発生させるように修正。(Takashi Kokubun) ActionView::OutputBuffer
の初期化時に予期しない例外を無視しないように修正。(Takashi Kokubun)
4.0.7
2015年8月10日にリリース(差分)。
- textareaの空白処理を修正するために使用される正規表現のパフォーマンスを大幅に改善(Stan Huに感謝します)。
4.0.6
2014年12月1日にリリース(差分)。
- Ruby 1.8.7での「regexp has invalid interval」警告を修正(Elia Schitoに感謝します)。
4.0.5
2014年1月7日にリリース(差分)。
- haml_concatがhaml_tagの呼び出し後にエスケープされていないHTMLを追加する問題を修正。
- HAMLの:uglyオプションが「true」の場合、ActionView::Helpers::CaptureHelper::captureが何も返さないブロックを渡されたときに、ビューバッファ全体を返すバグを修正(Mircea Moiseに感謝します)。
4.0.4
2013年11月5日にリリース(差分)。
- RailsではなくRails::Railtieを確認するように修正(Konstantin Shabanovに感謝します)。
- suppress_evalでリテラルの「#」を使用できるようにパーサーを修正。(Matt Wildig)
- Helpers#escape_onceがフリーズされた文字列で動作するように修正(Railsで置き換えとして機能するERB::Util.html_escape_onceと同様)。(Patrik Metzmacherに感謝します)。
- マイナーなテストの修正(Mircea Moiseに感謝します)。
4.0.3
2013年5月21日にリリース(差分)。
- 新しいバージョンのRailsのErubisハンドラーとの互換性。
- Tilt 1.4.xとの互換性のためにErubisハンドラーを修正。
- html_escapeの小さなパフォーマンス最適化。(Lachlan Sylvesterに感謝します)
- ドキュメントの修正。
- リファレンスから除外されていた一部のヘルパーメソッドをドキュメント化。(Shane Rileyに感謝します)
4.0.2
2013年4月5日にリリース(差分)。
- 古いバージョンのTiltのバグを回避するためにErubisを明示的にrequireするように修正。
- Railsビューで:erbフィルターが重複したコンテンツを出力する問題を修正。(Jori Hardmanに感謝します)
capture_haml
によって作成されるオブジェクトを減らすために範囲をスライスに置き換えました。(Tieg Zahariaに感謝します)- 一部のドキュメントを修正/改善。
4.0.1
2013年3月21日にリリース(差分)。
- より一般的なソリューションを優先して、Rails 3.2.3+ textareaハックを削除。
- 一部のパフォーマンスの低下を修正。
- Rails 4の
text_area
ヘルパーメソッドのサポートを修正。 - シングルトンオブジェクトでのデータ属性の平坦化を修正。(Alisdair McDiarmidに感謝します)
- sass-rails 4.0 betaのサポートを修正。(Ryunosuke SATOに感謝します)
- Railsイニシャライザーで設定されたユーザーオプションが上書きされないように、Railtieで「haml/template」をロード
- HamlをActionViewで使用できるようにするために、haml/templateでRailsに依存しないように修正。(Hunter Haydelに感謝します)
4.0.0
-
Haml実行可能ファイルが
--autoclose
オプションを受け付けるようになりました。自動的に閉じられるタグのリストを指定できます。 -
:ruby
フィルターは、スレッドセーフではないため、Hamlドキュメントに$stdoutをリダイレクトしなくなりました。代わりに、ドキュメントに書き込むIOオブジェクトであるhaml_io
ローカル変数を提供します。 -
HTML5が、XHTMLではなくデフォルトの出力形式になりました。これはすでにRails 3以上ではデフォルトであったため、多くのユーザーは違いに気づかないでしょう。
-
:sassフィルターは、新しい:lessおよび:scssフィルターと同様に、その出力をstyleタグでラップするようになりました。:coffeeフィルターは、その出力をscriptタグでラップします。
-
Hamlは、Rails 3以上およびRuby 1.8.7以上のみをサポートするようになりました。Rails 2とRuby 1.8.6のサポートが必要な場合は、バグ修正のためにメンテナンスが続けられるHaml 3.1.xを使用してください。
-
:javascriptおよび:cssフィルターは、形式がhtml4またはhtml5の場合、CDATAタグを追加しなくなりました。これは、
cdata
オプションをtrue
に設定することで上書きできます。CDATAタグは、形式がxhtmlの場合に常に付与されます。 -
HTML2Hamlは、創造的に「html2haml」と名付けられた別のgemに抽出されました。
-
:erb
フィルターは、XSSの安全性を確保するためにRailsの安全な出力バッファを使用するようになりました。 -
Hamlの内部がリファクタリングされ、パーサー、コンパイラー、オプション処理をすべてEngineモジュールに含めるのではなく、独立したクラスに移動しました。Hamlを拡張または比較的簡単に変更するために、Haml::Optionsで独自のカスタムHamlパーサーまたはコンパイラークラスを指定することもできます。
-
:hyphenate_data_attrs
オプションを追加しました。これは、HTML5データキーのアンダースコアをハイフンに変換します。これは3.1からの言語変更であり、デフォルトで有効になっています。(Andrew Smithに感謝します) -
すべてのハッシュ属性値は、キーに関係なく、HTML5データとして扱われるようになりました。以前は「data」キーのみがこのように扱われていました。任意のキーを許可することで、他の用途の中でも、Aria属性にこの機能を簡単に使用できるようになりました。(Elvin Efendiに感謝します)
-
Hamlタグの周りのすべての空白を常に削除する
remove_whitespace
オプションを追加しました。(Tim van der Horstに感謝します) -
Hamlは、深くネストされたデータ属性ハッシュを平坦化するようになりました。例えば
.foo{:data => {:a => "b", :c => {:d => "e", :f => "g"}}}
は以下のようにレンダリングされます
<div class='foo' data-a='b' data-c-d='e' data-c-f='g'></div>
(Péter Pál Kosztaに感謝します)
-
サードパーティのテンプレートエンジンに依存するフィルターは、Tiltを使用して実装されるようになりました。いくつかの新しいフィルター、つまりSCSS(:scss)、LessCSS、(:less)、およびCoffeescript(:coffee/:coffeescript)が追加されました。
「公式」フィルターのリストは意図的に小さく保たれていますが、Hamlには、他のTiltベースのテンプレートエンジンのサポートを簡単に加えることができるヘルパーメソッドが付属しています。
4.0以降、Hamlには、Nokogiri、Yajl、Markabyなどの有用ではあるが使用頻度の低いフィルターとヘルパーを含む「haml-contrib」gemも同梱されます。
-
#id
よりも優先して、#to_key
が存在する場合は、それに基づいてオブジェクト参照を生成します。 -
パフォーマンスの改善。(Chris Healdに感謝します)
-
ヘルパー
list_of
は、リスト項目の属性にレンダリングされる追加の引数を取ります。(Iain Barnettに感謝します) -
some_method?
で終わる行がRubyの複数行になるようにパーサーを修正しました。(Brad Edigerに感謝します) -
レンダリングされたテンプレートのmime_typeが「text/xml」の場合は、常に:xhtml形式を使用します。(Stephen Bannaschに感謝します)
-
html2hamlに
--html-attributes
オプションが含まれるようになりました。(Stefan Natchevに感謝します) -
ループでの内部空白の削除を修正。(Richard Michaelに感謝します)
-
属性内で二重引用符とアポストロフィをエスケープする際に、HTMLエンティティではなく数値文字参照を使用するように修正。これにより、Internet Explorer 9より前のバージョンで発生する一部のバグを回避できます。(Doug Mayerに感謝します)
-
複数行のサイレントコメントを修正:Hamlでは以前は、複数行のサイレントコメント内で自由なインデントを許可していませんでした。
-
Railsでの部分レイアウトの順序に関するバグを修正。(Sam Pohlenzに感謝します)
-
スクリプト評価を抑制するコマンドラインオプションを追加。
-
SassおよびSCSSフィルター内でRailsのアセットヘルパーを使用できるようになりました。そのためには、通常、assets gemグループから移動して、sass-railsが本番環境でロードされていることを確認する必要があります。
-
Hamlプロジェクトは、セマンティックバージョニングを使用するようになりました。
3.2.0
Haml 3.2シリーズは3.2.0.rc.4までしかリリースされませんでしたが、プロジェクトがセマンティックバージョニングを採用したときにHaml 4.0に名前が変更されました。
3.1.8
- ネストされたブロックで例外から報告された行番号に関する修正(Grant Hutchins&Sabrina Staedtに感謝します)。
3.1.7
- Sass 3.2.xとの互換性に関する修正。(Michael Westbomに感謝します)。
3.1.6
- インデントモードでは、保存されたタグを含むバッファを再インデントしないでください。また、Rails 3.2.3のtextareaヘルパーに対するより良い回避策を提供します。
3.1.5
-
属性値をエスケープするときにRailsの
html_safe
フラグを尊重します(Gerad Suyderhoudに感謝します)。 -
Rails 3.2.3 textareaヘルパーの修正(James Colemanらに感謝します)。
3.1.4
- Hamlのラベル付き
FormBuilder#block
の使用を修正。 - 動的属性を持つ自己終了タグの後のインデントを修正。
3.1.3
- 部分レイアウトが2回表示されないように修正。
3.1.2
-
ActionView
#capture
ヘルパーがHamlテンプレートで使用されているが、ブロック内でHamlが実行されていない場合、キャプチャされたバッファではなく、ブロックの値を返すように修正。 -
コメント内にテキストがネストされているときにエラーをスローしないように修正。
-
html2hamlを修正。
-
場合によってはRails SafeBuffersで破壊的な変更が実行される問題を修正。
-
名前付き/キーワードエンティティではなく、属性値の置換に文字コードエンティティを使用します。
3.1.1
- ベンダーのSassをバージョン3.1.0に更新します。
3.1.0
-
:format
が:html5
に設定されている場合、フィルターによって生成された<script>
および<style>
タグにtype
属性を追加しないように修正。 -
:escape_attrs
オプションを追加しました。これにより、属性がエスケープされないまま(HamlにPHPディレクティブを埋め込むなど)にしたり、#escape_once
されるのではなく常にエスケープしたりできるように修正。これは、コマンドラインから--no-escape-attrs
を使用して使用することもできます。 -
コマンドラインからカスタムフィルターをロードできるように修正。
後方互換性がない変更点 - 必ずお読みください!
-
haml
実行可能ファイルの--rails
フラグを削除。このフラグはRails 2.0以降必要ありません。既存のRails 2.0インストールは引き続き動作します。 -
Hpricot 0.7のサポートを終了。0.8はほぼ2年間リリースされています。
3.0.25
- Hpricotが
haml/html
の前にロードされている場合でも、HTMLからHamlへの変換がRuby内で動作するように修正。
3.0.24
-
html2haml
が、ブロック内にネストされたサイレントスクリプト式に対してHamlを正しく生成するようになりました。 -
IronRubyの互換性。これは一種のハックです。IronRubyはバージョンを1.9と報告しますが、エンコーディングAPIをサポートしていないため、代わりに1.8として扱います。
3.0.23
-
Ruby 1.9.2で実行可能ファイルを実行するときに、ロードできないモジュールのエラーメッセージを修正しました。
-
古いスタイルと新しいスタイルの属性を組み合わせるときのエラーを修正。
3.0.22
-
case
の後、when
の前に空行を許可。 -
vendor/sass
を削除しました。これは誤ってgemに紛れ込んでおり、Herokuユーザーに問題を引き起こしていました(Jacques Crockerに感謝します)。 -
Rails 3.1テンプレートハンドラーAPIをサポートします。
3.0.21
- パーミッションエラーを完全に修正。
3.0.20
- 一部のパーミッションエラーを修正。
3.0.19
-
Ruby 1.9.2での
:encoding
オプションを修正。 -
HTMLエスケープが有効になっているときの補間されたifステートメントを修正。
-
--unix-newlines
フラグがUnixで動作するように修正しました。Unixではこれは何もしません。
3.0.18
-
JRuby環境下でのbundlerとの互換性のために、gemspec内で
rake
を必須としないようにしました。 Gordon McCreight氏に感謝します。 -
インストール時の煩わしいRDocエラーを解消しました。
-
haml-rails
がインストールされている場合に、Rails
モジュールへの参照を明確化しました。 -
haml_tag
のバグを修正し、重複した属性が追加されたり、data-
属性が機能しなくなる問題を解決しました。 -
Rails 3の最終版との互換性。
3.0.17
- mingwをWindowsとしてカウントするようにしました。
3.0.16
-
html2hamlのERB解析バグを修正し、ERBブロックがHamlでインデントなしで残ることがあった問題を解決しました。
-
変数に値が代入された
if
文とcase
文の解析を修正しました。ただし、これは依然として悪いスタイルです。 -
ヘルパー内で文字列を返すブロックが渡された場合の
form_for
とform_tag
を修正しました。
3.0.15
バージョン3.0.14と3.0.15の間で、Hamlには変更はありませんでした。
3.0.14
-
CSSスタイルのクラスとIDにコロンを含めることを許可しました。
-
if文に関する不明瞭なバグを修正しました。
Rails 3のサポート
- Rails 3で提供されなくなった
#returning
メソッドを使用しないようにしました。
3.0.13
Rails 3のサポート
Rails 3 beta 4より前のバージョンに対するサポートは削除されました。まだアップグレードしていない場合は、Rails 3.0.0.beta4にアップグレードしてください。
小さな改善点
- エンコーディング宣言を含むフリーズされた文字列を適切に処理するようにしました。
3.0.12
Rails 3のサポート
どうやら、前のバージョンは、特定のgemの組み合わせによる一貫性のないロード順序のために、Rails 3で新しいエキサイティングな方法で壊れていたようです。3.0.12では、その不整合を回避し、完全にRails 3と互換性があるはずです。
非推奨: Rails 3 Beta 3
Rails 3.0.0.beta.3に対するHamlのサポートは非推奨となりました。Haml 3.0.13は3.0.0.beta.4のみをサポートします。
3.0.11
3.0.10
Appengine-JRubyのサポート
Hamlインストールの場所を決定する方法が、appengine-jruby
で使用されるJRubyのバージョンを壊さないようにしました。
バグ修正
- 単一行のコメントが
html2haml
で正しく処理されるようになりました。
3.0.9
バージョン3.0.8と3.0.9の間で、Hamlには変更はありませんでした。Gemcutterのバグにより、gemが正しくアップロードされませんでした。
3.0.8
- Rails 3より前のRailsバージョンに関するバグを修正しました。
3.0.7
エンコーディングのサポート
Haml 3.0.7では、テンプレートのエンコーディングを宣言するためのRubyスタイルの-# coding:
コメントのサポートが追加されました。詳細については、リファレンスを参照してください。
また、:encoding
オプションが設定されていない場合、Hamlの動作がわずかに変更されました。デフォルトで"utf-8"
とするのではなく、ソースドキュメントのエンコーディングをデフォルトとし、このエンコーディングが"us-ascii"
の場合にのみ"utf-8"
に戻るようにしました。
haml
実行可能ファイルも、エンコーディングを指定するための-E
オプションを受け入れるようになりました。これはRubyの-E
オプションと同じように機能します。
その他の変更
- Rails 3で実行する場合は、デフォルトで
:html5
形式を使用するようにしました。これは、Rails 3もデフォルトでHTML5を使用するためです。
バグ修正
<span>foo</span>
のようなものをHaml用に生成する場合は、- succeed
(機能しない)ではなく= succeed
を使用するようにしました。
3.0.6
Rails 2.3.7のサポート
このリリースでは、Rails 2.3.7を完全にサポートしています。
Rails 2.3.6のサポートを削除
Rails 2.3.6は、XSS保護とHamlとのインターフェースに関連するさまざまなバグを抱えてリリースされました。これらのバグに対する修正を含むRails 2.3.7が直後にリリースされました。したがって、HamlはRails 2.3.6をサポートしなくなり、それを使用している場合は2.3.7にアップグレードする必要があります。
Rails 2.3.6でHamlを使用しようとすると、エラーが発生します。
3.0.5
Rails 2.3.6のサポート
このリリースでは、Rails 2.3.6のさまざまなバグを回避し、Hamlを完全な互換性を持たせました。
Rails 3のサポート
Rails 3の#capture
ヘルパーが、その値をテンプレートに直接出力しないようにしました。
3.0.4
バージョン3.0.3と3.0.4の間で、Hamlには変更はありませんでした。
3.0.3
Rails 3のサポート
Railsのロードエラーをデバッグしやすくするために、Sassのロード時にRails.root
がnil
の場合にエラーが発生するようにしました。以前は、これによりパスが誤って設定されるだけでした。
3.0.2
バージョン3.0.1と3.0.2の間で、Hamlには変更はありませんでした。
3.0.1
Railsへのインストール
RailsにHamlをインストールするためにhaml --rails
は不要になりました。Rails 3の場合はGemfileにgem "haml"
を追加するだけで済み、以前のバージョンの場合はconfig/environment.rb
にconfig.gem "haml"
を追加するだけで済みます。
haml --rails
は引き続き機能しますが、非推奨となりエラーメッセージが表示されます。Hamlの次のバージョンでは機能しません。
Railsのテスト速度
テストの実行速度を向上させるために、Railsのテスト環境では:ugly
オプションがデフォルトでオンになりました。
3.0.0
後方互換性がない点: 必ず読んでください!
puts
ヘルパーが削除されました。代わりにHaml::Helpers#haml_concatを使用してください。
より便利な複数行
最後の行を除いて、各行がカンマで終わる限り、Rubyコードを複数行にわたってラップできるようになりました。たとえば
= link_to_remote "Add to cart",
:url => { :action => "add", :id => product.id },
:update => { :success => "cart", :failure => "error" }
haml_tag
とhaml_concat
の改善
CSSセレクタを使用するhaml_tag
haml_tagヘルパーは、標準のHamlコードと同じクラス/IDの省略形を使用した文字列を受け入れることができるようになりました。手動で指定されたクラスとIDの属性は、標準のHamlコードと同様にマージされます。たとえば
haml_tag('#foo') #=> <div id='foo' />
haml_tag('.bar') #=> <div class='bar' />
haml_tag('span#foo.bar') #=> <span class='bar' id='foo' />
haml_tag('span#foo.bar', :class => 'abc') #=> <span class='abc bar' id='foo' />
haml_tag('span#foo.bar', :id => 'abc') #=> <span class='bar' id='abc_foo' />
乾杯、S. Burkhard。
複数行のコンテンツを持つhaml_tag
haml_tagヘルパーは、複数行のコンテンツを持つタグのフォーマットもより適切に行うようになりました。タグに複数のレベルのコンテンツがある場合、そのコンテンツはタグの下にインデントされます。たとえば
haml_tag(:p, "foo\nbar") #=>
# <p>
# foo
# bar
# </p>
複数行のコンテンツを持つhaml_tag
同様に、haml_concatヘルパーは、複数行のコンテンツを適切にインデントします。たとえば
haml_tag(:p) {haml_concat "foo\nbar"} #=>
# <p>
# foo
# bar
# </p>
:ugly
を使用するhaml_tag
とhaml_concat
:ugly
オプションが有効になっている場合、haml_tagとhaml_concatは引数のインデントを行いません。
基本タグの改善
-
オブジェクトに
haml_object_ref
メソッドを実装することにより、特定のオブジェクトのオブジェクト参照に使用される名前をカスタマイズできるようになりました。このメソッドは、生成されたクラスとIDでオブジェクトのクラス名の代わりに使用される文字列を返す必要があります。 Tim Carey-Smith氏に感謝します。 -
すべての属性値は、文字列以外の型でもかまいません。それらの
#to_s
メソッドが呼び出され、文字列に変換されます。以前は、これはclass
以外の属性でのみ機能していました。
:class
と:id
属性がRuby配列を受け入れる
属性ハッシュでは、:class
属性は、要素が文字列に変換されて結合される配列を受け入れるようになりました。:id
属性は、要素が文字列に変換されて"_"
で結合される配列を受け入れるようになりました。配列は最初にフラット化され、trueと評価されない要素はすべて取り除かれます。たとえば
.column{:class => [@item.type, @item == @sortcol && [:sort, @sortdir]] }
は、次のいずれかとしてレンダリングできます。
class="column numeric sort ascending"
class="column numeric"
class="column sort descending"
class="column"
@item.type
が"numeric"
かnil
か、@item == @sortcol
かどうか、@sortdir
が"ascending"
か"descending"
かによって異なります。
単一の値も指定できます。その値がfalseと評価された場合は無視されます。それ以外の場合は文字列に変換されます。たとえば
.item{:class => @item.is_empty? && "empty"}
は、次のいずれかとしてレンダリングできます。
class="item"
class="item empty"
Ronen Barzel氏に感謝します。
HTML5カスタムデータ属性
ハッシュ値を持つ:data
という名前の属性を作成すると、HTML5カスタムデータ属性が生成されます。たとえば
%div{:data => {:author_id => 123, :post_id => 234}}
は、次のようにコンパイルされます。
<div data-author_id='123' data-post_id='234'></div>
John Reilly氏に感謝します。
より強力な:autoclose
オプション
:attributes
オプションは、自己終了させるタグを指定する正規表現を受け入れることができるようになりました。
--double-quote-attributes
オプション
Haml実行可能ファイルには、属性にシングルクォートではなくダブルクォートを使用させる--double-quote-attributes
オプション(短縮形: -q
)が追加されました。 Charles Roper氏に感謝します。
:css
フィルター
Hamlは、フィルター処理されたテキストを<style>
とCDATAタグで囲む:css
フィルターをサポートするようになりました。
haml-spec
統合
多くのさまざまなHaml実装の基本機能との互換性を維持するために、haml-specプロジェクトからのクロス実装テストを標準のHamlテストスイートに追加しました。
Ruby 1.9のサポート
-
Hamlと
html2haml
は、テンプレートのエンコーディングに無効なバイトシーケンスを含むテンプレートが与えられた場合に、行番号と問題のある文字を含む、より説明的なエラーを生成するようになりました。 -
Hamlと
html2haml
は、バイトオーダーマークを持つUnicodeドキュメントを受け入れるようになりました。
Railsのサポート
form_for
が=
で使用されている場合、またはform_tag
が=
とブロックで使用されている場合、それらは-
で使用する必要があることを説明するエラーを発生するようになりました。これはHaml::Helpers#haml_concatの動作に似ており、一部のユーザーにとっていくつかの難しいバグを解消することを願っています。
Ripのサポート
Hamlは、Ripパッケージ管理システムと互換性があるようになりました。 Josh Peek氏に感謝します。
html2haml
の改善
-
ERB内のRubyブロックがサポートされるようになりました。Hamlコードは適切にインデントされ、
end
が削除されます。これには、ブロックを持つメソッドや、if
、begin
、case
などのすべての言語構造が含まれます。たとえば<% content_for :footer do %> <p>Hi there!</p> <% end %>
は、次のように変換されます。
- content_for :footer do %p Hi there!
このアイデアを思いつき、コードの最初の草案を作成してくれたJack Chen氏とDr. Nic Williams氏に感謝します。
-
インラインHTMLテキストノードがインラインHamlテキストに変換されるようになりました。たとえば、
<p>foo</p>
は%p foo
になり、以前は次のようになっていました。%p foo
インラインコメント、およびERBモードで実行中のインラインERBについても同様です。
<p><%= foo %></p>
は%p= foo
になります。 -
テキストに含まれるERBは、Ruby補間として変換されるようになりました。たとえば
<p> Foo <%= bar %> baz! Flip <%= bang %>. </p>
は、次のように変換されます。
%p Foo #{bar} baz! Flip #{bang}.
-
<script>
タグが:javascript
フィルターに、<style>
タグが:css
フィルターに変換されるようになりました。また、インデントが保持されます。たとえば<script type="text/javascript"> function foo() { return 12; } </script>
は、次のように変換されます。
:javascript function foo() { return 12; }
-
<pre>
タグと<textarea>
タグが:preserve
フィルターに変換されるようになりました。たとえば<pre>Foo bar baz</pre>
は、次のように変換されます。
%pre :preserve Foo bar baz
-
自己終了タグ(
<br />
など)が、自己終了Hamlタグ(%br/
など)に変換されるようになりました。 -
IE条件付きコメントが正しく解析されるようになりました。
-
属性が、中括弧内にスペースがない、より標準的な形式で出力されるようになりました(例:
%p{:foo => "bar"}
、%p{ :foo => "bar" }
の代わりに)。 -
#
と.
を含むIDとクラスが、文字列属性として出力されるようになりました(例:%p{:class => "foo.bar"}
)。 -
属性は、決定論的な順序を維持するためにソートされるようになりました。
-
インラインフォーマットを使用する場合、必要に応じて
>
または#succeedが挿入されます。 -
複数行のERBステートメントが適切にインデントされるようになり、コンテンツのないものは削除されます。
小さな改善点
-
:ugly
を使用する場合、capture_hamlが高速になりました。 Alf Mikula氏に感謝します。 -
RDFa
ドキュメントタイプのショートカットを追加します。
2.2.24
-
ActiveModelフォーム要素にエラーフォーマットが適用されるのを妨げないようにしました。
-
Rails 3.0.0.beta.3で、
form_for
ブロックが適切にインデントされるようにしました。 -
Rails 3.0.0.beta.3で、
dynamic_form
プラグインのバグをアクティブにしないようにしました。これにより、そのメソッドがロードされなくなります。
2.2.23
-
Hamlがインストールされた状態でRailsで
rake gems
が実行されたときにクラッシュしないようにしました。 Florian Frank氏に感謝します。 -
補間を含むフィルターで
\n
を削除しないようにしました。 -
あの煩わしい
"regexp match /.../n against to UTF-8 string"
警告を抑制しました。
2.2.22
-
Railtieを追加して、HamlとSassがRails 3で自動的にロードされるようにしました。 Daniel Neighman氏に感謝します。
-
Rails 3で文字列を返す
form_for
のようなメソッドで-
を使用した場合に非推奨メッセージを追加します。これは、Rails 3に存在するのと同じ非推奨です。 -
フィルターが使用されている場合、行番号が正しく報告されるようにします。
-
Herokuのような読み取り専用ファイルシステムでgemspecのロードがクラッシュしないようにします。
-
例えばRails 3ベータ版で、
form_for
のようなメソッドがnil
を返した場合にクラッシュしないようにします。 -
Rails 3ベータ版のRJS機能との互換性。
2.2.21
-
Haml::Versionにおけるgitリビジョンレポートのいくつかのバグを修正します。特に、
git gc
が最近呼び出された場合や、様々なファイルが欠落している場合でも動作します。 -
Rakefile
内のHamlリポジトリ内のファイルを読み込むときは、常に__FILE__
を使用します。このバグレポートによると、これによりHamlがBundlerでより良く動作するはずです。 -
ユーザーのフィードバックに基づいて、
- end
のエラーメッセージをもう少し直感的にします。 -
Rails 3でテンプレートに連結するのではなく、文字列を返す
form_for
のようなメソッドとの互換性。 -
ブロックの間インデントレベルを設定するwith_tabsヘルパーを追加します。
2.2.20
-
Rails 2.3.5でRailsのXSS保護を使用している場合、
form_tag
RailsヘルパーがHTMLセーフとして正しくマークされるようになりました。 -
defined?
の呼び出しは、非常に古いバージョン(1.2.x)でRailsのオートローディングを妨害すべきではありません。 -
Rails 3.0ベータ版で、ブロックとレイアウトを使用したActionViewの
render
メソッドの呼び出しが機能しないバグを修正します。 -
Rails 3.0ベータ版で、Haml::Helpers#haml_concatへのネストされた呼び出しの終了タグが不適切にエスケープされるバグを修正します。
2.2.19
- RailsのXSSサポートとの統合におけるバグを修正します。特に、
safe_concat
を正しくオーバーライドします。
2.2.18
-
Rails 3で使用される新しいXSS保護APIをサポートします。
-
Rails 3.0で実行している場合は、
RAILS_ENV
ではなくRails.env
を使用します。Duncan Grazierに感謝します。 -
WindowsでUnixスタイルの改行を出力するための
--unix-newlines
フラグをすべての実行可能ファイルに追加します。 -
:erb
フィルターのいくつかのバグを修正します。エラー報告で正しい行番号が使用されていることを確認し、複数行の式を許可します。 -
#
を含むHTMLスタイルの属性の解析バグを修正します。
2.2.17
-
html2haml
を使用した場合のHTML5 doctypeのコンパイルを修正します。 -
Sassオプションの
nil
値は、エラーを発生させるのではなく、無視されるようになりました。
2.2.16
ActionView::TemplateError
、ActionView::TemplateHandler
などへの参照を抽象化します。これらはすべてRails 3.0でActionView::Template::*
に名前が変更されました。
2.2.15
-
コンテンツがなく、その後に
else
句が続くif
ステートメントを許可します。例:- if foo
- else bar
2.2.14
-
Ruby 1.9で非ASCII文字を含む属性をエスケープするときに警告を出力しないようにします。
-
html2haml
でXHTML Strict doctypeを解析するときにクラッシュしないようにします。 -
doctype宣言として
!!! 5
を使用することにより、XHTMLドキュメントでHTML5 doctypeをサポートします。
2.2.13
-
非ASCIIバイトシーケンスを含むテンプレートでも、
:encoding => "ascii-8bit"
を指定できるようにします。これにより、ASCIIエンコーディングとしてマークされた非ASCII入力が与えられた場合にHamlテンプレートがクラッシュしないようにします。 -
html2haml
で使用されるHpricot 0.8.2との非互換性を修正しました。
2.2.12
バージョン2.2.11と2.2.12の間でHamlに変更はありませんでした。
2.2.11
-
XSS保護で、文字列以外の値が渡された場合にHTMLエスケープがエラーを発生させるバグを修正しました。これは、XSS保護が無効になっている場合のHTMLエスケープには影響しないことに注意してください。
-
外側の空白削除におけるバグを修正しました。空白のみのRuby文字列がそれらを超えた空白削除をブロックしていました。
-
コンパイルされたHamlコード内で発生した例外からHaml出力バッファのリセットを保護するために
ensure
を使用します。 -
loudスクリプト(
=
)内でエラーがスローされた場合に表示されるエラー行番号のバグを修正します。これはいくつかの最適化を無効にするため最善の解決策ではありませんが、大きな影響はないはずであり、最適化はバージョン2.4で再び有効になることを願っています。 -
プラグインスケルトンがインストールされ、
rake gems:install
が実行された場合にクラッシュしないようにします。 -
RAILS_ROOT
を直接使用しないようにします。これはRails 3.0では存在しなくなりました。代わりに、これをHaml::Util.rails_root
として抽象化します。この変更により、Hamlはこの執筆時点ではedge Railsと完全に互換性があります。
2.2.10
-
動的属性を持ち、コンテンツがない要素で、開始タグと終了タグの間隔が広すぎるバグを修正しました。
-
rails/init.rb
をinit.rb
のロードから変更し、代わりにコンテンツを基本的にコピーするようにしました。これにより、適切なバインディングをHaml.init_rails
に転送できます。 -
Hamlが、他のすべてのプラグインがロードされた後にのみXSS保護統合を有効にしようとするようにします。これにより、Hamlがgemで、
rails_xss
プラグインが使用されている場合に正常に機能します。 -
Hamlテンプレートの戻り値をHTMLセーフとしてマークします。これにより、HamlパーシャルがRailsのXSS保護で機能します。
2.2.9
-
特定の状況下で、Hamlのテキストが誤ったバッファに連結されるバグを修正しました。これは、
capture
のようなメソッドを使用する場合、主にRailsで問題でした。 -
行に補間があり、
:escape_html
オプションが有効になっている場合に、テンプレートテキストがエスケープされるバグを修正しました。例えばFoo < Bar #{"<"} Baz
:escape_html
を使用した場合、以下のようにレンダリングされていました。Foo &lt; Bar < Baz
しかし、現在は以下のようにレンダリングされます。
Foo < Bar < Baz
Rails XSS保護
Haml 2.2.9は、Railsバージョン2.3.5以降のXSS保護をサポートしています。これにはいくつかの要素があります。
-
XSS保護が有効になっている場合、Hamlの
:escape_html
オプションはデフォルトでtrue
に設定されます。 -
HTMLセーフとして宣言された文字列は、
#html_escape
ヘルパーや、:escape_html
が無効になっている場合の&=
を含め、Hamlによってエスケープされません。 -
HTMLを生成するHamlヘルパーはHTMLセーフとしてマークされ、HTMLセーフでない場合は入力をエスケープします。
2.2.8
- HTMLエスケープと奇妙なUnicodeのナンセンスに関する潜在的なXSS問題を修正しました。これは、少し前にRailsで修正された問題と同じです。
2.2.7
-
ERB属性値がHamlに変換される前にHTMLアンエスケープされていなかった
html2haml
の問題を修正しました。 -
#{}
がHamlに変換される前にエスケープされていなかったhtml2haml
の問題を修正しました。 -
自動的に空白が保持されるタグのリストに
<code>
を追加します。 -
サイレントスクリプトで
end
の後にコードが続くバグを修正しました。タグの下にネストされている場合、エラーがスローされなくなりました。 -
内側の空白削除と条件付き文のバグを修正しました。条件付き文の
else
などの句が適切に空白削除されるようになりました。
2.2.6
-
html2hamlの依存関係をロードできない場合のエラーメッセージが
--trace
オプションを尊重するようにしました。 -
Rubyファイルの
__FILE__
定数が相対パスである場合(TextMateで時々発生するようです(Karl Vargaに感謝します))、クラッシュしないようにします。 -
実行可能ファイルの
--version
文字列に「Sass」を追加します。 -
静的属性でコンマが省略されている場合(例:
%p{:foo => "bar" :baz => "bang"}
)に例外を発生させます。
2.2.5
-
条件付きコメントを開くときに生成された末尾の空白を取り除きました(Norman Clarkeに感謝します)。
-
数値IDが属性として与えられた場合のCSS ID連結を修正しました。(Norman Clarkeに感謝します)。
-
文字列での「-end」の使用に関するいくつかのバグを修正しました。
2.2.4
-
コードが後に続く場合に、サイレントスクリプトで
end
を使用できるようにします。例:- form_for do ... - end if @show_form
これはあまり良いスタイルではありませんが、一貫性のためにサポートしています。
-
haml --rails
経由でインストールした場合に、require 'rubygems'
をinit.rbの先頭に追加しないようにします。これは必要ではなく、実際にはhaml/templateがロードされるとすぐに上書きされます。
2.2.3
Haml 2.2.3は、Jan Ulbrichのおかげで、Google AppEngine用のJRubyバンドルツールのサポートを追加しました。
2.2.2
Haml 2.2.2はマイナーなバグ修正リリースであり、いくつかの注目すべき変更があります。まず、haml_concat
を=
で使用するとエラーが発生するようになりました。これは常に不正な動作であり、実際には機能したことがありませんでした。唯一の違いは、エラーが明確に表示されるようになったことです。次に、特に新しい属性構文では、Ruby 1.9がより完全にサポートされるようになりました。3番目に、:escape_html
オプションが有効になっており、#{}
補間が使用されている場合、フィルターはエスケープされなくなりました。
2.2.1
Haml 2.2.1はマイナーなバグ修正リリースです。
2.2.0
Haml 2.2は、言語にいくつかの新機能を追加し、いくつかのバグを修正し、パフォーマンスを大幅に向上させました(特に:ugly
を有効にして実行する場合)。
構文の変更
HTMLスタイルの属性構文
Haml 2.2では、HTML構文に基づいた新しい属性構文が導入されました。例:
%a(href="https://haml.dokyumento.jp" title="Haml's so cool!")
%img(src="/images/haml.png" alt="Haml")
これには主に2つの理由があります。まず、ハッシュスタイルの構文は非常にRuby固有です。現在、多くの言語でHamlの実装があり、それぞれにハッシュ(または辞書、連想配列などと呼ばれるもの)の独自の構文があります。HTML構文はすべてに採用されるため、必要な言語で安心してHamlを使用できます。
次に、ハッシュスタイルの構文は非常に冗長です。%img{:src => "/images/haml.png", :alt => "Haml"}
は%img(src="/images/haml.png" alt="Haml")
よりも8文字長いです。Hamlはテンプレートをすばやく簡単に書くことを目的としています。HTMLスタイルの属性はそれに大いに役立つはずです。
引用符を省略することで、Ruby変数を属性値として使用できます。ローカル変数またはインスタンス変数を使用できます。例:
%a(title=@title href=href) Stuff
これは次のものと同じです。
%a{:title => @title, :href => href} Stuff
属性を区切るコンマがないため、より複雑な式は許可されていません。ただし、#{}
補間を使用して、複雑な式をHTMLスタイルの属性に挿入できます。
%span(class="widget_#{@widget.number}")
複数行の属性
一般的に、Hamlは個々の要素を1行に保とうとします。さらに行にあふれるための複数行構文がありますが、短い行を推奨するために、意図的に使いにくくしています。
ただし、オーバーフローが合理的な場合が1つあります。属性です。多くの場合、タグには単に多くの属性があり、この場合、オーバーフローを許可するのが理にかなっています。属性ハッシュを複数行に拡張できるようになりました。
%script{:type => "text/javascript",
:src => "javascripts/script_#{2 + 7}"}
これはHTMLスタイルの属性でも機能します。
%script(type="text/javascript"
src="javascripts/script_#{2 + 7}")
ハッシュスタイルの属性の場合、改行はコンマの後に来る必要があることに注意してください。
ユニバーサル補間
Haml 2.0では、==
を使用して、#{}
を使ってテキスト行内にRubyコードを挿入できました。Haml 2.2では、==
は不要になり、#{}
は任意のテキストで使用できるようになりました。例えば、
%p This is a really cool #{h what_is_this}!
But is it a #{h what_isnt_this}?
さらに、挿入されたコードをエスケープしたり、エスケープ解除するには、行の先頭にそれぞれ &
または !
を追加するだけで済みます。
%p& This is a really cool #{what_is_this}!
& But is it a #{what_isnt_this}?
柔軟なインデント
Hamlは従来、ユーザーに2つのスペースでのインデントを使用することを要求していました。これは普遍的なRubyスタイルであり、依然として強く推奨されています。しかし、Hamlは現在、任意の数のスペースやタブをインデントに使用することを許可しています。ただし、以下の条件を満たす必要があります。
- タブとスペースを混在させないこと
- インデントはドキュメント内で一貫していること
新しいオプション
:ugly
:ugly
オプションは厳密には新しいものではありません。ネストが深いテンプレートのレンダリングの苦痛を軽減するためにHaml 2.0で導入されました。しかし、Haml 2.2では大幅に強化されました。以前はできなかったあらゆる種類のパフォーマンス最適化を行うようになり、その使用はHamlのパフォーマンスを劇的に向上させます。Railsのproduction環境ではデフォルトで有効になっており、他のフレームワークのproduction環境でも強く推奨されます。
:encoding
このオプションは、Ruby 1.9で実行する際のHamlテンプレートのエンコーディングを指定します。デフォルトはEncoding.default_internal
または"utf-8"
です。これは、非ASCII入力データを扱う際に奇妙なエンコーディングエラーが発生しないようにするのに役立ちます。
非推奨
Haml::Helpers#puts
このヘルパーは、Kernel#puts
メソッドと競合するという明白な理由から、非推奨となっています。私がこの名前を選んだことを恥じています。代わりに haml_concat
を使用して、私の恥を免じてください。
= haml_tag
多くの人が誤って「= haml_tag
」を使用しています。これは常に間違っていました。haml_tag
はテンプレートに直接出力するため、「- haml_tag
」として使用する必要があります。現在、=
を使用するとエラーが発生します。
互換性
Rails
Haml 2.2は、Rails 2.0.6から最新のエッジリビジョン783db25まで、完全に互換性があります。
Ruby 1.9
Haml 2.2はRuby 1.9とも完全に互換性があります。Ruby 1.9スタイルの属性ハッシュをサポートし、エンコーディング関連の問題を処理します(:encoding
オプションを参照)。
フィルター
:markdown
Markdownフィルターには多数の改善があります。HamlはRedClothの劣悪なMarkdown実装を使用しようとしなくなりました。代わりに、主要なすべてのMarkdown実装を探します:RDiscount、RPeg-Markdown、Maruku、BlueCloth。
:cdata
テキストをCDATAタグでラップする:cdata
フィルターが追加されました。
:sass
:sass
フィルターは、Sass::Plugin
で設定されたオプション(利用可能な場合)を使用するようになりました。
実行可能ファイル
haml
haml
実行可能ファイルは、ruby
実行可能ファイルと同じように動作する-r
および-I
フラグを受け入れるようになりました。これにより、コマンドラインからHamlを使用する際にヘルパーファイルをロードできます。
また、Hamlがテンプレートから生成するRubyコードを出力する--debug
フラグも受け入れます。これは私自身の利便性のためですが、興味深いかもしれません。
html2haml
html2haml
実行可能ファイルは大幅に改善されました。これらの多くはバグ修正ですが、いくつかの機能もあります。1つには、CDATAタグを理解し、ERBファイルを自動検出するようになりました。さらに、「- end
」のみを含む行はHamlエラーになりました。html2haml
がすべてのRubyブロックを適切に解析することは不可能であるため、これは作者が対処すべきブロックがあるという信号として機能します。
その他
XHTML Mobile DTD
Haml 2.2はXHTML MobileのDTDをサポートしています:!!! Mobile
。
YARD
この変更ログを含むHaml 2.2のすべてのドキュメントは、YARDに移動されました。YARDは優れたドキュメントシステムであり、Marukuでドキュメントを作成できます。これは素晴らしいことです。