slim 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,8 +9,8 @@ env:
9
9
  - "TASK=test"
10
10
  - "TASK=test TEMPLE=master"
11
11
  - "TASK=test:rails RAILS=master"
12
- - "TASK=test:rails RAILS=3.0.10"
13
- - "TASK=test:rails RAILS=3.1.0"
12
+ - "TASK=test:rails RAILS=3.0.11"
13
+ - "TASK=test:rails RAILS=3.1.3"
14
14
  script: "bundle exec rake test:ci"
15
15
  notifications:
16
16
  email: false
data/CHANGES CHANGED
@@ -1,5 +1,12 @@
1
1
  master
2
2
 
3
+ 1.1.0
4
+
5
+ * Support for special characters in class/id shortcut removed
6
+ * Do not allow : in class/id shortcut
7
+ * Add support for block expansion syntax
8
+ * Support options :indent, :sort_attrs
9
+ * Require temple 0.3.5
3
10
 
4
11
  1.0.4
5
12
 
data/README.md CHANGED
@@ -208,6 +208,20 @@ Here's a quick example to demonstrate what a Slim template looks like:
208
208
  div class="content"
209
209
  = show_content
210
210
 
211
+ ### Inline tags
212
+
213
+ Sometimes you may want to be a little more compact and inline the tags.
214
+
215
+ ul
216
+ li.first: a href="/a" A link
217
+ li: a href="/b" B link
218
+
219
+ For readability, don't forget you can wrap the attributes.
220
+
221
+ ul
222
+ li.first: a[href="/a"] A link
223
+ li: a[href="/b"] B link
224
+
211
225
  ### Set an attribute's value with a method
212
226
 
213
227
  * Alternative 1: Use parentheses (), {}, []. The code in the parentheses will be evaluated.
data/Rakefile CHANGED
@@ -1,14 +1,14 @@
1
1
  begin
2
2
  require 'bundler'
3
3
  Bundler::GemHelper.install_tasks
4
- rescue Exception => e
4
+ rescue Exception
5
5
  end
6
6
 
7
7
  require 'rake/testtask'
8
8
 
9
9
  desc 'Run Slim benchmarks! (default parameters slow=false iterations=1000)'
10
10
  task :bench, :iterations, :slow do
11
- ruby('benchmarks/run.rb')
11
+ ruby('benchmarks/run-benchmarks.rb')
12
12
  end
13
13
 
14
14
  Rake::TestTask.new('test') do |t|
@@ -36,7 +36,7 @@ begin
36
36
  end
37
37
  rescue LoadError
38
38
  task :rcov do
39
- abort "RCov is not available. In order to run rcov, you must: gem install rcov"
39
+ abort 'RCov is not available. In order to run rcov, you must: gem install rcov'
40
40
  end
41
41
  end
42
42
 
@@ -47,7 +47,7 @@ begin
47
47
  end
48
48
  rescue LoadError
49
49
  task :yard do
50
- abort "YARD is not available. In order to run yard, you must: gem install yard"
50
+ abort 'YARD is not available. In order to run yard, you must: gem install yard'
51
51
  end
52
52
  end
53
53
 
@@ -0,0 +1,11 @@
1
+ class Context
2
+ def header
3
+ 'Colors'
4
+ end
5
+
6
+ def item
7
+ [ { :name => 'red', :current => true, :url => '#red' },
8
+ { :name => 'green', :current => false, :url => '#green' },
9
+ { :name => 'blue', :current => false, :url => '#blue' } ]
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'), File.dirname(__FILE__))
4
+
5
+ require 'slim'
6
+
7
+ content = File.read(File.dirname(__FILE__) + '/view.slim')
8
+ engine = Slim::Engine.new
9
+
10
+ 1000.times { engine.call(content) }
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'), File.dirname(__FILE__))
4
+
5
+ require 'slim'
6
+ require 'complex_view'
7
+
8
+ content = File.read(File.dirname(__FILE__) + '/view.slim')
9
+ slim = Slim::Template.new { content }
10
+ view = ComplexView.new
11
+
12
+ 10000.times { slim.render(view) }
@@ -3,26 +3,24 @@
3
3
  $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'), File.dirname(__FILE__))
