slim 4.0.0 → 4.0.1

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
  SHA256:
3
- metadata.gz: b6aa24cf9ce985085cb2c3f4d43b948aba03bc19afbf165c090f4e4f63497cb6
4
- data.tar.gz: 23c6a1e7778c9feca0c85a2e5eee90e8019e008c4bbb58b533be2ad2733a9a41
3
+ metadata.gz: 69d6aa964ff22bb2b6cfc10cfbf3073e2f3c4256a47607f49500d4c54010bf60
4
+ data.tar.gz: fe1d48dd358b5e44f3f639e55284e2c81d7859d62a7feb10e51985675394ba95
5
5
  SHA512:
6
- metadata.gz: e799d123737fd44fd02e9bb889dac596bdea8093db6395759908565325a3670a142589820e534b248d23751ea3de51694723392827ed4fe56b4867abfa4f306f
7
- data.tar.gz: '031793ed5801a279b8de180b2058357b3ce35c413b3152dfb6cf30220a574c405ad712aa6d26fbdebb1b27eecc731657bd32001efdf1bf310eef041c1001666f'
6
+ metadata.gz: 1410081c98ad63fdbae03019edd862177b19ad675f0f3aa151dc2cdbbe4275ea17751b69eded1ebf0ddeed773d5f44b3325f74b5fa15f7ee67575df62a3f173d
7
+ data.tar.gz: af294f677929992cd72f76db74e99e111096379a924daf83a7c54515321bcca5ff92e45a40a50c839a88c5ab515458c87f64cd56ea3bab116a9e26804538fa0f
data/CHANGES CHANGED
@@ -1,4 +1,9 @@
1
+ 4.0.1 (2018-09-02)
2
+
3
+ * Fix incompatibility issue with Slim Include plugin and new ability to specifiy attributes for embedded engines #819
4
+
1
5
  4.0.0 (2018-08-26)
6
+
2
7
  * Add ability to specify attributes for embedded engines using TagEngine - #653
3
8
  * Set Tilt's default encoding to utf-8 - #800
4
9
  * Prevent generation of invalid Ruby code in heredoc - #770
data/Gemfile CHANGED
@@ -2,6 +2,11 @@ source 'https://rubygems.org/'
2
2
 
3
3
  gemspec
4
4
 
5
+ group :test do
6
+ gem 'sinatra'
7
+ gem 'rack-test'
8
+ end
9
+
5
10
  if ENV['TRAVIS']
6
11
  gem 'rails-controller-testing'
7
12
  end
@@ -44,12 +49,10 @@ if RUBY_ENGINE == 'rbx' && !ENV['TRAVIS']
44
49
  end
45
50
 
46
51
  if ENV['SINATRA']
47
- gem 'rack-test'
48
52
  if ENV['SINATRA'] == 'master'
49
53
  gem 'sinatra', :github => 'sinatra/sinatra'
50
54
  else
51
- # Need the slim_test.rb file not included in the Sinatra gem.
52
- gem 'sinatra', :github => 'sinatra/sinatra', :tag => "v#{ENV['SINATRA']}"
55
+ gem 'sinatra', :tag => "v#{ENV['SINATRA']}"
53
56
  end
54
57
  end
55
58
 
data/README.md CHANGED
@@ -1120,7 +1120,7 @@ Usage: slimrb [options]
1120
1120
  -e, --erb Convert to ERB
1121
1121
  --rails Generate rails compatible code (Implies --compile)
1122
1122
  -r, --require library Load library or plugin with -r slim/plugin
1123
- -p, --pretty Produce pretty html
1123
+ -p, --pretty Produce pretty html for debugging purposes
1124
1124
  -o, --option name=code Set slim option
1125
1125
  -l, --locals Hash|YAML|JSON Set local variables
1126
1126
  -h, --help Show this message
@@ -1266,6 +1266,7 @@ Static code analysis:
1266
1266
 
1267
1267
  Template Converters (HAML, ERB, ...):
1268
1268
 
