slim 3.0.9 → 4.0.0

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
- SHA1:
3
- metadata.gz: 0236aa35a7627a2fb7adc66568a567c1bef179df
4
- data.tar.gz: fb444de0430b65926f4128723782461b6610a8ef
2
+ SHA256:
3
+ metadata.gz: b6aa24cf9ce985085cb2c3f4d43b948aba03bc19afbf165c090f4e4f63497cb6
4
+ data.tar.gz: 23c6a1e7778c9feca0c85a2e5eee90e8019e008c4bbb58b533be2ad2733a9a41
5
5
  SHA512:
6
- metadata.gz: 51416a80091194733a4ea26d9f813f2cc51a243c788296ee9a9cc19ec02f6b20b09019256bb2de60b8fd535816caf0a45c1c5e962e304409a2b09bb17dc1c9bd
7
- data.tar.gz: 8cd78afade033ac099acb3c0d4bc8f8dbb643cfc54cd3b48bd3b348a01493a816e613a9a35ab9097f1ebef647afeecf4d0e73f498f6f87ba5a3ea531a27c7b75
6
+ metadata.gz: e799d123737fd44fd02e9bb889dac596bdea8093db6395759908565325a3670a142589820e534b248d23751ea3de51694723392827ed4fe56b4867abfa4f306f
7
+ data.tar.gz: '031793ed5801a279b8de180b2058357b3ce35c413b3152dfb6cf30220a574c405ad712aa6d26fbdebb1b27eecc731657bd32001efdf1bf310eef041c1001666f'
@@ -1,16 +1,16 @@
1
+ # https://www.ruby-lang.org/en/downloads/releases/
1
2
  language: ruby
2
-
3
3
  rvm:
4
- - ruby-head
5
- - 2.3.3
6
- - 2.2.6
7
- - 2.1.10
8
- - 2.0.0
9
- - rbx-3
10
- - jruby-head
11
- - jruby-19mode
4
+ - 2.5.1
5
+ - 2.5.0
6
+ - 2.4.4
7
+ - 2.4.3
8
+ - jruby-9.2.0.0
9
+ - jruby-9.1.17.0
12
10
 
13
- sudo: false
11
+ # Recommend sudo required when using trusty dist
12
+ # https://docs.travis-ci.com/user/reference/trusty/
13
+ sudo: required
14
14
  dist: trusty
15
15
 
16
16
  script: "bundle exec rake $TASK"
@@ -23,39 +23,13 @@ env:
23
23
  # travis encrypt CODECLIMATE_REPO_TOKEN=???
24
24
  - secure: "a7sD9iwPJJn3Fj+mn62GAmy/PEguh3elrilsp1KS+WfDiCiIKD8Q5KG2Jv67DGcQAGI3dPWeh7+ZhZ/W7nEipwWUBmSvGYVeoF63y8j6mNRLeekqspj94l47hXyFePj9bCadY1b1/xY4lE1pMEU8eA8AOUHUqCSuH+Kk/MuvyLM="
25
25
  matrix:
26
- - "TASK=test:core_and_plugins TILT=master"
27
- - "TASK=test:core_and_plugins TILT=1.3.7"
28
- - "TASK=test:core_and_plugins TILT=1.4.1"
29
- - "TASK=test:core_and_plugins TILT=2.0.1"
30
- - "TASK=test:rails RAILS=master"
31
- - "TASK=test:rails RAILS=3.1.12 TILT=1.3.4"
32
- - "TASK=test:rails RAILS=3.2.21 TILT=1.3.4"
33
- - "TASK=test:rails RAILS=4.0.13"
34
- - "TASK=test:rails RAILS=4.1.10"
35
- - "TASK=test:rails RAILS=4.2.1"
36
- - "TASK=test:sinatra SINATRA=master"
37
- - "TASK=test:sinatra SINATRA=1.3.6"
38
- - "TASK=test:sinatra SINATRA=1.4.6"
26
+ - "TASK=test:core_and_plugins"
27
+ - "TASK=test:rails RAILS=5.2.0"
28
+ - "TASK=test:rails RAILS=5.1.6"
29
+ - "TASK=test:sinatra SINATRA=2.0.1"
30
+ - "TASK=test:sinatra SINATRA=1.4.8"
39
31
  - "TASK=bench"
40
32
  - "TASK=bench slow=1"
41
33
 
42
- matrix:
43
- exclude:
44
- - rvm: rbx-3
45
- env: "TASK=test:rails RAILS=master"
46
- - rvm: 2.0.0
47
- env: "TASK=test:rails RAILS=master"
48
- - rvm: 2.3.3
49
- env: "TASK=test:rails RAILS=3.1.12 TILT=1.3.4"
50
- - rvm: 2.3.3
51
- env: "TASK=test:rails RAILS=3.2.21 TILT=1.3.4"
52
- allow_failures:
53
- - env: "TASK=test:core_and_plugins TILT=master"
54
- - env: "TASK=test:rails RAILS=master"
55
- - env: "TASK=test:sinatra SINATRA=master"
56
- - rvm: ruby-head
57
- - rvm: jruby-19mode
58
- - rvm: jruby-head
59
-
60
34
  notifications:
61
35
  irc: "chat.freenode.net#slim-lang"
data/CHANGES CHANGED
@@ -1,3 +1,12 @@
1
+ 4.0.0 (2018-08-26)
2
+ * Add ability to specify attributes for embedded engines using TagEngine - #653
3
+ * Set Tilt's default encoding to utf-8 - #800
4
+ * Prevent generation of invalid Ruby code in heredoc - #770
5
+ * Don't convert underscores to dashes on data attributes - #807 [Backward incompatible]
6
+ * Update description in README.jp.md - #795
7
+ * Removed support for embedded engines: Asciidoc, Builder, Creole, Erb, Nokogiri, Opal, Org-Ruby, Styl, Wikicloth
8
+ * Fix tests
9
+
1
10
  3.0.9 (2017-11-09)
2
11
 