4
4
 
5
5
  require 'slim'
6
- require 'complex_view'
6
+ require 'context'
7
7
 
8
8
  require 'benchmark'
9
- require 'ostruct'
10
9
  require 'erubis'
11
10
  require 'erb'
12
11
  require 'haml'
13
- require 'tilt'
14
12
 
15
13
  class SlimBenchmarks
16
14
  def initialize(slow, iterations)
17
15
  @iterations = (iterations || 1000).to_i
18
16
  @benches = []
19
17
 
20
- tpl_erb = File.read(File.dirname(__FILE__) + '/complex.erb')
21
- tpl_haml = File.read(File.dirname(__FILE__) + '/complex.haml')
22
- tpl_slim = File.read(File.dirname(__FILE__) + '/complex.slim')
18
+ tpl_erb = File.read(File.dirname(__FILE__) + '/view.erb')
19
+ tpl_haml = File.read(File.dirname(__FILE__) + '/view.haml')
20
+ tpl_slim = File.read(File.dirname(__FILE__) + '/view.slim')
23
21
 
24
- view = ComplexView.new
25
- eview = OpenStruct.new(:header => view.header, :item => view.item).instance_eval{ binding }
22
+ context = Context.new
23
+ context_binding = context.instance_eval { binding }
26
24
 
27
25
  erb = ERB.new(tpl_erb)
28
26
  erubis = Erubis::Eruby.new(tpl_erb)
@@ -37,9 +35,9 @@ class SlimBenchmarks
37
35
  tilt_haml_ugly = Tilt::HamlTemplate.new(:format => :html5, :ugly => true){ tpl_haml }
38
36
  tilt_slim = Slim::Template.new { tpl_slim }
39
37
 
