slim 3.0.8 → 3.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6015955337b548a4b9a2771f13ef80790288d6bc
4
- data.tar.gz: 83b36da94f2c3a12b2c34f30f59a104268d7fe03
3
+ metadata.gz: 0236aa35a7627a2fb7adc66568a567c1bef179df
4
+ data.tar.gz: fb444de0430b65926f4128723782461b6610a8ef
5
5
  SHA512:
6
- metadata.gz: fad25f84c11a4fce52b703b6466be67e2baa5ba62d692bc515f3981078df227edc188a2f14f49eb27e969352dfcbb7ae9f08f1f9ff7f2aa65544070eff6bbe54
7
- data.tar.gz: 822391dff4d3328eeab7df526a476492d8ba7713f112a7623c4aa86d9283ae107b83573c27a8e50ecc4e8c736140d31733d9c4610324dd50dbfa8c0b9ed26103
6
+ metadata.gz: 51416a80091194733a4ea26d9f813f2cc51a243c788296ee9a9cc19ec02f6b20b09019256bb2de60b8fd535816caf0a45c1c5e962e304409a2b09bb17dc1c9bd
7
+ data.tar.gz: 8cd78afade033ac099acb3c0d4bc8f8dbb643cfc54cd3b48bd3b348a01493a816e613a9a35ab9097f1ebef647afeecf4d0e73f498f6f87ba5a3ea531a27c7b75
data/CHANGES CHANGED
@@ -1,3 +1,8 @@
1
+ 3.0.9 (2017-11-09)
2
+
3
+ * Fixed Cross-site Scripting in splat attributes names (See #767)
4
+ * Restrict access to public methods in logic_less templates (See #781)
5
+
1
6
  3.0.8 (2017-05-06)
2
7
 
3
8
  * Added splat_prefix configuration option for Angular2 syntax support
@@ -3,9 +3,9 @@
3
3
  [![Gem Version](https://img.shields.io/gem/v/slim.svg)](http://rubygems.org/gems/slim) [![Build Status](https://img.shields.io/travis/slim-template/slim.svg?branch=master)](http://travis-ci.org/slim-template/slim) [![Dependency Status](https://img.shields.io/gemnasium/slim-template/slim.svg?travis)](https://gemnasium.com/slim-template/slim) [![Code Climate](https://codeclimate.com/github/slim-template/slim/badges/gpa.svg)](https://codeclimate.com/github/slim-template/slim) [![Test Coverage](https://codeclimate.com/github/slim-template/slim/badges/coverage.svg)](https://codeclimate.com/github/slim-template/slim/coverage) [![Gittip donate button](https://img.shields.io/gratipay/bevry.svg)](https://www.gittip.com/min4d/ "Donate weekly to this project using Gittip")
4
4
  [![Flattr donate button](https://raw.github.com/balupton/flattr-buttons/master/badge-89x18.gif)](https://flattr.com/submit/auto?user_id=min4d&url=http%3A%2F%2Fslim-lang.org%2F "Donate monthly to this project using Flattr")
5
5
 
6
- Slim は 不可解にならないように view の構文を本質的な部品まで減らすことを目指したテンプレート言語です。標準的な HTML テンプレートからどれだけのものが削除できるか確かめるところから始まりました。(<, >, 閉じタグなど) 多くの人が Slim に興味を持ったことで, 機能性は発展し, 柔軟な構文をもたらしました。
6
+ Slim は 不可解にならない程度に view の構文を本質的な部品まで減らすことを目指したテンプレート言語です。標準的な HTML テンプレートからどれだけのものを減らせるか、検証するところから始まりました。(<, >, 閉じタグなど) 多くの人が Slim に興味を持ったことで, 機能的で柔軟な構文に成長しました。
7
7
 
8
- 機能の短いリスト
8
+ 簡単な特徴
9
9
 
10
10
  * すっきりした構文
11
11
  * 閉じタグの無い短い構文 (代わりにインデントを用いる)
@@ -40,31 +40,31 @@ Slim は 不可解にならないように view の構文を本質的な部品
40
40
 
41
41
  ### Slim とは?
42
42
 
43
- Slim は __Rails3 および 4__ に対応した高速, 軽量なテンプレートエンジンです。すべての主要な Ruby の実装でしっかりテストされています。
43
+ Slim は __Rails3 および 4__ に対応した高速, 軽量なテンプレートエンジンです。主要な Ruby の実装全てでしっかりテストされています。
44
44
  私たちは継続的インテグレーションを採用しています。(travis-ci)
45
45
 
46
- Slim の核となる構文は1つの考えによって導かれます: "この動作を行うために最低限必要なものは何か"
46
+ Slim の核となる構文は1つの考えによって導かれています: "この動作を行うために最低限必要なものは何か。"
47
47
 
48
- 多くの人々の Slim への貢献によって, 彼らが使う [Haml](https://github.com/haml/haml) や [Jade](https://github.com/visionmedia/jade) の影響を受け構文の追加が行われています。 Slim の開発チームは美は見る人の目の中にあることを分っているのでこういった追加にオープンです。
48
+ 多くの人々の Slim への貢献によって, 彼らが使う [Haml](https://github.com/haml/haml) や [Jade](https://github.com/visionmedia/jade) の影響を受け構文の追加が行われています。 Slim の開発チームは美は見る人の目の中にあることを分っているので、こういった追加にオープンです。
49
49
 
50
50
  Slim は 構文解析/コンパイルに [Temple](https://github.com/judofyr/temple) を使い [Tilt](https://github.com/rtomayko/tilt) に組み込まれます。これにより [Sinatra](https://github.com/sinatra/sinatra) やプレーンな [Rack](https://github.com/rack/rack) とも一緒に使えます。
51
51
 
52
- Temple のアーキテクチャはとても柔軟でモンキーパッチなしで構文解析とコンパイルのプロセスの拡張を可能にします。これはロジックレスのプラグインや I18n が提供する翻訳プラグインに
52
+ Temple のアーキテクチャはとても柔軟で, モンキーパッチなしで構文解析とコンパイルのプロセスの拡張が可能です。これはロジックレスのプラグインや I18n が提供する翻訳プラグインに
53
53
  使用されます。ロジックレスモードでは HTML をビルドするために Slim の構文を使いたいが, テンプレートの中で Ruby を書きたくない場合にも Slim を使うことができます。
54
54
 
55
55
  ### なぜ Slim を使うのか?
56
56
 
57
57
  * Slim によって メンテナンスが容易な限りなく最小限のテンプレートを作成でき, 正しい文法の HTML や XML が書けることを保証します。
58
- * Slim の構文は美的であり, テンプレートを書くのを楽しくしてくれると思います。Slim は主要なフレームワークで互換性があるので簡単に始めることができます。
59
- * Slim のアーキテクチャは非常に柔軟なので構文の拡張やプラグインを書くことができます。
58
+ * Slim の構文は美しく, テンプレートを書くのがより楽しくなります。Slim は主要なフレームワークで互換性があるので, 簡単に始めることができます。
59
+ * Slim のアーキテクチャは非常に柔軟なので, 構文の拡張やプラグインを書くことができます。
60
60
 
61
- ___そう, Slim は速い!___ Slim は開発当初からパフォーマンスに注意して開発されました。
61
+ ___そう, Slim は速い!___ Slim は開発当初からパフォーマンスに注意して開発されてきました。
62
62
  ベンチマークはコミット毎に <http://travis-ci.org/slim-template/slim> で取られています。
63
63
  この数字が信じられませんか? それは仕方ないことです。是非 rake タスクを使って自分でベンチマークを取ってみてください!
64
64
 
65
65
  私たちの考えでは, あなたは Slim の機能と構文を使うべきです。Slim はあなたのアプリケーションのパフォーマンスに悪影響を与えないことを保証します。
66
66
 
67
- ### どう始めるの?
67
+ ### どうやって使い始めるの?
68
68
 
69
69
  Slim を gem としてインストール:
70
70
 
@@ -72,7 +72,7 @@ Slim を gem としてインストール:
72
72
  gem install slim
73
73
  ~~~
74
74
 
75
- あなたの Gemfile に `gem 'slim'` と書いてインクルードするか, ファイルに `require 'slim'` と書く必要があります。これだけです! 後は拡張子に .slim を使うだけで準備はできています。
75
+ あなたの Gemfile に `gem 'slim'` と書いてインクルードするか, ファイルに `require 'slim'` と書く必要があります。これだけです! 後は拡張子に .slim を使うだけで準備完了です。
76
76
 
77
77
  ### 構文例
78
78
 
@@ -87,7 +87,7 @@ html
87
87
  meta name="author" content=author
88
88
  link rel="icon" type="image/png" href=file_path("favicon.png")
89
89
  javascript:
90
- alert('Slim は javascript の埋め込みに対応します!')
90
+ alert('Slim は javascript の埋め込みに対応しています!')
91
91
 
92
92
  body
93
93
  h1 マークアップ例
@@ -112,14 +112,14 @@ html
112
112
  | Copyright &copy; #{@year} #{@author}
113
113
  ~~~
114
114
 
115
- インデントについて, インデントの深さはあなたの好みで選択できます。もし最初のインデントをスペース2つ, その次に5スペースを使いたい場合, それはあなたの選択次第です。マークアップを入れ子にするにはスペース1つのインデントが必要なだけです。
115
+ インデントについて, インデントの深さはあなたの好みで選択できます。もしあなたが最初のインデントをスペース2つ, その次に5スペースを使いたい場合, それも自由です。マークアップを入れ子にするには最低1つのスペースによるインデントが必要なだけです。
116
116
 
117
117
  ## ラインインジケータ
118
118
 
119
119
  ### テキスト `|`
120
120
 
121
- パイプは Slim に行をコピーしろと命じます。基本的にどのような処理でもエスケープします。
122
- パイプよりも深くインデントされた各行がコピーされます。
121
+ パイプを使うと, Slim は行をコピーします。基本的にどのような処理でもエスケープします。
122
+ パイプよりも深くインデントされた全ての行がコピーされます。
123
123
 
124
124
  ~~~ slim
125
125
  body
@@ -153,14 +153,14 @@ body
153
153
  | <tr><td>#{a.name}</td><td>#{a.description}</td></tr>
154
154
  ~~~
155
155
 
156
- ### スペース付きテキスト `'`
156
+ ### 末尾スペース付きのテキスト `'`
157
157
 
158
- シングルクォートは Slim に行をコピーしろと命じます (`|` と同様に) が, 末尾にスペースが追加されます。
158
+ シングルクォートは `|` と同様に行をコピーしますが, 末尾にスペースが1つ追加されます。
159
159
 
160
160
  ### インライン html `<` (HTML 形式)
161
161
 
162
- あなたは html タグを直接 Slim の中に書くことができます。Slim は閉じタグを使った html タグ形式や html と Slim を混ぜてテンプレートの中に書くことができます。
163
- 行頭が '<' の場合, 暗黙の `|` があるものとして動作します:
162
+ HTML タグを直接 Slim の中に書くことができます。Slim では, 閉じタグを使った HTML タグ形式や HTML と Slim を混ぜてテンプレートの中に書くことができます。
163
+ 行頭が '<' の場合, 暗黙的に `|` があるものとして動作します:
164
164
 
165
165
  ~~~ slim
166
166
  <html>
@@ -179,7 +179,7 @@ body
179
179
  ### 制御コード `-`
180
180
 
181
181
  ダッシュは制御コードを意味します。制御コードの例としてループと条件文があります。`end` は `-` の後ろに置くことができません。ブロックはインデントによってのみ定義されます。
182
- 複数行にわたる Ruby のコードが必要な場合, 行末にバックスラッシュ `\` を追加します。行末がカンマ `,` で終わる場合 (例 関数呼び出し) には行末にバックスラッシュを追加する必要はありません。
182
+ 複数行にわたる Ruby のコードが必要な場合, 行末にバックスラッシュ `\` を追加します。行末がカンマ `,` で終わる場合 (例 関数呼び出し) には, 行末にバックスラッシュを追加する必要はありません。
183
183
 
184
184
  ~~~ slim
185
185
  body
@@ -189,7 +189,7 @@ body
189
189
 
190
190
  ### 出力 `=`
191
191
 
192
- イコールはバッファに追加する出力を生成する Ruby 呼び出しを Slim に命令します。Ruby のコードが複数行にわたる場合, 例のように行末にバックスラッシュを追加します。
192
+ イコールはバッファに追加する出力を生成する Ruby コードの呼び出しを Slim に命令します。Ruby のコードが複数行にわたる場合, 例のように行末にバックスラッシュを追加します。
193
193
 
194
194
  ~~~ slim
195
195
  = javascript_include_tag \
@@ -197,7 +197,7 @@ body
197
197
  "application"
198
198
  ~~~
199
199
 
200
- 行末がカンマ `,` で終わる場合 (例 関数呼び出し) には行末にバックスラッシュを追加する必要はありません。行末スペースを追加するために修飾子の `>` や `<` もサポートします。
200
+ 行末がカンマ `,` で終わる場合 (例 関数呼び出し) には行末にバックスラッシュを追加する必要はありません。行末・行頭にスペースを追加するために修飾子の `>` や `<` がサポートされています。
201
201
 
202
202
  * `=>` は末尾のスペースを伴った出力をします。 末尾のスペースが追加されることを除いて, 単一の等合 (`=`) と同じです。
203
203
  * `=<` は先頭のスペースを伴った出力をします。先頭のスペースが追加されることを除いて, 単一の等号 (`=`) と同じです。
@@ -206,8 +206,8 @@ body
206
206
 
207
207
  単一のイコール (`=`) と同じですが, `escape_html` メソッドを経由しません。 末尾や先頭のスペースを追加するための修飾子 `>` と `<` はサポートされています。
208
208
 
209
- * `==>` は HTML エスケープを行わず末尾のスペースを伴った出力をします。末尾のスペースが追加されることを除いて, 二重等号 (`==`) と同じです。
210
- * `==<` は HTML エスケープを行わず先頭のスペースを伴った出力をします。先頭のスペースが追加されることを除いて, 二重等号 (`==`) と同じです。
209
+ * `==>` は HTML エスケープを行わずに, 末尾のスペースを伴った出力をします。末尾のスペースが追加されることを除いて, 二重等号 (`==`) と同じです。
210
+ * `==<` は HTML エスケープを行わずに, 先頭のスペースを伴った出力をします。先頭のスペースが追加されることを除いて, 二重等号 (`==`) と同じです。
211
211
 
212
212
  ### コードコメント `/`
213
213
 
@@ -246,11 +246,11 @@ html コメントにはスラッシュの直後にエクスクラメーション
246
246
 
247
247
  ## HTML タグ
248
248
 
249
- # <!DOCTYPE> 宣言
249
+ ### <!DOCTYPE> 宣言
250
250
 
251
- doctype はとても簡単な方法で複雑なドキュメントタイプを生成するために使われる特別なキーワードです。
251
+ doctype キーワードでは, とても簡単な方法で複雑な DOCTYPE を生成できます。
252
252
 
253
- XML 宣言
253
+ XML バージョン
254
254
 
255
255
  ~~~ slim
256
256
  doctype xml
@@ -260,7 +260,7 @@ doctype xml ISO-8859-1
260
260
  <?xml version="1.0" encoding="iso-8859-1" ?>
261
261
  ~~~
262
262
 
263
- XHTML ドキュメントタイプ
263
+ XHTML DOCTYPES
264
264
 
265
265
  ~~~ slim
266
266
  doctype html
@@ -294,7 +294,7 @@ doctype transitional
294
294
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
295
295
  ~~~
296
296
 
297
- HTML 4 ドキュメントタイプ
297
+ HTML 4 DOCTYPES
298
298
 
299
299
  ~~~ slim
300
300
  doctype strict
@@ -310,7 +310,7 @@ doctype transitional
310
310
  "http://www.w3.org/TR/html4/loose.dtd">
311
311
  ~~~
312
312
 
313
- ### 閉じタグ (末尾 `/`)
313
+ ### 閉じタグ (末尾の `/`)
314
314
 
315
315
  末尾に `/` を付けることで明示的にタグを閉じることができます。
316
316
 
@@ -321,7 +321,7 @@ img src="image.png"/
321
321
  (注) 標準的な html タグ (img, br, ...) は自動的にタグを閉じるので,
322
322
  通常必要ありません。
323
323
 
324
- ### スペースを追加する (`<`, `>`)
324
+ ### 行頭・行末にスペースを追加する (`<`, `>`)
325
325
 
326
326
  a タグの後に > を追加することで末尾にスペースを追加するよう Slim に強制することができます。
327
327
 
@@ -330,7 +330,7 @@ a> href='url1' リンク1
330
330
  a> href='url2' リンク2
331
331
  ~~~
332
332
 
333
- < を追加することで先頭のスペースを追加できます。
333
+ < を追加することで先頭にスペースを追加できます。
334
334
 
335
335
  ~~~ slim
336
336
  a< href='url1' リンク1
@@ -345,7 +345,7 @@ a<> href='url1' リンク1
345
345
 
346
346
  ### インラインタグ
347
347
 
348
- 時々タグをよりコンパクトにインラインにしたくなるかもしれません。
348
+ タグをよりコンパクトにインラインにしたくなることがあるかもしれません。
349
349
 
350
350
  ~~~ slim
351
351
  ul
@@ -353,7 +353,7 @@ ul
353
353
  li: a href="/b" B リンク
354
354
  ~~~
355
355
 
356
- 読みやすくするために, 属性を囲むことができるのを忘れないでください。
356
+ 可読性のために, 属性を囲むことができるのを忘れないでください。
357
357
 
358
358
  ~~~ slim
359
359
  ul
@@ -370,7 +370,7 @@ body
370
370
  h1 id="headline" 私のサイトへようこそ。
371
371
  ~~~
372
372
 
373
- 入れ子にするのかどちらかです。エスケープ処理を行うためにはパイプかバッククォートを使わなければなりません。
373
+ 入れ子にするかのどちらかです。エスケープ処理を行うためにはパイプかシングルクォートを使わなければなりません。
374
374
 
375
375
 
376
376
  ~~~ slim
@@ -406,7 +406,7 @@ body
406
406
 
407
407
  ### 属性
408
408
 
409
- タグの後に直接属性を書きます。属性のテキストにはダブルクォート `"` か シングルクォート `'` を使わなければなりません (引用符で囲まれた属性)。
409
+ タグの後に直接属性を書きます。通常の属性記述にはダブルクォート `"` か シングルクォート `'` を使わなければなりません (引用符で囲まれた属性)。
410
410
 
411
411
  ~~~ slim
412
412
  a href="http://slim-lang.com" title='Slim のホームページ' Slim のホームページへ
@@ -417,8 +417,8 @@ a href="http://slim-lang.com" title='Slim のホームページ' Slim のホー
417
417
  #### 属性の囲み
418
418
 
419
419
  区切り文字が構文を読みやすくするのであれば,
420
- `{...}`, `(...)`, `[...]` が属性の囲みに使えます。
421
- これらの記号は設定できます (`:attr_list_delims` オプション参照)。
420
+ `{...}`, `(...)`, `[...]` で属性を囲むことができます。
421
+ これらの記号は設定で変更できます (`:attr_list_delims` オプション参照)。
422
422
 
423
423
  ~~~ slim
424
424
  body
@@ -507,7 +507,7 @@ input type="text" disabled=nil
507
507
  #### 属性の結合
508
508
 
509
509
  複数の属性が与えられた場合に属性をまとめるように設定することができます (`:merge_attrs` 参照)。デフォルト設定では
510
- class 属性は空白区切りで結合されます。
510
+ class 属性はスペース区切りで結合されます。
511
511
 
512
512
  ~~~ slim
513
513
  a.menu class="highlight" href="http://slim-lang.com/" Slim-lang.com
@@ -519,7 +519,7 @@ a.menu class="highlight" href="http://slim-lang.com/" Slim-lang.com
519
519
  <a class="menu highlight" href="http://slim-lang.com/">Slim-lang.com</a>
520
520
  ~~~
521
521
 
522
- また, `Array` や配列要素を属性値として区切り文字で結合し使うこともできます。
522
+ また, `Array` を属性値として使うと、配列要素が区切り文字で結合されます。
523
523
 
524
524
  ~~~ slim
525
525
  a class=["menu","highlight"]
@@ -540,7 +540,7 @@ a class=:menu,:highlight
540
540
  <div class="card" data-id="1234" data-url="/place/1234">Slim の家</div>
541
541
  ~~~
542
542
 
543
- 次のようにハッシュを返すメソッドやインスタンス変数を使うこともできます"
543
+ 次のようにハッシュを返すメソッドやインスタンス変数を使うこともできます。
544
544
 
545
545
  ~~~ slim
546
546
  .card *method_which_returns_hash = place.name
@@ -559,7 +559,7 @@ a class=:menu,:highlight
559
559
  div class="first second third"
560
560
  ~~~
561
561
 
562
- スプラット(アスタリスク)属性のプレフィックスは `splat_prefix` オプションで設定できます。デフォルト値は `'*'` です。
562
+ アスタリスク(スプラット)属性のプレフィックスは `splat_prefix` オプションで設定できます。デフォルト値は `'*'` です。
563
563
 
564
564
  #### 動的タグ `*`
565
565
 
@@ -587,7 +587,7 @@ ruby:
587
587
 
588
588
  #### タグショートカット
589
589
 
590
- `:shortcut` オプションを設定することで独自のタグショートカットを定義できます。Rails アプリケーションでは, `config/initializers/slim.rb` のようにイニシャライザに定義します。Sinatra アプリでは, `require 'slim'` が書かれた下であればどこにでも設定を定義することができます。
590
+ `:shortcut` オプションを設定することで独自のタグショートカットを定義できます。Rails アプリケーションでは, `config/initializers/slim.rb` のようなイニシャライザに定義します。Sinatra アプリでは, `require 'slim'` を書いた行以降であれば, どこにでも設定を定義することができます。
591
591
 
592
592
  ~~~ ruby
593
593
  Slim::Engine.set_options shortcut: {'c' => {tag: 'container'}, '#' => {attr: 'id'}, '.' => {attr: 'class'} }
@@ -607,9 +607,9 @@ c.content テキスト
607
607
 
608
608
  #### 属性のショートカット
609
609
 
610
- カスタムショートカットを定義することができます (`#` id `.` が class であるように)。
610
+ カスタムショートカットを定義することができます (id の`#` , class `.` のように)。
611
611
 
612
- 例として `&` で作った type 属性付きの input 要素のショートカットを作成し追加します。
612
+ 例として, type 属性付きの input 要素のショートカット `&` を追加します。
613
613
 
614
614
  ~~~ ruby
615
615
  Slim::Engine.set_options shortcut: {'&' => {tag: 'input', attr: 'type'}, '#' => {attr: 'id'}, '.' => {attr: 'class'}}
@@ -631,7 +631,7 @@ Slim コードの中でこの様に使用できます。
631
631
  <input type="submit" />
632
632
  ~~~
633
633
 
634
- 別の例として `@` で作った role 属性のショートカットを作成し追加します。
634
+ 別の例として, role 属性のショートカット `@` を追加します。
635
635
 
636
636
  ~~~ ruby
637
637
  Slim::Engine.set_options shortcut: {'@' => 'role', '#' => 'id', '.' => 'class'}
@@ -655,13 +655,13 @@ Slim コードの中でこの様に使用できます。
655
655
  Slim::Engine.set_options shortcut: {'@' => {attr: %w(data-role role)}}
656
656
  ~~~
657
657
 
658
- Slim の中で次のように使用し
658
+ Slim の中で次のように使用すると,
659
659
 
660
660
  ~~~ slim
661
661
  .person@admin = person.name
662
662
  ~~~
663
663
 
664
- このようのレンダリングされます。
664
+ このようにレンダリングされます。
665
665
 
666
666
  ~~~ html
667
667
  <div class="person" role="admin" data-role="admin">Daniel</div>
@@ -718,7 +718,7 @@ body
718
718
 
719
719
  ## ヘルパ, キャプチャとインクルード
720
720
 
721
- いくつかのヘルパを使用してテンプレートを拡張することもできます。次のヘルパが定義されていることを前提として,
721
+ いくつかのヘルパを使用してテンプレートを拡張することもできます。次のヘルパが定義されているとして,
722
722
 
723
723
  ~~~ruby
724
724
  module Helpers
@@ -728,14 +728,14 @@ module Helpers
728
728
  "<h1>#{capture(&block)}</h1>"
729
729
  else
730
730
  # フレームワークなしで Slim を使う場合(Tilt の場合),
731
- # ただ出力する
731
+ # そのまま出力する
732
732
  "<h1>#{yield}</h1>"
733
733
  end
734
734
  end
735
735
  end
736
736
  ~~~
737
737
 
738
- このインクルードされたコードのスコープは実行される Slim のテンプレートコードです。Slim テンプレートの中では次のように使用することができます。
738
+ 実行する Slim のテンプレートコードのスコープにインクルードされます。このヘルパは, Slim テンプレートの中で次のように使用することができます。
739
739
 
740
740
  ~~~ slim
741
741
  p
@@ -764,7 +764,7 @@ module Helpers
764
764
  set_var = block.binding.eval("lambda {|x| #{var} = x }")
765
765
  # Rails では capture! を使います
766
766
  # Slim をフレームワークなしで使う場合 (Tilt のみを使う場合),
767
- # キャプチャブロックを取得するには yield が利用できます
767
+ # キャプチャブロックを取得するには yield だけが利用できます
768
768
  set_var.call(defined?(::Rails) ? capture(&block) : yield)
769
769
  end
770
770
  end
@@ -801,7 +801,7 @@ end
801
801
 
802
802
  その後は, `link_list`はキャプチャしたコンテンツを含みます。
803
803
 
804
- ### インクルードヘルパ
804
+ ### インクルードヘルパ
805
805
 
806
806
  コンパイル時にインクルード機能を使いたい場合には, [パーシャルのインクルード](doc/jp/include.md) を見てください。
807
807
  実行時にサブテンプレートを実行すること ( Rails の `#render` のように) もできます。インクルードヘルパを自分で用意する必要があります:
@@ -826,7 +826,7 @@ section = include_slim 'content'
826
826
 
827
827
  ## テキストの展開
828
828
 
829
- Ruby の標準的な展開方法を使用します。テキストはデフォルトで html エスケープされます。
829
+ Ruby の標準的な展開方法を使用します。テキストはデフォルトで html エスケープされます。2 重括弧にすることでエスケープしないこともできます。
830
830
 
831
831
  ~~~ slim
832
832
  body
@@ -843,7 +843,7 @@ body
843
843
 
844
844
  ## 埋め込みエンジン (Markdown, ...)
845
845
 
846
- ありがとう [Tilt](https://github.com/rtomayko/tilt), Slim は他のテンプレートエンジンの埋め込みに見事に対応します。
846
+ [Tilt](https://github.com/rtomayko/tilt)のおかげで, Slim は他のテンプレートエンジンの埋め込みに見事に対応しています。
847
847
 
848
848
  例:
849
849
 
@@ -864,19 +864,19 @@ p: markdown: Tag with **inline** markdown!
864
864
  | フィルタ | 必要な gems | 種類 | 説明 |
865
865
  | -------- | ----------- | ---- | ----------- |
866
866
  | ruby: | なし | ショートカット | Ruby コードを埋め込むショートカット |
867
- | javascript: | なし | ショートカット | javascript コードを埋め込むショートカットで script タグで囲む |
868
- | css: | なし | ショートカット | css コードを埋め込むショートカットで style タグで囲む |
869
- | sass: | sass | コンパイル時 | sass コードを埋め込むショートカットで style タグで囲む |
870
- | scss: | sass | コンパイル時 | scss コードを埋め込むショートカットで style タグで囲む |
871
- | less: | less | コンパイル時 | less コードを埋め込むショートカットで style タグで囲む |
872
- | styl: | styl | コンパイル時 | stylus コードを埋め込むショートカットで style タグで囲む |
873
- | coffee: | coffee-script | コンパイル時 | コンパイルした CoffeeScript script タグで囲む |
874
- | asciidoc: | asciidoctor | コンパイル時 + 展開 | AsciiDoc コードのコンパイルとテキスト中の # \{variables} の展開 |
875
- | markdown: | redcarpet/rdiscount/kramdown | コンパイル時 + 展開 | Markdownのコンパイルとテキスト中の # \{variables} の展開 |
876
- | textile: | redcloth | コンパイル時 + 展開 | textile のコンパイルとテキスト中の # \{variables} の展開 |
877
- | creole: | creole | コンパイル時 + 展開 | cleole のコンパイルとテキスト中の # \{variables} の展開 |
878
- | wiki:, mediawiki: | wikicloth | コンパイル時 + 展開 | wiki のコンパイルとテキスト中の # \{variables} の展開 |
879
- | rdoc: | rdoc | コンパイル時 + 展開 | RDoc のコンパイルとテキスト中の # \{variables} の展開 |
867
+ | javascript: | なし | ショートカット | javascript コードを埋め込み、script タグで囲む |
868
+ | css: | なし | ショートカット | css コードを埋め込み、style タグで囲む |
869
+ | sass: | sass | コンパイル時 | sass コードを埋め込み、style タグで囲む |
870
+ | scss: | sass | コンパイル時 | scss コードを埋め込み、style タグで囲む |
871
+ | less: | less | コンパイル時 | less コードを埋め込み、style タグで囲む |
872
+ | styl: | styl | コンパイル時 | stylus コードを埋め込み、 style タグで囲む |
873
+ | coffee: | coffee-script | コンパイル時 | CoffeeScript をコンパイルし、 script タグで囲む |
874
+ | asciidoc: | asciidoctor | コンパイル時 + 展開 | AsciiDoc をコンパイルし、テキスト中の # \{variables} を展開 |
875
+ | markdown: | redcarpet/rdiscount/kramdown | コンパイル時 + 展開 | Markdown をコンパイルし、テキスト中の # \{variables} を展開 |
876
+ | textile: | redcloth | コンパイル時 + 展開 | textile をコンパイルし、テキスト中の # \{variables} を展開 |
877
+ | creole: | creole | コンパイル時 + 展開 | cleole をコンパイルし、テキスト中の # \{variables} を展開 |
878
+ | wiki:, mediawiki: | wikicloth | コンパイル時 + 展開 | wiki をコンパイルし、テキスト中の # \{variables} を展開 |
879
+ | rdoc: | rdoc | コンパイル時 + 展開 | RDoc をコンパイルし、テキスト中の # \{variables} を展開 |
880
880
  | builder: | builder | プレコンパイル | builder コードの埋め込み |
881
881
  | nokogiri: | nokogiri | プレコンパイル | nokogiri コードの埋め込み |
882
882
  | erb: | なし | プレコンパイル | erb コードの埋め込み |
@@ -938,54 +938,54 @@ Slim::Engine.with_options(pretty: false) do
938
938
  end
939
939
  ~~~
940
940
 
941
- ### 可能なオプション
941
+ ### 設定可能なオプション
942
942
 
943
943
  次のオプションが `Slim::Engine` によって用意され `Slim::Engine.set_options` で設定することができます。
944
- 沢山ありますが良いことに, Slim はもし誤った設定キーを使用しようとした場合キーをチェックしエラーを報告します。
944
+ 沢山ありますが, 素晴らしいことに, Slim は設定キーをチェックし, 無効な設定キーを使用しようとしていた場合, エラーを返してくれます。
945
945
 
946
946
 
947
- | 種類 | 名前 | デフォルト | 用途 |
947
+ | | 名前 | デフォルト | 用途 |
948
948
  | ---- | ---- | ---------- | ---- |
949
- | 文字列 | :file | nil | 解析対象のファイル名ですが, Slim::Template によって自動的に設定されます |
950
- | 数値 | :tabsize | 4 | 1 タブあたりのスペース数 (構文解析で利用されます) |
951
- | 文字列 | :encoding | "utf-8" | テンプレートのエンコーディングを設定 |
952
- | 文字列 | :default_tag | "div" | タグ名が省略されている場合デフォルトのタグとして使用される |
953
- | ハッシュ | :shortcut | \{'.' => {attr: 'class'}, '#' => {attr: 'id'}} | 属性のショートカット |
954
- | ハッシュ | :code_attr_delims | \{'(' => ')', '[' => ']', '{' => '}'} | Ruby コードの属性区切り文字 |
955
- | ハッシュ | :attr_list_delims | \{'(' => ')', '[' => ']', '{' => '}'} | 属性リスト区切り文字 |
956
- | 配列&lt;シンボル,文字列&gt; | :enable_engines | nil <i>(すべて可)</i> | 有効な埋め込みエンジンリスト (ホワイトリスト) |
957
- | 配列&lt;シンボル,文字列&gt; | :disable_engines | nil <i>(無効なし)</i> | 無効な埋め込みエンジンリスト (ブラックリスト) |
958
- | 真偽値 | :disable_capture | false (Rails では true) | ブロック内キャプチャ無効 (ブロックはデフォルトのバッファに書き込む) |
959
- | 真偽値 | :disable_escape | false | 文字列の自動エスケープ無効 |
960
- | 真偽値 | :use_html_safe | false (Rails では true) | ActiveSupport の String# html_safe? を使う (:disable_escape と一緒に機能する) |
961
- | シンボル | :format | :xhtml | html の出力フォーマット (対応フォーマット :html, :xhtml, :xml) |
962
- | 文字列 | :attr_quote | '"' | html の属性を囲む文字 (' または " が可能) |
963
- | ハッシュ | :merge_attrs | \{'class' => ' '} | 複数の html 属性が与えられた場合結合に使われる文字列 (例: class="class1 class2") |
964
- | 配列&lt;文字列&gt; | :hyphen_attrs | %w(data) | 属性にハッシュが与えられた場合ハイフンつなぎされます。(例: data={a:1, b:2} は data-a="1" data-b="2" のように) |
965
- | 真偽値 | :sort_attrs | true | 名前によって属性をソート |
966
- | シンボル | :js_wrapper | nil | :comment, :cdata :both で JavaScript をラップします。:guess を指定することで :format オプションに基いて設定することもできます |
967
- | 真偽値 | :pretty | false | 綺麗な html インデント <b>(遅くなります!)</b> |
968
- | 文字列 | :indent | ' ' | インデントに使用される文字列 |
969
- | 真偽値 | :streaming | false (Rails では true, 無効化するにはストリーミングを参照) | ストリーミング出力の有効化, 体感的なパフォーマンスの向上 |
970
- | Class | :generator | Temple::Generators::StringBuffer/ RailsOutputBuffer | Temple コードジェネレータ (デフォルトのジェネレータは文字列バッファを生成します) |
971
- | 文字列 | :buffer | '_buf' (Rails では '@output_buffer') | バッファに使用される変数 |
972
- | 文字列 | :splat_prefix | '*' | スプラット(アスタリスク)属性のプレフィックス |
949
+ | String | :file | nil | 解析対象のファイル名。 Slim::Template によって自動的に設定されます |
950
+ | Integer | :tabsize | 4 | 1 タブあたりのスペース数 (構文解析で利用されます) |
951
+ | String | :encoding | "utf-8" | テンプレートのエンコーディングを設定 |
952
+ | String | :default_tag | "div" | タグ名が省略されている場合デフォルトのタグとして使用される |
953
+ | Hash | :shortcut | \{'.' => {attr: 'class'}, '#' => {attr: 'id'}} | 属性のショートカット |
954
+ | Hash | :code_attr_delims | \{'(' => ')', '[' => ']', '{' => '}'} | Ruby コードの属性区切り文字 |
955
+ | Hash | :attr_list_delims | \{'(' => ')', '[' => ']', '{' => '}'} | 属性リスト区切り文字 |
956
+ | Array&lt;Symbol,String&gt; | :enable_engines | nil <i>(すべて有効)</i> | 有効な埋め込みエンジンリスト (ホワイトリスト) |
957
+ | Array&lt;Symbol,String&gt; | :disable_engines | nil <i>(無効なし)</i> | 無効な埋め込みエンジンリスト (ブラックリスト) |
958
+ | Boolean | :disable_capture | false (Rails では true) | ブロック内キャプチャ無効 (ブロックはデフォルトのバッファに書き込む) |
959
+ | Boolean | :disable_escape | false | Stringの自動エスケープ無効 |
960
+ | Boolean | :use_html_safe | false (Rails では true) | ActiveSupport の String# html_safe? を使う (:disable_escape と一緒に機能する) |
961
+ | Symbol | :format | :xhtml | HTML の出力フォーマット (対応フォーマット :html, :xhtml, :xml) |
962
+ | String | :attr_quote | '"' | HTML の属性を囲む文字 (' または " が可能) |
963
+ | Hash | :merge_attrs | \{'class' => ' '} | 複数の html 属性が与えられたときに, 結合に使われる文字 (例: class="class1 class2") |
964
+ | Array&lt;String&gt; | :hyphen_attrs | %w(data) | 属性にハッシュが与えられたとき, ハイフンで区切られます。(例: data={a:1, b:2} は data-a="1" data-b="2" のように) |
965
+ | Boolean | :sort_attrs | true | 名前順に属性をソート |
966
+ | Symbol | :js_wrapper | nil | :comment:cdata , :both で JavaScript をラップします。:guess を指定することで :format オプションに基いて設定することもできます |
967
+ | Boolean | :pretty | false | HTML を綺麗にインデントします。ブロック要素のタグでのみ、インデントされます。 <b>(遅くなります!)</b> |
968
+ | String | :indent | ' ' | インデントに使用される文字列 |
969
+ | Boolean | :streaming | false (Rails では true, 無効化するにはストリーミングを参照) | ストリーミング出力の有効化, 体感的なパフォーマンスの向上 |
970
+ | Class | :generator | Temple::Generators::StringBuffer/ RailsOutputBuffer | Temple コードジェネレータ (デフォルトのジェネレータはStringバッファを生成します) |
971
+ | String | :buffer | '_buf' (Rails では '@output_buffer') | バッファに使用される変数 |
972
+ | String | :splat_prefix | '*' | アスタリスク(スプラット)属性のプレフィックス |
973
973
 
974
974
  Temple フィルタによってもっと多くのオプションがサポートされていますが一覧には載せず公式にはサポートしません。
975
975
  Slim と Temple のコードを確認しなければなりません。
976
976
 
977
977
  ### オプションの優先順位と継承
978
978
 
979
- Slim や Temple のアーキテクチャについてよく知っている開発者は異なる場所で設定を
979
+ Slim や Temple のアーキテクチャについてよく知っている開発者は, 別の場所で設定を
980
980
  上書きすることができます。 Temple はサブクラスがスーパークラスのオプションを上書きできるように
981
981
  継承メカニズムを採用しています。オプションの優先順位は次のとおりです:
982
982
 
983
983
  1. `Slim::Template` オプションはエンジン初期化時に適用されます
984
984
  2. `Slim::Template.options`
985
985
  3. `Slim::Engine.thread_options`, `Slim::Engine.options`
986
- 5. パーサ/フィルタ/ジェネレータ `thread_options`, `options` (例: `Slim::Parser`, `Slim::Compiler`)
986
+ 5. Praser/Filter/Generator `thread_options`, `options` (例: `Slim::Parser`, `Slim::Compiler`)
987
987
 
988
- `Temple::Engine` のようにスーパークラスのオプションを設定することも可能です。しかしこれはすべての Temple テンプレートエンジンに影響します。
988
+ `Temple::Engine` のようにスーパークラスのオプションを設定することも可能です。しかし, こうするとすべての Temple テンプレートエンジンに影響します。
989
989
 
990
990
  ~~~ ruby
991
991
  Slim::Engine < Temple::Engine
@@ -1013,8 +1013,8 @@ Slim::Template.new('template.slim', optional_option_hash).render(scope)
1013
1013
  Slim::Template.new(optional_option_hash) { source }.render(scope)
1014
1014
  ~~~
1015
1015
 
1016
- optional_option_hash は前述のオプションを持つことができます。このオブジェクトのスコープは実行されるテンプレートの
1017
- コードです。
1016
+ optional_option_hash は前述のオプションを持つことができます。スコープはコードが実行されるテンプレートの
1017
+ オブジェクトです。
1018
1018
 
1019
1019
  ### Sinatra
1020
1020
 
@@ -1038,12 +1038,12 @@ html
1038
1038
 
1039
1039
  Rails のジェネレータは [slim-rails](https://github.com/slim-template/slim-rails) によって提供されます。
1040
1040
  slim-rails は Rails で Slim を使用する場合に必須ではありません。Slim をインストールし Gemfile に `gem 'slim'` を追加するだけです。
1041
- 後は .slim 拡張子を使えば Rails で使用できます。
1041
+ 後は .slim 拡張子を使うだけです。
1042
1042
 
1043
1043
  #### ストリーミング
1044
1044
 
1045
- HTTP ストリーミングは Rails がそれをサポートしているバージョンであればデフォルトで有効化されています。しかし, ストリーミングが体感的なパフォーマンスを改善していることを知る必要があります。
1046
- レンダリング時間は増加するでしょう。ストリーミングを無効化したい場合の設定です:
1045
+ HTTP ストリーミングをサポートしているバージョンの Rails であれば, デフォルトで有効化されています。しかし, ストリーミングは体感的なパフォーマンスを改善しているだけであることに注意してください。
1046
+ レンダリング時間は増加するでしょう。ストリーミングを無効化したい場合, 以下のように設定します:
1047
1047
 
1048
1048
  ~~~ ruby
1049
1049
  Slim::RailsTemplate.set_options streaming: false
@@ -1055,18 +1055,18 @@ Slim は Angular2 の構文に対応しています。ただし, いくつかの
1055
1055
 
1056
1056
  #### `splat_prefix` オプション
1057
1057
 
1058
- このオプションはパーサにスプラット(アスタリスク)属性に使用する構文を知らせます。
1058
+ このオプションは, アスタリスク(スプラット)属性に使用する構文をパーサに指定します。
1059
1059
  デフォルト値はアスタリスクです: `splat_prefix: '*'`
1060
- アスタリスクは Angular2 でも構造ディレクティブとして `*ngIf` などで使われます。デフォルトの設定値は Slim と Angular2 の構文衝突の原因になります。
1060
+ アスタリスクは Angular2 でも構造ディレクティブとして `*ngIf` などで使われます。デフォルトの設定値では, Slim と Angular2 の構文は衝突します。
1061
1061
 
1062
1062
  解決方法は 2 つあります:
1063
1063
 
1064
- * `splat_prefix` に 2 重アスタリスクのようなカスタム値(`splat_prefix: '**'`)を設定します。これで構造ディレクティブは期待通りに機能するはずです。スプラット(アスタリスク)属性は設定したカスタム値のプレフィックスで書かなければならないので注意してください。
1065
- * アスタリスクではない代わりのディレクティブ構文を使う
1064
+ * `splat_prefix` に 2重アスタリスクのようなカスタム値(`splat_prefix: '**'`)を設定します。これで構造ディレクティブは期待通りに機能するはずです。アスタリスク属性は設定したカスタム値のプレフィックスで書かなければならないので注意してください。
1065
+ * アスタリスクではない代わりのディレクティブ構文を使います。
1066
1066
 
1067
1067
  #### 属性区切り文字
1068
1068
 
1069
- Angular と Slim はそれぞれの構文で括弧を使います。この場合も解決方法は 2 つ:
1069
+ Angular と Slim はそれぞれの構文で括弧を使います。この場合も解決方法は 2 つあります:
1070
1070
  * バインディングに代わりの構文を使う (`bind-...` など)
1071
1071
  * 属性区切り文字を波括弧に限定する
1072
1072
  ```
@@ -1078,7 +1078,7 @@ attr_list_delims: {
1078
1078
  },
1079
1079
  ```
1080
1080
 
1081
- これで次のよう書けます:
1081
+ これで次のように書けます:
1082
1082
  ```
1083
1083
  h1{ #var (bind1)="test" [bind2]="ok" [(bind3)]="works?" *ngIf="expr" *ngFor="expression" } {{it works}}
1084
1084
  ```
@@ -1139,7 +1139,7 @@ markdown:
1139
1139
 
1140
1140
  ### 構文ハイライト
1141
1141
 
1142
- 様々なテキストエディタのためのプラグインがあります。(最も重要なものも含めて - Vim, Emacs や Textmate):
1142
+ 様々なテキストエディタ(Vim Emacs, Textmateなど)のためのプラグインがあります。:
1143
1143
 
1144
1144
  * [Vim](https://github.com/slim-template/vim-slim)
1145
1145
  * [Emacs](https://github.com/slim-template/emacs-slim)
@@ -1160,7 +1160,7 @@ markdown:
1160
1160
 
1161
1161
  *そうです, Slim は最速の Ruby のテンプレートエンジンです!
1162
1162
  production モードの Slim は Erubis (最速のテンプレートエンジン) と同じくらい高速です。
1163
- ありがたいことに何らかの理由であなたが Slim を選択した場合, 私たちは
1163
+ どんな理由であれ, あなたが Slim を選択していただければ嬉しいし, 私たちは
1164
1164
  パフォーマンスが障害にならないだろうことを保証します。*
1165
1165
 
1166
1166
  ベンチマークは `rake bench` で実行します。時間が余計にかかりますが遅い解析ベンチマークを
@@ -1170,18 +1170,18 @@ markdown:
1170
1170
  rake bench slow=1 iterations=1000
1171
1171
  ~~~
1172
1172
 
1173
- 私たちはコミット毎に Travis-CI でベンチマークをとっています。最新のベンチマーク結果はリンク先を確認: <http://travis-ci.org/slim-template/slim>
1173
+ 私たちはコミット毎に Travis-CI でベンチマークをとっています。最新のベンチマーク結果はこちらです: <http://travis-ci.org/slim-template/slim>
1174
1174
 
1175
1175
  ### テストスイートと継続的インテグレーション
1176
1176
 
1177
1177
  Slim は minitest ベースの拡張性のあるテストスイートを提供します。テストは 'rake test' または
1178
1178
  rails のインテグレーションテストの場合 'rake test:rails' で実行できます。
1179
1179
 
1180
- 私たちは現在 markdown ファイルで書かれた人間が読めるテストを試しています: [TESTS.md](test/literate/TESTS.md)
1180
+ 私たちは現在 markdown ファイルで書かれ, 人間が読み書きしやすいテストを試しています: [TESTS.md](test/literate/TESTS.md)
1181
1181
 
1182
1182
  Travis-CI は継続的インテグレーションテストに利用されています: <http://travis-ci.org/slim-template/slim>
1183
1183
 
1184
- Slim はすべての主要な Ruby 実装で動作します:
1184
+ Slim は主要な Ruby 実装全てで動作します:
1185
1185
 
1186
1186
  * Ruby 2.0, 2.1, 2.2 および 2.3
1187
1187
  * JRuby 1.9 mode
@@ -1199,7 +1199,7 @@ $ git clone git://github.com/slim-template/slim
1199
1199
 
1200
1200
  Ruby の 2.3.0, 2.2.0, 2.1.0 と 2.0.0 でテストをすることを覚えておいてください。
1201
1201
 
1202
- もしドキュメントの不足を見つけたら, README.md をアップデートして私たちを助けて下さい。Slim に割く時間がないが, 私たちが知るべきものを何か見つけた場合には issue を送ってください。
1202
+ もしドキュメントの不足を見つけたら, README.md をアップデートして私たちを助けて下さい。Slim に割ける時間がないが, 私たちが知っておくべきことを見つけた場合には issue を送ってください。
1203
1203
 
1204
1204
  ## License
1205
1205
 
@@ -1211,7 +1211,7 @@ Slim は [MIT license](http://www.opensource.org/licenses/MIT) に基づいて
1211
1211
  * [Andrew Stone](https://github.com/stonean)
1212
1212
  * [Fred Wu](https://github.com/fredwu)
1213
1213
 
1214
- ## 寄付とサポート
1214
+ ## 寄付と支援
1215
1215
 
1216
1216
  このプロジェクトをサポートしたい場合, Gittip や Flattr のページを見てください。
1217
1217
 
data/README.md CHANGED
@@ -826,7 +826,7 @@ fits your purposes. You should also be aware that most frameworks already bring
826
826
 
827
827
  ## Text interpolation
828
828
 
829
- Use standard Ruby interpolation. The text will be html escaped by default.
829
+ Use standard Ruby interpolation. The text will be html escaped by default, but you can avoid escaping by using double braces.
830
830
 
831
831
  ~~~ slim
832
832
  body
@@ -25,13 +25,11 @@ class SlimBenchmarks
25
25
  end
26
26
 
27
27
  def init_compiled_benches
28
- haml_pretty = Haml::Engine.new(@haml_code, format: :html5, escape_attrs: false)
29
- haml_ugly = Haml::Engine.new(@haml_code, format: :html5, ugly: true, escape_attrs: false)
28
+ haml = Haml::Engine.new(@haml_code, format: :html5, escape_attrs: false)
30
29
 
31
30
  context = Context.new
32
31
 
33
- haml_pretty.def_method(context, :run_haml_pretty)
34
- haml_ugly.def_method(context, :run_haml_ugly)
32
+ haml.def_method(context, :run_haml)
35
33
  context.instance_eval %{
36
34
  def run_erb; #{ERB.new(@erb_code).src}; end
37
35
  def run_erubis; #{Erubis::Eruby.new(@erb_code).src}; end
@@ -47,16 +45,14 @@ class SlimBenchmarks
47
45
  bench(:compiled, 'temple erb') { context.run_temple_erb }
48
46
  bench(:compiled, 'slim pretty') { context.run_slim_pretty }
49
47
  bench(:compiled, 'slim ugly') { context.run_slim_ugly }
50
- bench(:compiled, 'haml pretty') { context.run_haml_pretty }
51
- bench(:compiled, 'haml ugly') { context.run_haml_ugly }
48
+ bench(:compiled, 'haml') { context.run_haml }
52
49
  end
53
50
 
54
51
  def init_tilt_benches
55
52
  tilt_erb = Tilt::ERBTemplate.new { @erb_code }
56
53
  tilt_erubis = Tilt::ErubisTemplate.new { @erb_code }
57
54
  tilt_temple_erb = Temple::ERB::Template.new { @erb_code }
58
- tilt_haml_pretty = Tilt::HamlTemplate.new(format: :html5) { @haml_code }
59
- tilt_haml_ugly = Tilt::HamlTemplate.new(format: :html5, ugly: true) { @haml_code }
55
+ tilt_haml = Tilt::HamlTemplate.new(format: :html5) { @haml_code }
60
56
  tilt_slim_pretty = Slim::Template.new(pretty: true) { @slim_code }
61
57
  tilt_slim_ugly = Slim::Template.new { @slim_code }
62
58
 
@@ -67,8 +63,7 @@ class SlimBenchmarks
67
63
  bench(:tilt, 'temple erb') { tilt_temple_erb.render(context) }
68
64
  bench(:tilt, 'slim pretty') { tilt_slim_pretty.render(context) }
69
65
  bench(:tilt, 'slim ugly') { tilt_slim_ugly.render(context) }
70
- bench(:tilt, 'haml pretty') { tilt_haml_pretty.render(context) }
71
- bench(:tilt, 'haml ugly') { tilt_haml_ugly.render(context) }
66
+ bench(:tilt, 'haml') { tilt_haml.render(context) }
72
67
  end
73
68
 
74
69
  def init_parsing_benches
@@ -81,8 +76,7 @@ class SlimBenchmarks
81
76
  bench(:parsing, 'temple erb') { Temple::ERB::Template.new { @erb_code }.render(context) }
82
77
  bench(:parsing, 'slim pretty') { Slim::Template.new(pretty: true) { @slim_code }.render(context) }
83
78
  bench(:parsing, 'slim ugly') { Slim::Template.new { @slim_code }.render(context) }
84
- bench(:parsing, 'haml pretty') { Haml::Engine.new(@haml_code, format: :html5).render(context) }
85
- bench(:parsing, 'haml ugly') { Haml::Engine.new(@haml_code, format: :html5, ugly: true).render(context) }
79
+ bench(:parsing, 'haml') { Haml::Engine.new(@haml_code, format: :html5).render(context) }
86
80
  end
87
81
 
88
82
  def run
@@ -112,7 +112,7 @@ and activate logic less mode per render call in your action
112
112
 
113
113
  ## Logic less in Sinatra
114
114
 
115
- Sinata has built-in support for Slim. All you have to do is require the logic less Slim plugin. This can be done in your config.ru:
115
+ Sinatra has built-in support for Slim. All you have to do is require the logic less Slim plugin. This can be done in your config.ru:
116
116
 
117
117
  require 'slim/logic_less'
118
118
 
@@ -63,7 +63,7 @@ module Slim
63
63
  @lookup.each do |lookup|
64
64
  case lookup
65
65
  when :method
66
- return @dict.send(name, &block) if @dict.respond_to?(name)
66
+ return @dict.public_send(name, &block) if @dict.respond_to?(name, false)
67
67
  when :symbol
68
68
  return @dict[name].call(&block) if has_key?(name)
69
69
  when :string
@@ -80,7 +80,7 @@ module Slim
80
80
  @lookup.each do |lookup|
81
81
  case lookup
82
82
  when :method
83
- return @dict.send(name) if @dict.respond_to?(name)
83
+ return @dict.public_send(name) if @dict.respond_to?(name, false)
84
84
  when :symbol
85
85
  return @dict[name] if has_key?(name)
86
86
  when :string
@@ -1,7 +1,10 @@
1
1
  module Slim
2
+ class InvalidAttributeNameError < StandardError; end
2
3
  module Splat
3
4
  # @api private
4
5
  class Builder
6
+ # https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
7
+ INVALID_ATTRIBUTE_NAME_REGEX = /[ \0"'>\/=]/
5
8
  def initialize(options)
6
9
  @options = options
7
10
  @attrs = {}
@@ -25,6 +28,9 @@ module Slim
25
28
  end
26
29
 
27
30
  def attr(name, value)
31
+ if name =~ INVALID_ATTRIBUTE_NAME_REGEX
32
+ raise InvalidAttributeNameError, "Invalid attribute name '#{name}' was rendered"
33
+ end
28
34
  if @attrs[name]
29
35
  if delim = @options[:merge_attrs][name]
30
36
  @attrs[name] += delim + value.to_s
@@ -1,5 +1,5 @@
1
1
  module Slim
2
2
  # Slim version string
3
3
  # @api public
4
- VERSION = '3.0.8'
4
+ VERSION = '3.0.9'
5
5
  end
@@ -65,6 +65,18 @@ p *{ title: '&' }
65
65
  end
66
66
  end
67
67
 
68
+ def test_render_splat_injecting_evil_attr_name
69
+ source = %q{
70
+ p *{ "><script>alert(1)</script><p title" => 'test' }
71
+ }
72
+
73
+ with_html_safe do
74
+ assert_raises Slim::InvalidAttributeNameError do
75
+ render(source, use_html_safe: true)
76
+ end
77
+ end
78
+ end
79
+
68
80
 
69
81
  def test_render_attribute_with_html_safe_true
70
82
  source = %q{
@@ -116,6 +116,26 @@ p
116
116
  assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, scope: object, dictionary_access: :method
117
117
  end
118
118
 
119
+ def test_method_access_without_private
120
+ source = %q{
121
+ p
122
+ - person
123
+ .age = age
124
+ }
125
+
126
+ object = Object.new
127
+ def object.person
128
+ person = Object.new
129
+ def person.age
130
+ 42
131
+ end
132
+ person.singleton_class.class_eval { private :age }
133
+ person
134
+ end
135
+
136
+ assert_html '<p><div class="age"></div></p>', source, scope: object, dictionary_access: :method
137
+ end
138
+
119
139
  def test_instance_variable_access
120
140
  source = %q{
121
141
  p
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slim
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.8
4
+ version: 3.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Mendler
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-05-06 00:00:00.000000000 Z
13
+ date: 2017-11-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: temple