3
12
  * Fixed Cross-site Scripting in splat attributes names (See #767)
data/Gemfile CHANGED
@@ -2,13 +2,17 @@ source 'https://rubygems.org/'
2
2
 
3
3
  gemspec
4
4
 
5
- if ENV['TRAVIS'] || ENV['TEMPLE'] == 'master'
6
- gem 'temple', github: 'judofyr/temple'
5
+ if ENV['TRAVIS']
6
+ gem 'rails-controller-testing'
7
+ end
8
+
9
+ if ENV['TEMPLE'] == 'master'
10
+ gem 'temple', :github => 'judofyr/temple'
7
11
  end
8
12
 
9
13
  if ENV['TILT']
10
14
  if ENV['TILT'] == 'master'
11
- gem 'tilt', github: 'rtomayko/tilt'
15
+ gem 'tilt', :github => 'rtomayko/tilt'
12
16
  else
13
17
  gem 'tilt', "= #{ENV['TILT']}"
14
18
  end
@@ -16,14 +20,8 @@ end
16
20
 
17
21
  if ENV['RAILS']
18
22
  # we need some smarter test logic for the different Rails versions
19
- if RUBY_VERSION >= '2.1.0'
20
- gem 'nokogiri'
21
- else
22
- gem 'nokogiri', '~> 1.6.8'
23
- end
24
-
25
23
  if ENV['RAILS'] == 'master'
26
- gem 'rails', github: 'rails/rails'
24
+ gem 'rails', :github => 'rails/rails'
27
25
  else
28
26
  gem 'rails', "= #{ENV['RAILS']}"
29
27
  end
@@ -48,19 +46,16 @@ end
48
46
  if ENV['SINATRA']
49
47
  gem 'rack-test'
50
48
  if ENV['SINATRA'] == 'master'
51
- gem 'sinatra', github: 'sinatra/sinatra'
49
+ gem 'sinatra', :github => 'sinatra/sinatra'
52
50
  else
53
- gem 'sinatra', "= #{ENV['SINATRA']}"
51
+ # Need the slim_test.rb file not included in the Sinatra gem.
52
+ gem 'sinatra', :github => 'sinatra/sinatra', :tag => "v#{ENV['SINATRA']}"
54
53
  end
55
54
  end
56
55
 
57
56
  gem 'rake', '>= 0.8.7'
58
57
  gem 'sass', '>= 3.1.0'
59
58
  gem 'kramdown'
60
- gem 'creole'
61
- gem 'builder'
62
- gem 'asciidoctor'
63
- gem 'org-ruby'
64
59
 
65
60
  if ENV['TASK'] == 'bench'
66
61
  gem 'benchmark-ips'
@@ -1,6 +1,6 @@
1
1
  # Slim
2
2
 
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")
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) [![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)
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
6
  Slim は 不可解にならない程度に view の構文を本質的な部品まで減らすことを目指したテンプレート言語です。標準的な HTML テンプレートからどれだけのものを減らせるか、検証するところから始まりました。(<, >, 閉じタグなど) 多くの人が Slim に興味を持ったことで, 機能的で柔軟な構文に成長しました。
@@ -40,7 +40,7 @@ Slim は 不可解にならない程度に view の構文を本質的な部品
40
40
 
41
41
  ### Slim とは?
42
42
 
43
- Slim は __Rails3 および 4__ に対応した高速, 軽量なテンプレートエンジンです。主要な Ruby の実装全てでしっかりテストされています。
43
+ Slim は __Rails3 以降__ に対応した高速, 軽量なテンプレートエンジンです。主要な Ruby の実装全てでしっかりテストされています。
44
44
  私たちは継続的インテグレーションを採用しています。(travis-ci)
45
45
 
46
46
  Slim の核となる構文は1つの考えによって導かれています: "この動作を行うために最低限必要なものは何か。"
@@ -118,8 +118,7 @@ html
118
118
 
119
119
  ### テキスト `|`
120
120
 
121
- パイプを使うと, Slim は行をコピーします。基本的にどのような処理でもエスケープします。
122
- パイプよりも深くインデントされた全ての行がコピーされます。
121
+ パイプを使うと, Slim はパイプよりも深くインデントされた全ての行をコピーします。行中の処理は基本的にどのようなものでもエスケープされます。
123
122
 
124
123
  ~~~ slim
125
124
  body
@@ -869,17 +868,10 @@ p: markdown: Tag with **inline** markdown!
869
868
  | sass: | sass | コンパイル時 | sass コードを埋め込み、style タグで囲む |
870
869
  | scss: | sass | コンパイル時 | scss コードを埋め込み、style タグで囲む |
871
870
  | less: | less | コンパイル時 | less コードを埋め込み、style タグで囲む |
872
- | styl: | styl | コンパイル時 | stylus コードを埋め込み、 style タグで囲む |
873
871
  | coffee: | coffee-script | コンパイル時 | CoffeeScript をコンパイルし、 script タグで囲む |
874
- | asciidoc: | asciidoctor | コンパイル時 + 展開 | AsciiDoc をコンパイルし、テキスト中の # \{variables} を展開 |
875
872
  | markdown: | redcarpet/rdiscount/kramdown | コンパイル時 + 展開 | Markdown をコンパイルし、テキスト中の # \{variables} を展開 |
876
873
  | textile: | redcloth | コンパイル時 + 展開 | textile をコンパイルし、テキスト中の # \{variables} を展開 |
877
- | creole: | creole | コンパイル時 + 展開 | cleole をコンパイルし、テキスト中の # \{variables} を展開 |
878
- | wiki:, mediawiki: | wikicloth | コンパイル時 + 展開 | wiki をコンパイルし、テキスト中の # \{variables} を展開 |
879
874
  | rdoc: | rdoc | コンパイル時 + 展開 | RDoc をコンパイルし、テキスト中の # \{variables} を展開 |
880
- | builder: | builder | プレコンパイル | builder コードの埋め込み |
881
- | nokogiri: | nokogiri | プレコンパイル | nokogiri コードの埋め込み |
882
- | erb: | なし | プレコンパイル | erb コードの埋め込み |
883
875
 
884
876
  埋め込みエンジンは Slim の `Slim::Embedded` フィルタのオプションで直接設定されます。例:
885
877
 
@@ -887,6 +879,29 @@ p: markdown: Tag with **inline** markdown!
887
879
  Slim::Embedded.options[:markdown] = {auto_ids: false}
888
880
  ~~~
889
881
 
882
+ 以下埋め込みエンジンの場合はHTMLのattributeも指定できます:
883
+
884
+ * Javascript
885
+ * CSS
886
+ * CoffeeScript
887
+ * LESS
888
+ * SASS
889
+ * SCSS
890
+
891
+ 例:
892
+
893
+ ~~~ scss
894
+ scss class="myClass":
895
+ $color: #f00;
896
+ body { color: $color; }
897
+ ~~~
898
+
899
+ レンダリング結果:
900
+
901
+ ~~~ html
902
+ <style class="myClass" type="text/css">body{color:red}</style>
903
+ ~~~
904
+
890
905
  ## Slim の設定
891
906
 
892
907
  Slim とその基礎となる [Temple](https://github.com/judofyr/temple) は非常に柔軟に設定可能です。
@@ -1271,3 +1286,4 @@ Slim は [MIT license](http://www.opensource.org/licenses/MIT) に基づいて
1271
1286
  * [Pug (Successor of Jade, Similar engine for javascript)](https://github.com/pugjs/pug)
1272
1287
  * [Sweet (Similar engine which also allows to write classes and functions)](https://github.com/joaomdmoura/sweet)
1273
1288
  * [Amber (Similar engine for Go)](https://github.com/eknkc/amber)
1289
+ * [Slang (Slim-inspired templating language for Crystal)](https://github.com/jeromegn/slang)
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Slim
2
2
 
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")
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) [![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)
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
6
  Slim is a template language whose goal is to reduce the view syntax to the essential parts without becoming cryptic. It started as an exercise to see how much could be removed from a standard html template (<, >, closing tags, etc...). As more people took an interest in Slim, the functionality grew and so did the flexibility of the syntax.
@@ -40,7 +40,7 @@ A short list of the features...
40
40
 
41
41
  ### What is Slim?
42
42
 
43
- Slim is a fast, lightweight templating engine with support for __Rails 3 and 4__. It has been heavily tested on all major ruby implementations. We use
43
+ Slim is a fast, lightweight templating engine with support for __Rails 3 and later__. It has been heavily tested on all major ruby implementations. We use
44
44
  continuous integration (travis-ci).
45
45
 
46
46
  Slim's core syntax is guided by one thought: "What's the minimum required to make this work".
@@ -869,17 +869,10 @@ Supported engines:
869
869
  | sass: | sass | Compile time | Embed sass code and wrap in style tag |
870
870
  | scss: | sass | Compile time | Embed scss code and wrap in style tag |
871
871
  | less: | less | Compile time | Embed less css code and wrap in style tag |
872
- | styl: | styl | Compile time | Embed stylus css code and wrap in style tag |
873
872
  | coffee: | coffee-script | Compile time | Compile coffee script code and wrap in script tag |
874
- | asciidoc: | asciidoctor | Compile time + Interpolation | Compile AsciiDoc code and interpolate #\{variables} in text |
875
873
  | markdown: | redcarpet/rdiscount/kramdown | Compile time + Interpolation | Compile markdown code and interpolate #\{variables} in text |
876
874
  | textile: | redcloth | Compile time + Interpolation | Compile textile code and interpolate #\{variables} in text |
877
- | creole: | creole | Compile time + Interpolation | Compile creole code and interpolate #\{variables} in text |
878
- | wiki:, mediawiki: | wikicloth | Compile time + Interpolation | Compile wiki code and interpolate #\{variables} in text |
879
875
  | rdoc: | rdoc | Compile time + Interpolation | Compile rdoc code and interpolate #\{variables} in text |
880
- | builder: | builder | Precompiled | Embed builder code |
881
- | nokogiri: | nokogiri | Precompiled | Embed nokogiri builder code |
882
- | erb: | none | Precompiled | Embed erb code |
883
876
 
884
877
  The embedded engines can be configured in Slim by setting the options directly on the `Slim::Embedded` filter. Example:
885
878
 
@@ -887,6 +880,28 @@ The embedded engines can be configured in Slim by setting the options directly o
887
880
  Slim::Embedded.options[:markdown] = {auto_ids: false}
888
881
  ~~~
889
882
 
883
+ You can also specify HTML attributes for the following embedded engines:
884
+ * Javascript
885
+ * CSS
886
+ * CoffeeScript
887
+ * LESS
888
+ * SASS
889
+ * SCSS
890
+
891
+ Example:
892
+
893
+ ~~~ scss
894
+ scss class="myClass":
895
+ $color: #f00;
896
+ body { color: $color; }
897
+ ~~~
898
+
899
+ This will generate the following HTML:
900
+
901
+ ~~~ html
902
+ <style class="myClass" type="text/css">body{color:red}</style>
903
+ ~~~
904
+
890
905
  ## Configuring Slim
891
906
 
892
907
  Slim and the underlying [Temple](https://github.com/judofyr/temple) framework are highly configurable.
@@ -1271,3 +1286,4 @@ Language ports/Similar languages:
1271
1286
  * [Pug (Successor of Jade, Similar engine for javascript)](https://github.com/pugjs/pug)
1272
1287
  * [Sweet (Similar engine which also allows to write classes and functions)](https://github.com/joaomdmoura/sweet)
1273
1288
  * [Amber (Similar engine for Go)](https://github.com/eknkc/amber)
1289
+ * [Slang (Slim-inspired templating language for Crystal)](https://github.com/jeromegn/slang)
@@ -1,8 +1,10 @@
1
1
  <!DOCTYPE HTML>
2
2
 
3
- <html>
3
+ <html lang="en">
4
4
  <head>
5
5
  <title>Simple Benchmark</title>
6
+ <meta charset="utf-8">
7
+ <meta name="description" content="This is an example of a meta description.">
6
8
  </head>
7
9
  <body>
8
10
  <h1><%= header %></h1>
@@ -20,4 +22,4 @@
20
22
  <p>The list is empty.</p>
21
23
  <% end %>
22
24
  </body>
23
- </html>
25
+ </html>
@@ -1,8 +1,10 @@
1
1
  !!! html
2
2
 
3
- %html
3
+ %html{ lang: "en" }
4
4
  %head
5
5
  %title Simple Benchmark
6
+ %meta{ charset: "utf-8" }
7
+ %meta{ name: "description", content: "This is an example of a meta description." }
6
8
  %body
7
9
  %h1= header
8
10
  - unless item.empty?
@@ -1,7 +1,9 @@
1
1
  doctype html
2
- html
2
+ html lang="en"
3
3
  head
4
4
  title Simple Benchmark
5
+ meta charset="utf-8"
6
+ meta name="description" content="This is an example of a meta description."
5
7
  body
6
8
  h1 == header
7
9
  - unless item.empty?
@@ -96,11 +96,11 @@ module Slim
96
96
  @disabled = normalize_engine_list(options[:disable_engines])
97
97
  end
98
98
 
99
- def on_slim_embedded(name, body)
99
+ def on_slim_embedded(name, body, attrs)
100
100
  name = name.to_sym
101
101
  raise(Temple::FilterError, "Embedded engine #{name} is disabled") unless enabled?(name)
102
102
  @engines[name] ||= self.class.create(name, options)
103
- @engines[name].on_slim_embedded(name, body)
103
+ @engines[name].on_slim_embedded(name, body, attrs)
104
104
  end
105
105
 
106
106
  def enabled?(name)
@@ -131,9 +131,10 @@ module Slim
131
131
 
132
132
  # Basic tilt engine
133
133
  class TiltEngine < Engine
134
- def on_slim_embedded(engine, body)
134
+ def on_slim_embedded(engine, body, attrs)
135
135
  tilt_engine = Tilt[engine] || raise(Temple::FilterError, "Tilt engine #{engine} is not available.")
136
136
  tilt_options = options[engine.to_sym] || {}
137
+ tilt_options[:default_encoding] ||= 'utf-8'
137
138
  [:multi, tilt_render(tilt_engine, tilt_options, collect_text(body)), collect_newlines(body)]
138
139
  end
139
140
 
@@ -159,16 +160,6 @@ module Slim
159
160
  end
160
161
  end
161
162
 
162
- # Tilt-based engine which is precompiled
163
- class PrecompiledTiltEngine < TiltEngine
164
- protected
165
-
166
- def tilt_render(tilt_engine, tilt_options, text)
167
- # HACK: Tilt::Engine#precompiled is protected
168
- [:dynamic, tilt_engine.new(tilt_options) { text }.send(:precompiled, {}).first]
169
- end
170
- end
171
-
172
163
  # Static template with interpolated ruby code
173
164
  class InterpolateTiltEngine < TiltEngine
174
165
  def collect_text(body)
@@ -190,35 +181,31 @@ module Slim
190
181
  end
191
182
  end
192
183
 
193
- # ERB engine (uses the Temple ERB implementation)
194
- class ERBEngine < Engine
195
- def on_slim_embedded(engine, body)
196
- [:multi, [:newline], erb_parser.call(collect_text(body))]
197
- end
198
-
199
- protected
200
-
201
- def erb_parser
202
- @erb_parser ||= Temple::ERB::Parser.new
203
- end
204
- end
205
-
206
184
  # Tag wrapper engine
207
185
  # Generates a html tag and wraps another engine (specified via :engine option)
208
186
  class TagEngine < Engine
209
187
  disable_option_validator!
210
188
 
211
- def on_slim_embedded(engine, body)
189
+ def on_slim_embedded(engine, body, attrs)
190
+
191
+ unless options[:attributes].empty?
192
+ options[:attributes].map do|k, v|
193
+ attrs << [:html, :attr, k, [:static, v]]
194
+ end
195
+ end
196
+
212
197
  if options[:engine]
213
198
  opts = {}.update(options)
214
199
  opts.delete(:engine)
215
200
  opts.delete(:tag)
216
201
  opts.delete(:attributes)
217
202
  @engine ||= options[:engine].new(opts)
218
- body = @engine.on_slim_embedded(engine, body)
203
+ body = @engine.on_slim_embedded(engine, body, attrs)
219
204
  end
220
- [:html, :tag, options[:tag], [:html, :attrs, *options[:attributes].map {|k, v| [:html, :attr, k, [:static, v]] }], body]
205
+
206
+ [:html, :tag, options[:tag], attrs, body]
221
207
  end
208
+
222
209
  end
223
210
 
224
211
  # Javascript wrapper engine.
@@ -228,41 +215,29 @@ module Slim
228
215
 
229
216
  set_options tag: :script, attributes: {}
230
217
 
231
- def on_slim_embedded(engine, body)
232
- super(engine, [:html, :js, body])
218
+ def on_slim_embedded(engine, body, attrs)
219
+ super(engine, [:html, :js, body], attrs)
233
220
  end
234
221
  end
235
222
 
236
223
  # Embeds ruby code
237
224
  class RubyEngine < Engine
238
- def on_slim_embedded(engine, body)
239
- [:multi, [:newline], [:code, collect_text(body)]]
225
+ def on_slim_embedded(engine, body, attrs)
226
+ [:multi, [:newline], [:code, "#{collect_text(body)}\n"]]
240
227
  end
241
228
  end
242
229
 
243
230
  # These engines are executed at compile time, embedded ruby is interpolated
244
- register :asciidoc, InterpolateTiltEngine
245
231
  register :markdown, InterpolateTiltEngine
246
232
  register :textile, InterpolateTiltEngine
247
233
  register :rdoc, InterpolateTiltEngine
248
- register :creole, InterpolateTiltEngine
249
- register :wiki, InterpolateTiltEngine
250
- register :mediawiki, InterpolateTiltEngine
251
- register :org, InterpolateTiltEngine
252
234
 
253
235
  # These engines are executed at compile time
254
236
  register :coffee, JavaScriptEngine, engine: TiltEngine
255
- register :opal, JavaScriptEngine, engine: TiltEngine
256
237
  register :less, TagEngine, tag: :style, attributes: { type: 'text/css' }, engine: TiltEngine
257
- register :styl, TagEngine, tag: :style, attributes: { type: 'text/css' }, engine: TiltEngine
258
238
  register :sass, TagEngine, :pretty, tag: :style, attributes: { type: 'text/css' }, engine: SassEngine
259
239
  register :scss, TagEngine, :pretty, tag: :style, attributes: { type: 'text/css' }, engine: SassEngine
260
240
 
261
- # These engines are precompiled, code is embedded
262
- register :erb, ERBEngine
263
- register :nokogiri, PrecompiledTiltEngine
264
- register :builder, PrecompiledTiltEngine
265
-
266
241
  # Embedded javascript/css
267
242
  register :javascript, JavaScriptEngine
268
243
  register :css, TagEngine, tag: :style, attributes: { type: 'text/css' }
@@ -7,14 +7,17 @@ module Slim
7
7
  TextTypes << :verbatim | :explicit | :implicit | :inline
8
8
 
9
9
  Expression <<
10
- [:slim, :control, String, Expression] |
11
- [:slim, :output, Bool, String, Expression] |
12
- [:slim, :interpolate, String] |
13
- [:slim, :embedded, String, Expression] |
14
- [:slim, :text, TextTypes, Expression] |
10
+ [:slim, :control, String, Expression] |
11
+ [:slim, :output, Bool, String, Expression] |
12
+ [:slim, :interpolate, String] |
13
+ [:slim, :embedded, String, Expression, HTMLAttrGroup] |
14
+ [:slim, :text, TextTypes, Expression] |
15
15
  [:slim, :attrvalue, Bool, String]
16
16
 
17
17
  HTMLAttr <<
18
18
  [:slim, :splat, String]
19
+
20
+ HTMLAttrGroup <<
21
+ [:html, :attrs, 'HTMLAttr*']
19
22
  end
20
23
  end
@@ -77,11 +77,15 @@ module Slim
77
77
  @code_attr_delims_re = /\A[#{keys}]/
78
78
  keys = Regexp.escape @attr_list_delims.keys.join
79
79
  @attr_list_delims_re = /\A\s*([#{keys}])/
80
- @embedded_re = /\A(#{Regexp.union(Embedded.engines.keys.map(&:to_s))}):(\s*)/
80
+ @embedded_re = /\A(#{Regexp.union(Embedded.engines.keys.map(&:to_s))})(?:\s*(?:(.*)))?:(\s*)/
81
81
  keys = Regexp.escape ('"\'></='.split(//) + @attr_list_delims.flatten + @code_attr_delims.flatten).uniq.join
82
82
  @attr_name = "\\A\\s*([^\0\s#{keys}]+)"
83
83
  @quoted_attr_re = /#{@attr_name}\s*=(=?)\s*("|')/
84
84
  @code_attr_re = /#{@attr_name}\s*=(=?)\s*/
85
+
86
+ splat_prefix = Regexp.escape(options[:splat_prefix])
87
+ splat_regexp_source = '\A\s*' << splat_prefix << '(?=[^\s]+)'
88
+ @splat_attrs_regexp = Regexp.new(splat_regexp_source)
85
89
  end
86
90
 
87
91
  # Compile string to Temple expression
@@ -180,7 +184,7 @@ module Slim
180
184
  @stacks.pop
181
185
  end
182
186
 
183
- # This line's indentation happens lie "between" two other line's
187
+ # This line's indentation happens to lie "between" two other line's
184
188
  # indentation:
185
189
  #
186
190
  # hello
@@ -238,7 +242,9 @@ module Slim
238
242
  @stacks << block
239
243
  when @embedded_re
240
244
  # Embedded template detected. It is treated as block.
241
- @stacks.last << [:slim, :embedded, $1, parse_text_block($', @orig_line.size - $'.size + $2.size)]
245
+ @line = $2
246
+ attrs = parse_attributes
247
+ @stacks.last << [:slim, :embedded, $1, parse_text_block($', @orig_line.size - $'.size + $2.size), attrs]
242
248
  when /\Adoctype\b/
243
249
  # Found doctype declaration
244
250
  @stacks.last << [:html, :doctype, $'.strip]
@@ -362,7 +368,11 @@ module Slim
362
368
  # Block expansion
363
369
  @line = $'
364
370
  if @line =~ @embedded_re
365
- tag << [:slim, :embedded, $1, parse_text_block($', @orig_line.size - @line.size + $2.size)]
371
+
372
+ # Parse attributes
373
+ @line = $2
374
+ attrs = parse_attributes
375
+ tag << [:slim, :embedded, $1, parse_text_block($', @orig_line.size - $'.size + $2.size), attrs]
366
376
  else
367
377
  (@line =~ @tag_re) || syntax_error!('Expected tag')
368
378
  @line = $' if $1
@@ -401,7 +411,7 @@ module Slim
401
411
  end
402
412
  end
403
413
 
404
- def parse_attributes(attributes)
414
+ def parse_attributes(attributes = [:html, :attrs])
405
415
  # Check to see if there is a delimiter right after the tag name
406
416
  delimiter = nil
407
417
  if @line =~ @attr_list_delims_re
@@ -414,10 +424,6 @@ module Slim
414
424
  end_re = /\A\s*#{Regexp.escape delimiter}/
415
425
  end
416
426
 
417
- splat_prefix = Regexp.escape(options[:splat_prefix])
418
- splat_regexp_source = '\A\s*' << splat_prefix << '(?=[^\s]+)'
419
- @splat_attrs_regexp = Regexp.new(splat_regexp_source)
420
-
421
427
  while true
422
428
  case @line
423
429
  when @splat_attrs_regexp
@@ -461,6 +467,7 @@ module Slim
461
467
  end
462
468
  end
463
469
  end
470
+ attributes || [:html, :attrs]
464
471
  end
465
472
 
466
473
  def parse_ruby_code(outer_delimiter)
@@ -91,7 +91,7 @@ module Slim
91
91
  def hyphen_attr(name, escape, value)
92
92
  if Hash === value
93
93
  value.each do |n, v|
94
- hyphen_attr("#{name}-#{n.to_s.gsub('_', '-')}", escape, v)
94
+ hyphen_attr("#{name}-#{n}", escape, v)
95
95
  end
96
96
  else
97
97
  attr(name, escape_html(value != true && escape, value))
@@ -1,5 +1,5 @@
1
1
  module Slim
2
2
  # Slim version string
3
3
  # @api public
4
- VERSION = '3.0.9'
4
+ VERSION = '4.0.0'
5
5
  end
@@ -20,5 +20,5 @@ Gem::Specification.new do |s|
20
20
  s.required_ruby_version = '>=2.0.0'
21
21
 
22
22
  s.add_runtime_dependency('temple', ['>= 0.7.6', '< 0.9'])
23
- s.add_runtime_dependency('tilt', ['>= 1.3.3', '< 2.1'])
23
+ s.add_runtime_dependency('tilt', ['>= 2.0.6', '< 2.1'])
24
24
  end
@@ -180,4 +180,15 @@ p
180
180
  }
181
181
  assert_html '', source
182
182
  end
183
+
184
+ def test_output_format_with_if
185
+ source = %q{
186
+ h3.subtitle
187
+ - if true
188
+ a href="#" Title true
189
+ - else
190
+ a href="#" Title false
191
+ }
192
+ assert_html '<h3 class="subtitle"><a href="#">Title true</a></h3>', source
193
+ end
183
194
  end
@@ -13,7 +13,7 @@ p
13
13
  def test_render_with_trailing_whitespace
14
14
  source = %q{
15
15
  p
16
- =' hello_world
16
+ => hello_world
17
17
  }
18
18
 
19
19
  assert_html '<p>Hello World from @env </p>', source
@@ -21,7 +21,7 @@ p
21
21
 
22
22
  def test_render_with_trailing_whitespace_after_tag
23
23
  source = %q{
24
- p=' hello_world
24
+ p=> hello_world
25
25
  }
26
26
 
27
27
  assert_html '<p>Hello World from @env</p> ', source
@@ -30,7 +30,7 @@ p=' hello_world
30
30
  def test_no_escape_render_with_trailing_whitespace
31
31
  source = %q{
32
32
  p
33
- ==' hello_world
33
+ ==> hello_world
34
34
  }
35
35
 
36
36
  assert_html '<p>Hello World from @env </p>', source
@@ -38,7 +38,7 @@ p
38
38
 
39
39
  def test_no_escape_render_with_trailing_whitespace_after_tag
40
40
  source = %q{
41
- p==' hello_world
41
+ p==> hello_world
42
42
  }
43
43
 
44
44
  assert_html '<p>Hello World from @env</p> ', source
@@ -146,7 +146,7 @@ private
146
146
 
147
147
  # case 1. $stdin → $stdout
148
148
  unless options[:stdin_stdout] == false
149
- out, err = exec_slimrb *args, '--stdin' do |i|
149
+ out, err = exec_slimrb(*args, '--stdin') do |i|
150
150
  i.write content
151
151
  end
152
152
  yield out, err
@@ -155,7 +155,7 @@ private
155
155
  # case 2. file → $stdout
156
156
  unless options[:file_stdout] == false
157
157
  with_tempfile content do |in_file|
158
- out, err = exec_slimrb *args, in_file
158
+ out, err = exec_slimrb(*args, in_file)
159
159
  yield out, err
160
160
  end
161
161
  end
@@ -163,7 +163,7 @@ private
163
163
  # case 3. $stdin → file
164
164
  unless options[:stdin_file] == false
165
165
  with_tempfile content do |out_file|
166
- _, err = exec_slimrb *args, '--stdin', out_file do |i|
166
+ _, err = exec_slimrb(*args, '--stdin', out_file) do |i|
167
167
  i.write content
168
168
  end
169
169
  yield File.read(out_file), err
@@ -174,7 +174,7 @@ private
174
174
  unless options[:file_file] == false
175
175
  with_tempfile '' do |out_file|
176
176
  with_tempfile content do |in_file|
177
- _, err = exec_slimrb *args, in_file, out_file do |i|
177
+ _, err = exec_slimrb(*args, in_file, out_file) do |i|
178
178
  i.write content
179
179
  end
180
180
  yield File.read(out_file), err
@@ -1,35 +1,7 @@
1
1
  require 'helper'
2
- require 'erb' #asciidoctor fail to load it randomly
2
+ require 'erb'
3
3
 
4
4
  class TestSlimEmbeddedEngines < TestSlim
5
- def test_render_with_erb
6
- source = %q{
7
- p
8
- - text = 'before erb block'
9
- erb:
10
- <b>Hello from <%= text.upcase %>!</b>
11
- Second Line!
12
- <% if true %><%= true %><% end %>
13
- }
14
-
15
- assert_html "<p><b>Hello from BEFORE ERB BLOCK!</b>\nSecond Line!\ntrue</p>", source
16
- end
17
-
18
- def test_wip_render_with_asciidoc
19
- source = %q{
20
- asciidoc:
21
- == Header
22
- Hello from #{"AsciiDoc!"}
23
-
24
- #{1+2}
25
-
26
- * one
27
- * two
28
- }
29
- output = render(source)
30
- assert_match 'sect1', output
31
- assert_match 'Hello from AsciiDoc!', output
32
- end
33
5
 
34
6
  def test_render_with_markdown
35
7
  source = %q{
@@ -60,61 +32,41 @@ markdown:
60
32
  end
61
33
  end
62
34
 
63
- def test_render_with_creole
35
+ def test_render_with_css
64
36
  source = %q{
65
- creole:
66
- = head1
67
- == head2
37
+ css:
38
+ h1 { color: blue }
68
39
  }
69
- assert_html "<h1>head1</h1><h2>head2</h2>", source
40
+ assert_html "<style type=\"text/css\">h1 { color: blue }</style>", source
70
41
  end
71
42
 
72
- def test_render_with_creole_one_line
43
+ def test_render_with_css_empty_attributes
73
44
  source = %q{
74
- creole: Hello **world**,
75
- we can write one-line embedded markup now!
76
- = Headline
77
- Text
78
- .nested: creole: **Strong**
45
+ css []:
46
+ h1 { color: blue }
79
47
  }
80
- assert_html '<p>Hello <strong>world</strong>, we can write one-line embedded markup now!</p><h1>Headline</h1><p>Text</p><div class="nested"><p><strong>Strong</strong></p></div>', source
48
+ assert_html "<style type=\"text/css\">h1 { color: blue }</style>", source
81
49
  end
82
50
 
83
- def test_render_with_org
84
- # HACK: org-ruby registers itself in Tilt
85
- require 'org-ruby'
86
-
51
+ def test_render_with_css_attribute
87
52
  source = %q{
88
- org:
89
- * point1
90
- * point2
53
+ css scoped = "true":
54
+ h1 { color: blue }
91
55
  }
92
- assert_html "<h1>point1</h1>\n<h1>point2</h1>\n", source
56
+ assert_html "<style scoped=\"true\" type=\"text/css\">h1 { color: blue }</style>", source
93
57
  end
94
58
 
95
- def test_render_with_builder
59
+ def test_render_with_css_multiple_attributes
96
60
  source = %q{
97
- builder:
98
- xml.p(id: 'test') {
99
- xml.text!('Hello')
100
- }
61
+ css class="myClass" scoped = "true" :
62
+ h1 { color: blue }
101
63
  }
102
- assert_html "<p id=\"test\">\nHello</p>\n", source
103
- end
104
-
105
- def test_render_with_wiki
106
- source = %q{
107
- wiki:
108
- = head1
109
- == head2
110
- }
111
- assert_html "<h1>head1</h1><h2>head2</h2>", source
64
+ assert_html "<style class=\"myClass\" scoped=\"true\" type=\"text/css\">h1 { color: blue }</style>", source
112
65
  end
113
66
 
114
67
  def test_render_with_javascript
115
- # Keep the trailing space behind "javascript: "!
116
68
  source = %q{
117
- javascript:
69
+ javascript:
118
70
  $(function() {});
119
71
 
120
72
 
@@ -124,19 +76,28 @@ p Hi
124
76
  assert_html %{<script>$(function() {});\n\n\nalert('hello')</script><p>Hi</p>}, source
125
77
  end
126
78
 
127
- def test_render_with_opal
128
- begin
129
- # HACK: org-ruby registers itself in Tilt
130
- require 'opal'
131
- rescue LoadError
132
- return
133
- end
79
+ def test_render_with_javascript_empty_attributes
80
+ source = %q{
81
+ javascript ():
82
+ alert('hello')
83
+ }
84
+ assert_html %{<script>alert('hello')</script>}, source
85
+ end
134
86
 
87
+ def test_render_with_javascript_attribute
135
88
  source = %q{
136
- opal:
137
- puts 'hello from opal'
89
+ javascript [class = "myClass"]:
90
+ alert('hello')
138
91
  }
139
- assert_match '$puts("hello from opal")', render(source)
92
+ assert_html %{<script class=\"myClass\">alert('hello')</script>}, source
93
+ end
94
+
95
+ def test_render_with_javascript_multiple_attributes
96
+ source = %q{
97
+ javascript { class = "myClass" id="myId" other-attribute = 'my_other_attribute' } :
98
+ alert('hello')
99
+ }
100
+ assert_html %{<script class=\"myClass\" id=\"myId\" other-attribute=\"my_other_attribute\">alert('hello')</script>}, source
140
101
  end
141
102
 
142
103
  def test_render_with_javascript_with_tabs
@@ -145,10 +106,9 @@ opal:
145
106
  end
146
107
 
147
108
  def test_render_with_javascript_including_variable
148
- # Keep the trailing space behind "javascript: "!
149
109
  source = %q{
150
110
  - func = "alert('hello');"
151
- javascript:
111
+ javascript:
152
112
  $(function() { #{func} });
153
113
  }
154
114
  assert_html %q|<script>$(function() { alert(&#39;hello&#39;); });</script>|, source
@@ -192,6 +152,17 @@ ruby:
192
152
  assert_html '3', source
193
153
  end
194
154
 
155
+ def test_render_with_ruby_heredoc
156
+ source = %q{
157
+ ruby:
158
+ variable = <<-MSG
159
+ foobar
160
+ MSG
161
+ = variable
162
+ }
163
+ assert_html "foobar\n", source
164
+ end
165
+
195
166
  def test_render_with_scss
196
167
  source = %q{
197
168
  scss:
@@ -201,6 +172,36 @@ scss:
201
172
  assert_html "<style type=\"text/css\">body{color:red}</style>", source
202
173
  end
203
174
 
175
+ def test_render_with_scss_attribute
176
+ source = %q{
177
+ scss [class="myClass"]:
178
+ $color: #f00;
179
+ body { color: $color; }
180
+ }
181
+ assert_html "<style class=\"myClass\" type=\"text/css\">body{color:red}</style>", source
182
+ end
183
+
184
+ def test_render_with_sass
185
+ source = %q{
186
+ sass:
187
+ $color: #f00
188
+ body
189
+ color: $color
190
+ }
191
+ assert_html "<style type=\"text/css\">body{color:red}</style>", source
192
+ end
193
+
194
+ def test_render_with_sass_attribute
195
+ source = %q{
196
+ sass [class="myClass"]:
197
+ $color: #f00
198
+ body
199
+ color: $color
200
+ }
201
+ assert_html "<style class=\"myClass\" type=\"text/css\">body{color:red}</style>", source
202
+ end
203
+
204
+
204
205
  def test_disabled_embedded_engine
205
206
  source = %{
206
207
  ruby:
@@ -113,7 +113,7 @@ option(selected class="clazz") Text
113
113
  .alpha data={a: 'alpha', b: 'beta', c_d: 'gamma', c: {e: 'epsilon'}}
114
114
  }
115
115
 
116
- assert_html '<div class="alpha" data-a="alpha" data-b="beta" data-c-d="gamma" data-c-e="epsilon"></div>', source
116
+ assert_html '<div class="alpha" data-a="alpha" data-b="beta" data-c-e="epsilon" data-c_d="gamma"></div>', source
117
117
  end
118
118
 
119
119
  def test_splat_without_content
@@ -265,4 +265,29 @@ p
265
265
  }
266
266
  assert_html '<p><img src="img.png" whatsthis?!="" /><img src="img.png" whatsthis?!="wtf" /></p>', source
267
267
  end
268
+
269
+ def test_multiline_attribute_with_space
270
+ source = %q{
271
+ a data-title="help" data-content="extremely long help text that goes on\
272
+ and one and one and then starts over...." Link
273
+ }
274
+ assert_html '<a data-content="extremely long help text that goes on and one and one and then starts over...." data-title="help">Link</a>', source
275
+ end
276
+
277
+ def test_multiline_attribute_without_space
278
+ source= %q{
279
+ link rel="stylesheet" type="text/css" href="https://stylesheet-cdn.com/\
280
+ this/is/a/quite/long/url/that/would/be/nice/to/split/up"
281
+ }
282
+ assert_html '<link rel="stylesheet" type="text/css" href="https://stylesheet-cdn.com/this/is/a/quite/long/url/that/would/be/nice/to/split/up" />', source
283
+ end
284
+
285
+ def test_eme
286
+ source = %q{
287
+ script#template[type="text/x-template"]
288
+ div[v-bind:class="{'some-class': boolean_var}"]
289
+ span contents
290
+ }
291
+ assert_html '<script></script>', source
292
+ end
268
293
  end
@@ -19,17 +19,7 @@ p = hello_world + \
19
19
  unknown_ruby_method
20
20
  }
21
21
 
22
- # FIXME: Remove this hack!
23
- # This is actually a jruby issue. Jruby reports a wrong
24
- # line number 1 in this case:
25
- #
26
- # test = 1+\
27
- # unknown_variable
28
- if RUBY_PLATFORM == "java"
29
- assert_ruby_error NameError, "test.slim:2", source, file: 'test.slim'
30
- else
31
- assert_ruby_error NameError, "test.slim:4", source, file: 'test.slim'
32
- end
22
+ assert_ruby_error NameError, "test.slim:4", source, file: 'test.slim'
33
23
  end
34
24
 
35
25
  def test_broken_output_line2
@@ -94,22 +84,6 @@ p Text line 1
94
84
  assert_ruby_error NameError,"(__TEMPLATE__):4", source
95
85
  end
96
86
 
97
- def test_embedded_erb
98
- source = %q{
99
- erb:
100
- <%= 123 %>
101
- Hello from ERB!
102
- <%#
103
- comment block
104
- %>
105
- <% if true %>
106
- Text
107
- <% end %>
108
- = unknown_ruby_method
109
- }
110
- assert_ruby_error NameError,"(__TEMPLATE__):11", source
111
- end
112
-
113
87
  def test_embedded_ruby1
114
88
  source = %q{
115
89
  ruby:
@@ -119,7 +93,7 @@ ruby:
119
93
  = unknown_ruby_method
120
94
  }
121
95
 
122
- assert_ruby_error NameError,"(__TEMPLATE__):6", source
96
+ assert_ruby_error NameError,"(__TEMPLATE__):7", source
123
97
  end
124
98
 
125
99
  def test_embedded_ruby2
@@ -5,6 +5,7 @@ require 'action_controller/railtie'
5
5
  require 'action_view/railtie'
6
6
  #require 'active_record/railtie'
7
7
  #require 'action_mailer/railtie'
8
+ require "sprockets/railtie"
8
9
 
9
10
  require 'slim'
10
11
 
@@ -40,5 +41,20 @@ module Dummy
40
41
 
41
42
  # Configure sensitive parameters which will be filtered from the log file.
42
43
  config.filter_parameters += [:password]
44
+
45
+ # From slim-rails fix for "ActionView::Template::Error: Unknown line indicator"
46
+ # https://github.com/slim-template/slim-rails/blob/991589ea5648e5e896781e68912bc51beaf4102a/lib/slim-rails/register_engine.rb
47
+ if config.respond_to?(:assets)
48
+ config.assets.configure do |env|
49
+ if env.respond_to?(:register_transformer) && Sprockets::VERSION.to_i > 3
50
+ env.register_mime_type 'text/slim', extensions: ['.slim', '.slim.html']
51
+ env.register_transformer 'text/slim', 'text/html', RegisterEngine::Transformer
52
+ elsif env.respond_to?(:register_engine)
53
+ args = ['.slim', Slim::Template]
54
+ args << { silence_deprecation: true } if Sprockets::VERSION.start_with?('3')
55
+ env.register_engine(*args)
56
+ end
57
+ end
58
+ end
43
59
  end
44
60
  end
@@ -5,6 +5,9 @@ require File.expand_path("../../config/environment.rb", __FILE__)
5
5
  require "rails/test_help"
6
6
  require "nokogiri"
7
7
 
8
+ require 'rails-controller-testing'
9
+ Rails::Controller::Testing.install
10
+
8
11
  Rails.backtrace_cleaner.remove_silencers!
9
12
 
10
13
  class ActionDispatch::IntegrationTest
@@ -65,9 +65,9 @@ class TestSlim < ActionDispatch::IntegrationTest
65
65
  end
66
66
 
67
67
  test "render thread_options" do
68
- get "/slim/thread_options", attr: 'role'
68
+ get "/slim/thread_options", params: { attr: 'role'}
69
69
  assert_html '<p role="empty">Test</p>'
70
- get "/slim/thread_options", attr: 'id' # Overwriting doesn't work because of caching
70
+ get "/slim/thread_options", params: { attr: 'id'} # Overwriting doesn't work because of caching
71
71
  assert_html '<p role="empty">Test</p>'
72
72
  end
73
73
 
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.9
4
+ version: 4.0.0
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-11-09 00:00:00.000000000 Z
13
+ date: 2018-08-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: temple
@@ -38,7 +38,7 @@ dependencies:
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 1.3.3
41
+ version: 2.0.6
42
42
  - - "<"
43
43
  - !ruby/object:Gem::Version
44
44
  version: '2.1'
@@ -48,7 +48,7 @@ dependencies:
48
48
  requirements:
49
49
  - - ">="
50
50
  - !ruby/object:Gem::Version
51
- version: 1.3.3
51
+ version: 2.0.6
52
52
  - - "<"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.1'
@@ -205,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
205
  version: '0'
206
206
  requirements: []
207
207
  rubyforge_project:
208
- rubygems_version: 2.2.2
208
+ rubygems_version: 2.7.6
209
209
  signing_key:
210
210
  specification_version: 4
211
211
  summary: Slim is a template language.