40
- haml.def_method(view, :run_haml)
41
- haml_ugly.def_method(view, :run_haml_ugly)
42
- view.instance_eval %{
38
+ haml.def_method(context, :run_haml)
39
+ haml_ugly.def_method(context, :run_haml_ugly)
40
+ context.instance_eval %{
43
41
  def run_erb; #{erb.src}; end
44
42
  def run_erubis; #{erubis.src}; end
45
43
  def run_fast_erubis; #{fast_erubis.src}; end
@@ -47,33 +45,33 @@ class SlimBenchmarks
47
45
  }
48
46
 
49
47
  if slow
50
- bench('(1) erb') { ERB.new(tpl_erb).result(eview) }
51
- bench('(1) erubis') { Erubis::Eruby.new(tpl_erb).result(eview) }
52
- bench('(1) fast erubis') { Erubis::Eruby.new(tpl_erb).result(eview) }
53
- bench('(1) slim') { Slim::Template.new { tpl_slim }.render(view) }
54
- bench('(1) haml') { Haml::Engine.new(tpl_haml, :format => :html5).render(view) }
55
- bench('(1) haml ugly') { Haml::Engine.new(tpl_haml, :format => :html5, :ugly => true).render(view) }
48
+ bench('(1) erb') { ERB.new(tpl_erb).result(context_binding) }
49
+ bench('(1) erubis') { Erubis::Eruby.new(tpl_erb).result(context_binding) }
50
+ bench('(1) fast erubis') { Erubis::Eruby.new(tpl_erb).result(context_binding) }
51
+ bench('(1) slim') { Slim::Template.new { tpl_slim }.render(context) }
52
+ bench('(1) haml') { Haml::Engine.new(tpl_haml, :format => :html5).render(context) }
53
+ bench('(1) haml ugly') { Haml::Engine.new(tpl_haml, :format => :html5, :ugly => true).render(context) }
56
54
  end
57
55
 
58
- bench('(2) erb') { erb.result(eview) }
59
- bench('(2) erubis') { erubis.result(eview) }
60
- bench('(2) fast erubis') { fast_erubis.result(eview) }
61
- bench('(2) slim') { slim.render(view) }
62
- bench('(2) haml') { haml.render(view) }
63
- bench('(2) haml ugly') { haml_ugly.render(view) }
64
-
65
- bench('(3) erb') { view.run_erb }
66
- bench('(3) erubis') { view.run_erubis }
67
- bench('(3) fast erubis') { view.run_fast_erubis }
68
- bench('(3) slim') { view.run_slim }
69
- bench('(3) haml') { view.run_haml }
70
- bench('(3) haml ugly') { view.run_haml_ugly }
71
-
72
- bench('(4) erb') { tilt_erb.render(view) }
73
- bench('(4) erubis') { tilt_erubis.render(view) }
74
- bench('(4) slim') { tilt_slim.render(view) }
75
- bench('(4) haml') { tilt_haml.render(view) }
76
- bench('(4) haml ugly') { tilt_haml_ugly.render(view) }
56
+ bench('(2) erb') { erb.result(context_binding) }
57
+ bench('(2) erubis') { erubis.result(context_binding) }
58
+ bench('(2) fast erubis') { fast_erubis.result(context_binding) }
59
+ bench('(2) slim') { slim.render(context) }
60
+ bench('(2) haml') { haml.render(context) }
61
+ bench('(2) haml ugly') { haml_ugly.render(context) }
62
+
63
+ bench('(3) erb') { context.run_erb }
64
+ bench('(3) erubis') { context.run_erubis }
65
+ bench('(3) fast erubis') { context.run_fast_erubis }
66
+ bench('(3) slim') { context.run_slim }
67
+ bench('(3) haml') { context.run_haml }
68
+ bench('(3) haml ugly') { context.run_haml_ugly }
69
+
70
+ bench('(4) erb') { tilt_erb.render(context) }
71
+ bench('(4) erubis') { tilt_erubis.render(context) }
72
+ bench('(4) slim') { tilt_slim.render(context) }
73
+ bench('(4) haml') { tilt_haml.render(context) }
74
+ bench('(4) haml ugly') { tilt_haml_ugly.render(context) }
77
75
  end
78
76
 
79
77
  def run
File without changes
File without changes
File without changes
@@ -153,7 +153,7 @@ module Slim
153
153
  # ERB engine (uses the Temple ERB implementation)
154
154
  class ERBEngine < EmbeddedEngine
155
155
  def on_slim_embedded(engine, body)
156
- Temple::ERB::Parser.new.call(CollectText.new.call(body))
156
+ [:multi, [:newline], Temple::ERB::Parser.new.call(CollectText.new.call(body))]
157
157
  end
158
158
  end
159
159
 
@@ -169,7 +169,7 @@ module Slim
169
169
  # Embeds ruby code
170
170
  class RubyEngine < EmbeddedEngine
171
171
  def on_slim_embedded(engine, body)
172
- [:code, CollectText.new.call(body) + "\n"]
172
+ [:multi, [:newline], [:code, CollectText.new.call(body)]]
173
173
  end
174
174
  end
175
175
 
@@ -33,7 +33,9 @@ module Slim
33
33
  # Symbol | :format | :xhtml | HTML output format
34
34
  # String | :attr_wrapper | '"' | Character to wrap attributes in html (can be ' or ")
35
35
  # Hash | :attr_delimiter | {'class' => ' '} | Joining character used if multiple html attributes are supplied (e.g. id1_id2)
36
+ # Symbol | :sort_attrs | true | Sort attributes by name
36
37
  # Boolean | :pretty | false | Pretty html indenting (This is slower!)
38
+ # String | :indent | ' ' | Indentation string
37
39
  # Boolean | :streaming | false (true in Rails > 3.1) | Enable output streaming
38
40
  # Class | :generator | ArrayBuffer/RailsOutputBuffer | Temple code generator (default generator generates array buffer)
39
41
  #
@@ -59,13 +61,13 @@ module Slim
59
61
  use Slim::Sections, :sections, :dictionary, :dictionary_access
60
62
  use Slim::EndInserter
61
63
  use Slim::Compiler, :disable_capture, :attr_delimiter
62
- use Temple::HTML::AttributeMerger, :attr_delimiter
63
- use Temple::HTML::Pretty, :format, :attr_wrapper, :pretty
64
+ use Temple::HTML::AttributeMerger, :attr_delimiter, :sort_attrs
65
+ use Temple::HTML::Pretty, :format, :attr_wrapper, :pretty, :indent
64
66
  filter :Escapable, :use_html_safe, :disable_escape
65
67
  filter :ControlFlow
66
68
  filter :MultiFlattener
67
- wildcard(:Optimizer) { (options[:streaming] ? Temple::Filters::StaticMerger :
68
- Temple::Filters::DynamicInliner).new }
69
- wildcard(:Generator) { options[:generator].new(options) }
69
+ use(:Optimizer) { (options[:streaming] ? Temple::Filters::StaticMerger :
70
+ Temple::Filters::DynamicInliner).new }
71
+ use(:Generator) { options[:generator].new(options) }
70
72
  end
71
73
  end
@@ -42,7 +42,7 @@ module Slim
42
42
  def call(str)
43
43
  # Set string encoding if option is set
44
44
  if options[:encoding] && str.respond_to?(:encoding)
45
- old = str.encoding
45
+ old_enc = str.encoding
46
46
  str = str.dup if str.frozen?
47
47
  str.force_encoding(options[:encoding])
48
48
  # Fall back to old encoding if new encoding is invalid
@@ -73,12 +73,8 @@ module Slim
73
73
 
74
74
  DELIMITER_REGEX = /\A[\(\[\{]/
75
75
  ATTR_NAME_REGEX = '\A\s*(\w[:\w-]*)'
76
-
77
- if RUBY_VERSION > '1.9'
78
- CLASS_ID_REGEX = /\A(#|\.)([\w\u00c0-\uFFFF][\w:\u00c0-\uFFFF-]*)/
79
- else
80
- CLASS_ID_REGEX = /\A(#|\.)(\w[\w:-]*)/
81
- end
76
+ CLASS_ID_REGEX = /\A(#|\.)(\w[\w-]*\w|\w+)/
77
+ TAG_REGEX = /\A([#\.]|\w[\w:-]*\w|\w+)/
82
78
 
83
79
  def reset(lines = nil, stacks = nil)
84
80
  # Since you can indent however you like in Slim, we need to keep a list
@@ -175,11 +171,7 @@ module Slim
175
171
  # Found a comment block.
176
172
  if @line =~ %r{\A/!( ?)(.*)\Z}
177
173
  # HTML comment
178
- block = [:multi]
179
- @stacks.last << [:html, :comment, block]
180
- @stacks << block
181
- @stacks.last << [:slim, :interpolate, $2] unless $2.empty?
182
- parse_text_block($2.empty? ? nil : @indents.last + $1.size + 2)
174
+ @stacks.last << [:html, :comment, parse_text_block($2, @indents.last + $1.size + 2)]
183
175
  elsif @line =~ %r{\A/\[\s*(.*?)\s*\]\s*\Z}
184
176
  # HTML conditional comment
185
177
  block = [:multi]
@@ -192,8 +184,7 @@ module Slim
192
184
  when /\A([\|'])( ?)(.*)\Z/
193
185
  # Found a text block.
194
186
  trailing_ws = $1 == "'"
195
- @stacks.last << [:slim, :interpolate, $3] unless $3.empty?
196
- parse_text_block($3.empty? ? nil : @indents.last + $2.size + 1)
187
+ @stacks.last << parse_text_block($3, @indents.last + $2.size + 1)
197
188
  @stacks.last << [:static, ' '] if trailing_ws
198
189
  when /\A-/
199
190
  # Found a code block.
@@ -213,15 +204,11 @@ module Slim
213
204
  @stacks << block
214
205
  when /\A(\w+):\s*\Z/
215
206
  # Embedded template detected. It is treated as block.
216
- block = [:multi]
217
- @stacks.last << [:newline] << [:slim, :embedded, $1, block]
218
- @stacks << block
219
- parse_text_block
220
- return # Don't append newline, this has already been done before
207
+ @stacks.last << [:slim, :embedded, $1, parse_text_block]
221
208
  when /\Adoctype\s+/i
222
209
  # Found doctype declaration
223
210
  @stacks.last << [:html, :doctype, $'.strip]
224
- when /\A([#\.]|\w[:\w-]*)/
211
+ when TAG_REGEX
225
212
  # Found a HTML tag.
226
213
  parse_tag($&)
227
214
  else
@@ -237,19 +224,26 @@ module Slim
237
224
  end
238
225
  end
239
226
 
240
- def parse_text_block(text_indent = nil)
227
+ def parse_text_block(first_line = nil, text_indent = nil)
228
+ result = [:multi]
229
+ if !first_line || first_line.empty?
230
+ text_indent = nil
231
+ else
232
+ result << [:slim, :interpolate, first_line]
233
+ end
234
+
241
235
  empty_lines = 0
242
236
  until @lines.empty?
243
237
  if @lines.first =~ /\A\s*\Z/
244
238
  next_line
245
- @stacks.last << [:newline]
239
+ result << [:newline]
246
240
  empty_lines += 1 if text_indent
247
241
  else
248
242
  indent = get_indent(@lines.first)
249
243
  break if indent <= @indents.last
250
244
 
251
245
  if empty_lines > 0
252
- @stacks.last << [:slim, :interpolate, "\n" * empty_lines]
246
+ result << [:slim, :interpolate, "\n" * empty_lines]
253
247
  empty_lines = 0
254
248
  end
255
249
 
@@ -261,13 +255,14 @@ module Slim
261
255
  offset = text_indent ? indent - text_indent : 0
262
256
  syntax_error!('Unexpected text indentation') if offset < 0
263
257
 
264
- @stacks.last << [:slim, :interpolate, (text_indent ? "\n" : '') + (' ' * offset) + @line] << [:newline]
258
+ result << [:newline] << [:slim, :interpolate, (text_indent ? "\n" : '') + (' ' * offset) + @line]
265
259
 
266
260
  # The indentation of first line of the text block
267
261
  # determines the text base indentation.
268
262
  text_indent ||= indent
269
263
  end
270
264
  end
265
+ result
271
266
  end
272
267
 
273
268
  def parse_broken_line
@@ -290,6 +285,16 @@ module Slim
290
285
  @stacks.last << tag
291
286
 
292
287
  case @line
288
+ when /\A\s*:\s*/
289
+ # Block expansion
290
+ @line = $'
291
+ (@line =~ TAG_REGEX) || syntax_error!('Expected tag')
292
+ content = [:multi]
293
+ tag << content
294
+ i = @stacks.size
295
+ @stacks << content
296
+ parse_tag($1)
297
+ @stacks.delete_at(i)
293
298
  when /\A\s*=(=?)('?)/
294
299
  # Handle output code
295
300
  block = [:multi]
@@ -307,10 +312,7 @@ module Slim
307
312
  @stacks << content
308
313
  when /\A( ?)(.*)\Z/
309
314
  # Text content
310
- content = [:multi, [:slim, :interpolate, $2]]
311
- tag << content
312
- @stacks << content
313
- parse_text_block(@orig_line.size - @line.size + $1.size)
315
+ tag << parse_text_block($2, @orig_line.size - @line.size + $1.size)
314
316
  end
315
317
  end
316
318
 
@@ -1,5 +1,5 @@
1
1
  module Slim
2
2
  # Slim version string
3
3
  # @api public
4
- VERSION = '1.0.4'
4
+ VERSION = '1.1.0'
5
5
  end
@@ -19,15 +19,13 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = %w(lib)
21
21
 
22
- s.add_runtime_dependency('temple', ['~> 0.3.4'])
22
+ s.add_runtime_dependency('temple', ['~> 0.3.5'])
23
23
  s.add_runtime_dependency('tilt', ['~> 1.3.2'])
24
24
 
25
25
  s.add_development_dependency('rake', ['>= 0.8.7'])
26
26
  s.add_development_dependency('sass', ['>= 3.1.0'])
27
27
  s.add_development_dependency('minitest', ['>= 0'])
28
28
  s.add_development_dependency('kramdown', ['>= 0'])
29
- s.add_development_dependency('yard', ['>= 0'])
30
29
  s.add_development_dependency('creole', ['>= 0'])
31
30
  s.add_development_dependency('builder', ['>= 0'])
32
- #s.add_development_dependency('rcov', ['>= 0'])
33
31
  end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class TestSlimEncoding < TestSlim
4
+ def test_binary
5
+ source = "| \xFF\xFF"
6
+ result = "\xFF\xFF"
7
+ assert_html result, source
8
+ end
9
+ end
@@ -435,4 +435,28 @@ data-info="myinfo">
435
435
  end
436
436
  end
437
437
 
438
+ def test_block_expansion_support
439
+ source = %q{
440
+ ul
441
+ li.first: a href='a' foo
442
+ li: a href='b' bar
443
+ li.last: a href='c' baz
444
+ }
445
+ assert_html %{<ul><li class=\"first\"><a href=\"a\">foo</a></li><li><a href=\"b\">bar</a></li><li class=\"last\"><a href=\"c\">baz</a></li></ul>}, source
446
+ end
447
+
448
+ def test_block_expansion_class_attributes
449
+ source = %q{
450
+ .a: .b: #c d
451
+ }
452
+ assert_html %{<div class="a"><div class="b"><div id="c">d</div></div></div>}, source
453
+ end
454
+
455
+ def test_block_expansion_nesting
456
+ source = %q{
457
+ html: body: .content
458
+ | Text
459
+ }
460
+ assert_html %{<html><body><div class=\"content\">Text</div></body></html>}, source
461
+ end
438
462
  end
@@ -104,4 +104,24 @@ p
104
104
 
105
105
  assert_syntax_error "Invalid empty attribute\n (__TEMPLATE__), Line 3\n img src=\n ^\n", source
106
106
  end
107
+
108
+ def test_missing_tag_in_block_expansion
109
+ source = %{
110
+ html: body:
111
+ }
112
+
113
+ assert_syntax_error "Expected tag\n (__TEMPLATE__), Line 2\n html: body:\n ^\n", source
114
+ end
115
+
116
+ def test_invalid_tag_in_block_expansion
117
+ source = %{
118
+ html: body: /comment
119
+ }
120
+ assert_syntax_error "Expected tag\n (__TEMPLATE__), Line 2\n html: body: /comment\n ^\n", source
121
+
122
+ source = %{
123
+ html: body:/comment
124
+ }
125
+ assert_syntax_error "Expected tag\n (__TEMPLATE__), Line 2\n html: body:/comment\n ^\n", source
126
+ end
107
127
  end
@@ -94,6 +94,22 @@ p Text line 1
94
94
  assert_ruby_error NameError,"(__TEMPLATE__):4", source
95
95
  end
96
96
 
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
+
97
113
  def test_embedded_ruby1
98
114
  source = %q{
99
115
  ruby:
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: 1.0.4
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,22 +11,22 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-11-03 00:00:00.000000000 Z
14
+ date: 2012-01-06 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: temple
18
- requirement: &2160332500 !ruby/object:Gem::Requirement
18
+ requirement: &2152139880 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 0.3.4
23
+ version: 0.3.5
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *2160332500
26
+ version_requirements: *2152139880
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: tilt
29
- requirement: &2160331940 !ruby/object:Gem::Requirement
29
+ requirement: &2152135380 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ~>
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: 1.3.2
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *2160331940
37
+ version_requirements: *2152135380
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: rake
40
- requirement: &2160331240 !ruby/object:Gem::Requirement
40
+ requirement: &2152133280 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ! '>='
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: 0.8.7
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *2160331240
48
+ version_requirements: *2152133280
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: sass
51
- requirement: &2160330540 !ruby/object:Gem::Requirement
51
+ requirement: &2152132380 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ! '>='
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: 3.1.0
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *2160330540
59
+ version_requirements: *2152132380
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: minitest
62
- requirement: &2160329940 !ruby/object:Gem::Requirement
62
+ requirement: &2152131200 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ! '>='
@@ -67,10 +67,10 @@ dependencies:
67
67
  version: '0'
68
68
  type: :development
69
69
  prerelease: false
70
- version_requirements: *2160329940
70
+ version_requirements: *2152131200
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: kramdown
73
- requirement: &2160329440 !ruby/object:Gem::Requirement
73
+ requirement: &2152129720 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
76
76
  - - ! '>='
@@ -78,21 +78,10 @@ dependencies:
78
78
  version: '0'
79
79
  type: :development
80
80
  prerelease: false
81
- version_requirements: *2160329440
82
- - !ruby/object:Gem::Dependency
83
- name: yard
84
- requirement: &2160328920 !ruby/object:Gem::Requirement
85
- none: false
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: *2160328920
81
+ version_requirements: *2152129720
93
82
  - !ruby/object:Gem::Dependency
94
83
  name: creole
95
- requirement: &2160328340 !ruby/object:Gem::Requirement
84
+ requirement: &2152128100 !ruby/object:Gem::Requirement
96
85
  none: false
97
86
  requirements:
98
87
  - - ! '>='
@@ -100,10 +89,10 @@ dependencies:
100
89
  version: '0'
101
90
  type: :development
102
91
  prerelease: false
103
- version_requirements: *2160328340
92
+ version_requirements: *2152128100
104
93
  - !ruby/object:Gem::Dependency
105
94
  name: builder
106
- requirement: &2160327860 !ruby/object:Gem::Requirement
95
+ requirement: &2152125140 !ruby/object:Gem::Requirement
107
96
  none: false
108
97
  requirements:
109
98
  - - ! '>='
@@ -111,7 +100,7 @@ dependencies:
111
100
  version: '0'
112
101
  type: :development
113
102
  prerelease: false
114
- version_requirements: *2160327860
103
+ version_requirements: *2152125140
115
104
  description: Slim is a template language whose goal is reduce the syntax to the essential
116
105
  parts without becoming cryptic.
117
106
  email:
@@ -133,11 +122,13 @@ files:
133
122
  - LICENSE
134
123
  - README.md
135
124
  - Rakefile
136
- - benchmarks/complex.erb
137
- - benchmarks/complex.haml
138
- - benchmarks/complex.slim
139
- - benchmarks/complex_view.rb
140
- - benchmarks/run.rb
125
+ - benchmarks/context.rb
126
+ - benchmarks/profile-parser.rb
127
+ - benchmarks/profile-render.rb
128
+ - benchmarks/run-benchmarks.rb
129
+ - benchmarks/view.erb
130
+ - benchmarks/view.haml
131
+ - benchmarks/view.slim
141
132
  - bin/slimrb
142
133
  - extra/slim-mode.el
143
134
  - extra/test.slim
@@ -204,6 +195,7 @@ files:
204
195
  - test/slim/test_code_output.rb
205
196
  - test/slim/test_code_structure.rb
206
197
  - test/slim/test_embedded_engines.rb
198
+ - test/slim/test_encoding.rb
207
199
  - test/slim/test_html_escaping.rb
208
200
  - test/slim/test_html_structure.rb
209
201
  - test/slim/test_parser_errors.rb
@@ -239,3 +231,4 @@ signing_key:
239
231
  specification_version: 3
240
232
  summary: Slim is a template language.
241
233
  test_files: []
234
+ has_rdoc:
@@ -1,15 +0,0 @@
1
- require 'tilt'
2
-
3
- class ComplexView
4
- def header
5
- "Colors"
6
- end
7
-
8
- def item
9
- items = []
10
- items << { :name => 'red', :current => true, :url => '#red' }
11
- items << { :name => 'green', :current => false, :url => '#green' }
12
- items << { :name => 'blue', :current => false, :url => '#blue' }
13
- items
14
- end
15
- end