1269
+ * [ERB 2 Slim](http://erb2slim.com/)
1269
1270
  * [Haml2Slim converter](https://github.com/slim-template/haml2slim)
1270
1271
  * [ERB2Slim, HTML2Slim converter](https://github.com/slim-template/html2slim)
1271
1272
 
data/Rakefile CHANGED
@@ -19,67 +19,54 @@ namespace 'test' do
19
19
  Rake::TestTask.new('core') do |t|
20
20
  t.libs << 'lib' << 'test/core'
21
21
  t.test_files = FileList['test/core/test_*.rb']
22
- t.verbose = true
22
+ t.warning = true
23
23
  #t.ruby_opts << '-w' << '-v'
24
24
  end
25
25
 
26
26
  Rake::TestTask.new('literate') do |t|
27
27
  t.libs << 'lib' << 'test/literate'
28
28
  t.test_files = FileList['test/literate/run.rb']
29
- t.verbose = true
29
+ t.warning = true
30
30
  end
31
31
 
32
32
  Rake::TestTask.new('logic_less') do |t|
33
33
  t.libs << 'lib' << 'test/core'
34
34
  t.test_files = FileList['test/logic_less/test_*.rb']
35
- t.verbose = true
35
+ t.warning = true
36
36
  end
37
37
 
38
38
  Rake::TestTask.new('translator') do |t|
39
39
  t.libs << 'lib' << 'test/core'
40
40
  t.test_files = FileList['test/translator/test_*.rb']
41
- t.verbose = true
41
+ t.warning = true
42
42
  end
43
43
 
44
44
  Rake::TestTask.new('smart') do |t|
45
45
  t.libs << 'lib' << 'test/core'
46
46
  t.test_files = FileList['test/smart/test_*.rb']
47
- t.verbose = true
47
+ t.warning = true
48
48
  end
49
49
 
50
50
  Rake::TestTask.new('include') do |t|
51
51
  t.libs << 'lib' << 'test/core'
52
52
  t.test_files = FileList['test/include/test_*.rb']
53
- t.verbose = true
53
+ t.warning = true
54
54
  end
55
55
 
56
56
  Rake::TestTask.new('rails') do |t|
57
57
  t.libs << 'lib'
58
58
  t.test_files = FileList['test/rails/test/test_*.rb']
59
- t.verbose = true
59
+ t.warning = true
60
60
  end
61
61
 
62
- begin
63
- require 'sinatra'
64
- spec = Gem::Specification.find_by_name('sinatra')
65
- Rake::TestTask.new('sinatra') do |t|
66
- file = "#{spec.gem_dir}/test/slim_test.rb"
67
-
68
- if Sinatra::VERSION =~ /\A1\.3/
69
- # FIXME: Rename deprecated attribute
70
- code = File.read(file)
71
- code.gsub!('attr_wrapper', 'attr_quote')
72
- File.open(file, 'w') {|out| out.write(code) }
73
- end
74
-
75
- # Run Slim integration test in Sinatra
76
- t.test_files = FileList[file]
77
- t.verbose = true
78
- end
79
- rescue LoadError
80
- task :sinatra do
81
- abort 'Sinatra is not available'
82
- end
62
+ Rake::TestTask.new('sinatra') do |t|
63
+ t.libs << 'lib'
64
+ t.test_files = FileList['test/sinatra/test_*.rb']
65
+
66
+ # Copied from test task in Sinatra project to mimic their approach
67
+ t.ruby_opts = ['-r rubygems'] if defined? Gem
68
+ t.ruby_opts << '-I.'
69
+ t.warning = true
83
70
  end
84
71
  end
85
72
 
@@ -13,8 +13,8 @@ module Slim
13
13
  end
14
14
 
15
15
  # Pass-through handler
16
- def on_slim_embedded(type, content)
17
- [:slim, :embedded, type, compile(content)]
16
+ def on_slim_embedded(type, content, attrs)
17
+ [:slim, :embedded, type, compile(content), attrs]
18
18
  end
19
19
 
20
20
  # Pass-through handler
@@ -1,5 +1,5 @@
1
1
  module Slim
2
2
  # Slim version string
3
3
  # @api public
4
- VERSION = '4.0.0'
4
+ VERSION = '4.0.1'
5
5
  end
@@ -265,29 +265,4 @@ 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
293
268
  end
@@ -420,18 +420,6 @@ renders as
420
420
  49
421
421
  ~~~
422
422
 
423
- The legacy syntax `='` is also supported.
424
-
425
- ~~~ slim
426
- =' 7*7
427
- ~~~
428
-
429
- renders as
430
-
431
- ~~~ html
432
- 49
433
- ~~~
434
-
435
423
  The equal sign with modifier `=<` produces dynamic output with a leading white space.
436
424
 
437
425
  ~~~ slim
@@ -500,18 +488,6 @@ renders as
500
488
  <script>evil();</script>
501
489
  ~~~
502
490
 
503
- The legacy syntax `=='` is also supported.
504
-
505
- ~~~ slim
506
- ==' '<script>evil();</script>'
507
- ~~~
508
-
509
- renders as
510
-
511
- ~~~ html
512
- <script>evil();</script>
513
- ~~~
514
-
515
491
  The option option
516
492
 
517
493
  ~~~ options
@@ -521,7 +497,7 @@ The option option
521
497
  doesn't affect the output of `==`.
522
498
 
523
499
  ~~~ slim
524
- ==' '<script>evil();</script>'
500
+ ==> '<script>evil();</script>'
525
501
  ~~~
526
502
 
527
503
  renders as
@@ -709,27 +685,26 @@ renders as
709
685
 
710
686
  ### Trailing and leading whitespace
711
687
 
712
- You can force a trailing whitespace behind a tag by adding `>`. The legacy syntax with `'` is also supported.
688
+ You can force a trailing whitespace behind a tag by adding `>`.
713
689
 
714
690
  ~~~ slim
715
691
  a#closed> class="test" /
716
692
  a#closed> class="test"/
717
693
  a> href='url1' Link1
718
694
  a< href='url1' Link1
719
- a' href='url2' Link2
720
695
  ~~~
721
696
 
722
697
  renders as
723
698
 
724
699
  ~~~ html
725
- <a class="test" id="closed" /> <a class="test" id="closed" /> <a href="url1">Link1</a> <a href="url1">Link1</a><a href="url2">Link2</a>
700
+ <a class="test" id="closed" /> <a class="test" id="closed" /> <a href="url1">Link1</a> <a href="url1">Link1</a>
726
701
  ~~~
727
702
 
728
- If you combine > and =' only one trailing whitespace is added.
703
+ If you combine > and => only one trailing whitespace is added.
729
704
 
730
705
  ~~~ slim
731
- a> =' 'Text1'
732
- a =' 'Text2'
706
+ a> => 'Text1'
707
+ a => 'Text2'
733
708
  a> = 'Text3'
734
709
  a>= 'Text4'
735
710
  a=> 'Text5'
@@ -0,0 +1,91 @@
1
+ # Copyright (c) 2009 Damian Janowski and Michel Martens for Citrusbyte
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+ require "rubygems"
21
+ require "minitest/autorun"
22
+
23
+ # Contest adds +teardown+, +test+ and +context+ as class methods, and the
24
+ # instance methods +setup+ and +teardown+ now iterate on the corresponding
25
+ # blocks. Note that all setup and teardown blocks must be defined with the
26
+ # block syntax. Adding setup or teardown instance methods defeats the purpose
27
+ # of this library.
28
+ class Minitest::Test
29
+ def self.setup(&block) setup_blocks << block end
30
+ def self.teardown(&block) teardown_blocks << block end
31
+ def self.setup_blocks() @setup_blocks ||= [] end
32
+ def self.teardown_blocks() @teardown_blocks ||= [] end
33
+
34
+ def setup_blocks(base = self.class)
35
+ setup_blocks base.superclass if base.superclass.respond_to? :setup_blocks
36
+ base.setup_blocks.each do |block|
37
+ instance_eval(&block)
38
+ end
39
+ end
40
+
41
+ def teardown_blocks(base = self.class)
42
+ teardown_blocks base.superclass if base.superclass.respond_to? :teardown_blocks
43
+ base.teardown_blocks.each do |block|
44
+ instance_eval(&block)
45
+ end
46
+ end
47
+
48
+ alias setup setup_blocks
49
+ alias teardown teardown_blocks
50
+
51
+ def self.context(*name, &block)
52
+ subclass = Class.new(self)
53
+ remove_tests(subclass)
54
+ subclass.class_eval(&block) if block_given?
55
+ const_set(context_name(name.join(" ")), subclass)
56
+ end
57
+
58
+ def self.test(name, &block)
59
+ define_method(test_name(name), &block)
60
+ end
61
+
62
+ class << self
63
+ alias_method :should, :test
64
+ alias_method :describe, :context
65
+ end
66
+
67
+ private
68
+
69
+ def self.context_name(name)
70
+ # "Test#{sanitize_name(name).gsub(/(^| )(\w)/) { $2.upcase }}".to_sym
71
+ name = "Test#{sanitize_name(name).gsub(/(^| )(\w)/) { $2.upcase }}"
72
+ name.tr(" ", "_").to_sym
73
+ end
74
+
75
+ def self.test_name(name)
76
+ name = "test_#{sanitize_name(name).gsub(/\s+/,'_')}_0"
77
+ name = name.succ while method_defined? name
78
+ name.to_sym
79
+ end
80
+
81
+ def self.sanitize_name(name)
82
+ # name.gsub(/\W+/, ' ').strip
83
+ name.gsub(/\W+/, ' ')
84
+ end
85
+
86
+ def self.remove_tests(subclass)
87
+ subclass.public_instance_methods.grep(/^test_/).each do |meth|
88
+ subclass.send(:undef_method, meth.to_sym)
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,145 @@
1
+ if ENV['COVERAGE']
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter '/test/'
5
+ add_group 'sinatra-contrib', 'sinatra-contrib'
6
+ add_group 'rack-protection', 'rack-protection'
7
+ end
8
+ end
9
+
10
+ ENV['APP_ENV'] = 'test'
11
+ Encoding.default_external = "UTF-8" if defined? Encoding
12
+
13
+ RUBY_ENGINE = 'ruby' unless defined? RUBY_ENGINE
14
+
15
+ require 'rack'
16
+
17
+ testdir = File.dirname(__FILE__)
18
+ $LOAD_PATH.unshift testdir unless $LOAD_PATH.include?(testdir)
19
+
20
+ libdir = File.dirname(File.dirname(__FILE__)) + '/lib'
21
+ $LOAD_PATH.unshift libdir unless $LOAD_PATH.include?(libdir)
22
+
23
+ require 'minitest'
24
+ require 'contest'
25
+ require 'rack/test'
26
+ require 'sinatra'
27
+ require 'sinatra/base'
28
+
29
+ class Sinatra::Base
30
+ include Minitest::Assertions
31
+ # Allow assertions in request context
32
+ def assertions
33
+ @assertions ||= 0
34
+ end
35
+
36
+ attr_writer :assertions
37
+ end
38
+
39
+ class Rack::Builder
40
+ def include?(middleware)
41
+ @ins.any? { |m| middleware === m }
42
+ end
43
+ end
44
+
45
+ Sinatra::Base.set :environment, :test
46
+
47
+ class Minitest::Test
48
+ include Rack::Test::Methods
49
+
50
+ class << self
51
+ alias_method :it, :test
52
+ alias_method :section, :context
53
+ end
54
+
55
+ def self.example(desc = nil, &block)
56
+ @example_count = 0 unless instance_variable_defined? :@example_count
57
+ @example_count += 1
58
+ it(desc || "Example #{@example_count}", &block)
59
+ end
60
+
61
+ alias_method :response, :last_response
62
+
63
+ setup do
64
+ Sinatra::Base.set :environment, :test
65
+ end
66
+
67
+ # Sets up a Sinatra::Base subclass defined with the block
68
+ # given. Used in setup or individual spec methods to establish
69
+ # the application.
70
+ def mock_app(base=Sinatra::Base, &block)
71
+ @app = Sinatra.new(base, &block)
72
+ end
73
+
74
+ def app
75
+ Rack::Lint.new(@app)
76
+ end
77
+
78
+ def slim_app(&block)
79
+ mock_app do
80
+ set :views, File.dirname(__FILE__) + '/views'
81
+ get('/', &block)
82
+ end
83
+ get '/'
84
+ end
85
+
86
+ def body
87
+ response.body.to_s
88
+ end
89
+
90
+ def assert_body(value)
91
+ if value.respond_to? :to_str
92
+ assert_equal value.lstrip.gsub(/\s*\n\s*/, ""), body.lstrip.gsub(/\s*\n\s*/, "")
93
+ else
94
+ assert_match value, body
95
+ end
96
+ end
97
+
98
+ def assert_status(expected)
99
+ assert_equal Integer(expected), Integer(status)
100
+ end
101
+
102
+ def assert_like(a,b)
103
+ pattern = /id=['"][^"']*["']|\s+/
104
+ assert_equal a.strip.gsub(pattern, ""), b.strip.gsub(pattern, "")
105
+ end
106
+
107
+ def assert_include(str, substr)
108
+ assert str.include?(substr), "expected #{str.inspect} to include #{substr.inspect}"
109
+ end
110
+
111
+ def options(uri, params = {}, env = {}, &block)
112
+ request(uri, env.merge(:method => "OPTIONS", :params => params), &block)
113
+ end
114
+
115
+ def patch(uri, params = {}, env = {}, &block)
116
+ request(uri, env.merge(:method => "PATCH", :params => params), &block)
117
+ end
118
+
119
+ def link(uri, params = {}, env = {}, &block)
120
+ request(uri, env.merge(:method => "LINK", :params => params), &block)
121
+ end
122
+
123
+ def unlink(uri, params = {}, env = {}, &block)
124
+ request(uri, env.merge(:method => "UNLINK", :params => params), &block)
125
+ end
126
+
127
+ # Delegate other missing methods to response.
128
+ def method_missing(name, *args, &block)
129
+ if response && response.respond_to?(name)
130
+ response.send(name, *args, &block)
131
+ else
132
+ super
133
+ end
134
+ rescue Rack::Test::Error
135
+ super
136
+ end
137
+
138
+ # Do not output warnings for the duration of the block.
139
+ def silence_warnings
140
+ $VERBOSE, v = nil, $VERBOSE
141
+ yield
142
+ ensure
143
+ $VERBOSE = v
144
+ end
145
+ end
@@ -0,0 +1,91 @@
1
+ require_relative 'helper.rb'
2
+
3
+ begin
4
+ class SlimTest < Minitest::Test
5
+ it 'renders inline slim strings' do
6
+ slim_app { slim "h1 Hiya\n" }
7
+ assert ok?
8
+ assert_equal "<h1>Hiya</h1>", body
9
+ end
10
+
11
+ it 'renders .slim files in views path' do
12
+ slim_app { slim :hello }
13
+ assert ok?
14
+ assert_equal "<h1>Hello From Slim</h1>", body
15
+ end
16
+
17
+ it "renders with inline layouts" do
18
+ mock_app do
19
+ layout { %(h1\n | THIS. IS. \n == yield.upcase ) }
20
+ get('/') { slim 'em Sparta' }
21
+ end
22
+ get '/'
23
+ assert ok?
24
+ assert_equal "<h1>THIS. IS. <EM>SPARTA</EM></h1>", body
25
+ end
26
+
27
+ it "renders with file layouts" do
28
+ slim_app { slim('| Hello World', :layout => :layout2) }
29
+ assert ok?
30
+ assert_equal "<h1>Slim Layout!</h1><p>Hello World</p>", body
31
+ end
32
+
33
+ it "raises error if template not found" do
34
+ mock_app { get('/') { slim(:no_such_template) } }
35
+ assert_raises(Errno::ENOENT) { get('/') }
36
+ end
37
+
38
+ HTML4_DOCTYPE = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">"
39
+
40
+ it "passes slim options to the slim engine" do
41
+ mock_app { get('/') { slim("x foo='bar'", :attr_quote => "'") }}
42
+ get '/'
43
+ assert ok?
44
+ assert_body "<x foo='bar'></x>"
45
+ end
46
+
47
+ it "passes default slim options to the slim engine" do
48
+ mock_app do
49
+ set :slim, :attr_quote => "'"
50
+ get('/') { slim("x foo='bar'") }
51
+ end
52
+ get '/'
53
+ assert ok?
54
+ assert_body "<x foo='bar'></x>"
55
+ end
56
+
57
+ it "merges the default slim options with the overrides and passes them to the slim engine" do
58
+ mock_app do
59
+ set :slim, :attr_quote => "'"
60
+ get('/') { slim("x foo='bar'") }
61
+ get('/other') { slim("x foo='bar'", :attr_quote => '"') }
62
+ end
63
+ get '/'
64
+ assert ok?
65
+ assert_body "<x foo='bar'></x>"
66
+ get '/other'
67
+ assert ok?
68
+ assert_body '<x foo="bar"></x>'
69
+ end
70
+
71
+ it "can render truly nested layouts by accepting a layout and a block with the contents" do
72
+ mock_app do
73
+ template(:main_outer_layout) { "h1 Title\n== yield" }
74
+ template(:an_inner_layout) { "h2 Subtitle\n== yield" }
75
+ template(:a_page) { "p Contents." }
76
+ get('/') do
77
+ slim :main_outer_layout, :layout => false do
78
+ slim :an_inner_layout do
79
+ slim :a_page
80
+ end
81
+ end
82
+ end
83
+ end
84
+ get '/'
85
+ assert ok?
86
+ assert_body "<h1>Title</h1>\n<h2>Subtitle</h2>\n<p>Contents.</p>\n"
87
+ end
88
+ end
89
+ rescue LoadError
90
+ warn "#{$!}: skipping slim tests"
91
+ end
@@ -0,0 +1,16 @@
1
+ require 'slim/include'
2
+
3
+ require_relative 'helper.rb'
4
+
5
+ begin
6
+ class SlimTest < Minitest::Test
7
+ it 'renders .slim files includes with js embed' do
8
+ slim_app { slim :embed_include_js }
9
+ assert ok?
10
+ assert_equal "<!DOCTYPE html><html><head><title>Slim Examples</title><script>alert('Slim supports embedded javascript!')</script></head><body><footer>Slim</footer></body></html>", body
11
+ end
12
+
13
+ end
14
+ rescue LoadError
15
+ warn "#{$!}: skipping slim tests"
16
+ end
@@ -0,0 +1,8 @@
1
+ doctype html
2
+ html
3
+ head
4
+ title Slim Examples
5
+ javascript:
6
+ alert('Slim supports embedded javascript!')
7
+ body
8
+ include footer.slim
@@ -0,0 +1,11 @@
1
+ doctype html
2
+ html
3
+ head
4
+ title Slim Examples
5
+ javascript:
6
+ alert('Slim supports embedded javascript!')
7
+ body
8
+ h1 Markup examples
9
+
10
+ #content
11
+ p This example shows you how a basic Slim file looks.
@@ -0,0 +1 @@
1
+ footer Slim
@@ -0,0 +1 @@
1
+ h1 Hello From Slim
@@ -0,0 +1,3 @@
1
+ h1 Slim Layout!
2
+ p
3
+ == yield
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: 4.0.0
4
+ version: 4.0.1
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: 2018-08-27 00:00:00.000000000 Z
13
+ date: 2018-09-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: temple
@@ -183,6 +183,15 @@ files:
183
183
  - test/rails/script/rails
184
184
  - test/rails/test/helper.rb
185
185
  - test/rails/test/test_slim.rb
186
+ - test/sinatra/contest.rb
187
+ - test/sinatra/helper.rb
188
+ - test/sinatra/test_core.rb
189
+ - test/sinatra/test_include.rb
190
+ - test/sinatra/views/embed_include_js.slim
191
+ - test/sinatra/views/embed_js.slim
192
+ - test/sinatra/views/footer.slim
193
+ - test/sinatra/views/hello.slim
194
+ - test/sinatra/views/layout2.slim
186
195
  - test/smart/test_smart_text.rb
187
196
  - test/translator/test_translator.rb
188
197
  homepage: http://slim-lang.com/