slim 3.0.8 → 3.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +5 -0
- data/README.jp.md +116 -116
- data/README.md +1 -1
- data/benchmarks/run-benchmarks.rb +6 -12
- data/doc/logic_less.md +1 -1
- data/lib/slim/logic_less/context.rb +2 -2
- data/lib/slim/splat/builder.rb +6 -0
- data/lib/slim/version.rb +1 -1
- data/test/core/test_code_escaping.rb +12 -0
- data/test/logic_less/test_logic_less.rb +20 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0236aa35a7627a2fb7adc66568a567c1bef179df
|
4
|
+
data.tar.gz: fb444de0430b65926f4128723782461b6610a8ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51416a80091194733a4ea26d9f813f2cc51a243c788296ee9a9cc19ec02f6b20b09019256bb2de60b8fd535816caf0a45c1c5e962e304409a2b09bb17dc1c9bd
|
7
|
+
data.tar.gz: 8cd78afade033ac099acb3c0d4bc8f8dbb643cfc54cd3b48bd3b348a01493a816e613a9a35ab9097f1ebef647afeecf4d0e73f498f6f87ba5a3ea531a27c7b75
|
data/CHANGES
CHANGED
data/README.jp.md
CHANGED
@@ -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 は
|
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__ に対応した高速,
|
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
|
52
|
+
Temple のアーキテクチャはとても柔軟で, モンキーパッチなしで構文解析とコンパイルのプロセスの拡張が可能です。これはロジックレスのプラグインや I18n が提供する翻訳プラグインに
|
53
53
|
使用されます。ロジックレスモードでは HTML をビルドするために Slim の構文を使いたいが, テンプレートの中で Ruby を書きたくない場合にも Slim を使うことができます。
|
54
54
|
|
55
55
|
### なぜ Slim を使うのか?
|
56
56
|
|
57
57
|
* Slim によって メンテナンスが容易な限りなく最小限のテンプレートを作成でき, 正しい文法の HTML や XML が書けることを保証します。
|
58
|
-
* 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 © #{@year} #{@author}
|
113
113
|
~~~
|
114
114
|
|
115
|
-
インデントについて,
|
115
|
+
インデントについて, インデントの深さはあなたの好みで選択できます。もしあなたが最初のインデントをスペース2つ, その次に5スペースを使いたい場合, それも自由です。マークアップを入れ子にするには最低1つのスペースによるインデントが必要なだけです。
|
116
116
|
|
117
117
|
## ラインインジケータ
|
118
118
|
|
119
119
|
### テキスト `|`
|
120
120
|
|
121
|
-
|
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
|
-
シングルクォートは
|
158
|
+
シングルクォートは `|` と同様に行をコピーしますが, 末尾にスペースが1つ追加されます。
|
159
159
|
|
160
160
|
### インライン html `<` (HTML 形式)
|
161
161
|
|
162
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
スプラット
|
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`
|
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
|
-
カスタムショートカットを定義することができます (
|
610
|
+
カスタムショートカットを定義することができます (id の`#` , class の `.` のように)。
|
611
611
|
|
612
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
868
|
-
| css: | なし | ショートカット | css
|
869
|
-
| sass: | sass | コンパイル時 | sass
|
870
|
-
| scss: | sass | コンパイル時 | scss
|
871
|
-
| less: | less | コンパイル時 | less
|
872
|
-
| styl: | styl | コンパイル時 | stylus
|
873
|
-
| coffee: | coffee-script | コンパイル時 |
|
874
|
-
| asciidoc: | asciidoctor | コンパイル時 + 展開 | AsciiDoc
|
875
|
-
| markdown: | redcarpet/rdiscount/kramdown | コンパイル時 + 展開 | Markdown
|
876
|
-
| textile: | redcloth | コンパイル時 + 展開 | textile
|
877
|
-
| creole: | creole | コンパイル時 + 展開 | cleole
|
878
|
-
| wiki:, mediawiki: | wikicloth | コンパイル時 + 展開 | wiki
|
879
|
-
| rdoc: | rdoc | コンパイル時 + 展開 | RDoc
|
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
|
-
|
944
|
+
沢山ありますが, 素晴らしいことに, Slim は設定キーをチェックし, 無効な設定キーを使用しようとしていた場合, エラーを返してくれます。
|
945
945
|
|
946
946
|
|
947
|
-
|
|
947
|
+
| 型 | 名前 | デフォルト | 用途 |
|
948
948
|
| ---- | ---- | ---------- | ---- |
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
| Class | :generator | Temple::Generators::StringBuffer/ RailsOutputBuffer | Temple コードジェネレータ (
|
971
|
-
|
|
972
|
-
|
|
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<Symbol,String> | :enable_engines | nil <i>(すべて有効)</i> | 有効な埋め込みエンジンリスト (ホワイトリスト) |
|
957
|
+
| Array<Symbol,String> | :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<String> | :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.
|
986
|
+
5. Praser/Filter/Generator `thread_options`, `options` (例: `Slim::Parser`, `Slim::Compiler`)
|
987
987
|
|
988
|
-
`Temple::Engine`
|
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
|
1041
|
+
後は .slim 拡張子を使うだけです。
|
1042
1042
|
|
1043
1043
|
#### ストリーミング
|
1044
1044
|
|
1045
|
-
HTTP
|
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`
|
1060
|
+
アスタリスクは Angular2 でも構造ディレクティブとして `*ngIf` などで使われます。デフォルトの設定値では, Slim と Angular2 の構文は衝突します。
|
1061
1061
|
|
1062
1062
|
解決方法は 2 つあります:
|
1063
1063
|
|
1064
|
-
* `splat_prefix` に 2
|
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
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|
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
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
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
|
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
|
data/doc/logic_less.md
CHANGED
@@ -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
|
-
|
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.
|
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.
|
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
|
data/lib/slim/splat/builder.rb
CHANGED
@@ -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
|
data/lib/slim/version.rb
CHANGED
@@ -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.
|
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-
|
13
|
+
date: 2017-11-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: temple
|