slim 1.2.2 → 1.3.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.
- data/.travis.yml +3 -1
- data/CHANGES +6 -0
- data/Gemfile +1 -3
- data/README.md +504 -207
- data/Rakefile +28 -12
- data/benchmarks/profile-render.rb +3 -3
- data/benchmarks/run-benchmarks.rb +104 -62
- data/benchmarks/run-diffbench.rb +21 -0
- data/bin/slimrb +1 -2
- data/lib/slim.rb +0 -2
- data/lib/slim/command.rb +12 -5
- data/lib/slim/compiler.rb +10 -15
- data/lib/slim/embedded_engine.rb +34 -16
- data/lib/slim/engine.rb +4 -51
- data/lib/slim/filter.rb +5 -5
- data/lib/slim/grammar.rb +1 -1
- data/lib/slim/interpolation.rb +1 -3
- data/lib/slim/logic_less.rb +6 -0
- data/lib/slim/{sections.rb → logic_less/filter.rb} +16 -16
- data/lib/slim/logic_less/wrapper.rb +64 -0
- data/lib/slim/parser.rb +9 -11
- data/lib/slim/translator.rb +117 -0
- data/lib/slim/version.rb +1 -1
- data/slim.gemspec +1 -1
- data/test/slim/helper.rb +0 -5
- data/test/slim/{test_sections.rb → logic_less/test_logic_less.rb} +16 -15
- data/test/slim/{test_wrapper.rb → logic_less/test_wrapper.rb} +4 -12
- data/test/slim/test_encoding.rb +6 -0
- data/test/slim/test_slim_template.rb +4 -0
- data/test/slim/translator/test_translator.rb +64 -0
- metadata +69 -24
- data/lib/slim/wrapper.rb +0 -57
data/lib/slim/version.rb
CHANGED
data/slim.gemspec
CHANGED
@@ -19,7 +19,7 @@ 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.4.
|
22
|
+
s.add_runtime_dependency('temple', ['~> 0.4.1'])
|
23
23
|
s.add_runtime_dependency('tilt', ['~> 1.3.3'])
|
24
24
|
|
25
25
|
s.add_development_dependency('rake', ['>= 0.8.7'])
|
data/test/slim/helper.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'rubygems'
|
4
3
|
require 'minitest/unit'
|
5
4
|
require 'slim'
|
6
5
|
require 'slim/grammar'
|
@@ -16,10 +15,6 @@ class TestSlim < MiniTest::Unit::TestCase
|
|
16
15
|
@env = Env.new
|
17
16
|
end
|
18
17
|
|
19
|
-
def teardown
|
20
|
-
Slim::Sections.set_default_options(:dictionary_access => :wrapped)
|
21
|
-
end
|
22
|
-
|
23
18
|
def render(source, options = {}, &block)
|
24
19
|
Slim::Template.new(options[:file], options) { source }.render(options[:scope] || @env, &block)
|
25
20
|
end
|
@@ -1,15 +1,8 @@
|
|
1
1
|
require 'helper'
|
2
|
+
require 'slim/logic_less'
|
2
3
|
|
3
4
|
class TestSlimLogicLess < TestSlim
|
4
|
-
def
|
5
|
-
Slim::Sections.set_default_options(:dictionary_access => :symbol)
|
6
|
-
end
|
7
|
-
|
8
|
-
def teardown
|
9
|
-
Slim::Sections.set_default_options(:dictionary => 'self')
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_sections
|
5
|
+
def test_symbol_access
|
13
6
|
source = %q{
|
14
7
|
p
|
15
8
|
- person
|
@@ -23,10 +16,10 @@ p
|
|
23
16
|
]
|
24
17
|
}
|
25
18
|
|
26
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :scope => hash, :
|
19
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :scope => hash, :dictionary_access => :symbol
|
27
20
|
end
|
28
21
|
|
29
|
-
def
|
22
|
+
def test_string_access
|
30
23
|
source = %q{
|
31
24
|
p
|
32
25
|
- person
|
@@ -40,7 +33,7 @@ p
|
|
40
33
|
]
|
41
34
|
}
|
42
35
|
|
43
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :scope => hash, :
|
36
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :scope => hash, :dictionary_access => :string
|
44
37
|
end
|
45
38
|
|
46
39
|
def test_flag_section
|
@@ -61,7 +54,7 @@ p
|
|
61
54
|
]
|
62
55
|
}
|
63
56
|
|
64
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div>shown</p>', source, :scope => hash
|
57
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div>shown</p>', source, :scope => hash
|
65
58
|
end
|
66
59
|
|
67
60
|
def test_inverted_section
|
@@ -77,7 +70,7 @@ p
|
|
77
70
|
|
78
71
|
hash = {}
|
79
72
|
|
80
|
-
assert_html '<p>No person No person 2</p>', source, :scope => hash
|
73
|
+
assert_html '<p>No person No person 2</p>', source, :scope => hash
|
81
74
|
end
|
82
75
|
|
83
76
|
def test_output_with_content
|
@@ -85,6 +78,14 @@ p
|
|
85
78
|
p = method_with_block do
|
86
79
|
block
|
87
80
|
}
|
88
|
-
assert_runtime_error 'Output statements with content are forbidden in
|
81
|
+
assert_runtime_error 'Output statements with content are forbidden in logic less mode', source
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_escaped_interpolation
|
85
|
+
source = %q{
|
86
|
+
p text with \#{123} test
|
87
|
+
}
|
88
|
+
|
89
|
+
assert_html '<p>text with #{123} test</p>', source
|
89
90
|
end
|
90
91
|
end
|
@@ -1,22 +1,14 @@
|
|
1
1
|
require 'helper'
|
2
|
-
|
2
|
+
require 'slim/logic_less'
|
3
3
|
|
4
4
|
class TestSlimWrapper < TestSlim
|
5
|
-
def setup
|
6
|
-
Slim::Sections.set_default_options(:dictionary => 'ViewEnv.new')
|
7
|
-
end
|
8
|
-
|
9
|
-
def teardown
|
10
|
-
Slim::Sections.set_default_options(:dictionary => 'self')
|
11
|
-
end
|
12
|
-
|
13
5
|
def test_sections
|
14
6
|
source = %q{
|
15
7
|
p
|
16
8
|
- person
|
17
9
|
.name = name
|
18
10
|
}
|
19
|
-
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :sections => true
|
11
|
+
assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :sections => true, :dictionary => 'ViewEnv.new'
|
20
12
|
end
|
21
13
|
|
22
14
|
def test_with_array
|
@@ -26,14 +18,14 @@ ul
|
|
26
18
|
li = name
|
27
19
|
li = city
|
28
20
|
}
|
29
|
-
assert_html '<ul><li>Andy</li><li>Atlanta</li><li>Fred</li><li>Melbourne</li><li>Daniel</li><li>Karlsruhe</li></ul>', source, :sections => true
|
21
|
+
assert_html '<ul><li>Andy</li><li>Atlanta</li><li>Fred</li><li>Melbourne</li><li>Daniel</li><li>Karlsruhe</li></ul>', source, :sections => true, :dictionary => 'ViewEnv.new'
|
30
22
|
end
|
31
23
|
|
32
24
|
def test_method
|
33
25
|
source = %q{
|
34
26
|
a href=output_number Link
|
35
27
|
}
|
36
|
-
assert_html '<a href="1337">Link</a>', source, :sections => true
|
28
|
+
assert_html '<a href="1337">Link</a>', source, :sections => true, :dictionary => 'ViewEnv.new'
|
37
29
|
end
|
38
30
|
|
39
31
|
end
|
data/test/slim/test_encoding.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestSlimEncoding < TestSlim
|
4
|
+
def test_windows_crlf
|
5
|
+
source = "a href='#' something\r\nbr\r\na href='#' others\r\n"
|
6
|
+
result = "<a href=\"#\">something</a><br /><a href=\"#\">others</a>"
|
7
|
+
assert_html result, source
|
8
|
+
end
|
9
|
+
|
4
10
|
def test_binary
|
5
11
|
source = "| \xFF\xFF"
|
6
12
|
result = "\xFF\xFF"
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'slim/translator'
|
3
|
+
|
4
|
+
class TestSlimTranslator < TestSlim
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
Slim::Engine.set_default_options :tr => true, :tr_fn => 'TestSlimTranslator.tr'
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.tr(s)
|
11
|
+
s.upcase
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.tr_reverse(s)
|
15
|
+
s.reverse.gsub(/(\d+)%/, '%\1')
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_no_translation_of_embedded
|
19
|
+
source = %q{
|
20
|
+
markdown:
|
21
|
+
#Header
|
22
|
+
Hello from #{"Markdown!"}
|
23
|
+
|
24
|
+
#{1+2}
|
25
|
+
|
26
|
+
* one
|
27
|
+
* two
|
28
|
+
}
|
29
|
+
assert_html "<h1 id=\"header\">Header</h1>\n<p>Hello from Markdown!</p>\n\n<p>3</p>\n\n<ul>\n <li>one</li>\n <li>two</li>\n</ul>\n", source, :tr_mode => :dynamic
|
30
|
+
assert_html "<h1 id=\"header\">Header</h1>\n<p>Hello from Markdown!</p>\n\n<p>3</p>\n\n<ul>\n <li>one</li>\n <li>two</li>\n</ul>\n", source, :tr_mode => :static
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_no_translation_of_attrs
|
34
|
+
source = %q{
|
35
|
+
' this is
|
36
|
+
a link to
|
37
|
+
a href="link" page
|
38
|
+
}
|
39
|
+
|
40
|
+
assert_html "THIS IS\nA LINK TO <a href=\"link\">PAGE</a>", source, :tr_mode => :dynamic
|
41
|
+
assert_html "THIS IS\nA LINK TO <a href=\"link\">PAGE</a>", source, :tr_mode => :static
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_translation_and_interpolation
|
45
|
+
source = %q{
|
46
|
+
p translate #{hello_world} this
|
47
|
+
second line
|
48
|
+
third #{1+2} line
|
49
|
+
}
|
50
|
+
|
51
|
+
assert_html "<p>translate Hello World from @env this\nsecond line\nthird 3 line</p>", source, :tr => false
|
52
|
+
assert_html "<p>TRANSLATE Hello World from @env THIS\nSECOND LINE\nTHIRD 3 LINE</p>", source, :tr_mode => :dynamic
|
53
|
+
assert_html "<p>TRANSLATE Hello World from @env THIS\nSECOND LINE\nTHIRD 3 LINE</p>", source, :tr_mode => :static
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_translation_reverse
|
57
|
+
source = %q{
|
58
|
+
' alpha #{1} beta #{2} gamma #{3}
|
59
|
+
}
|
60
|
+
|
61
|
+
assert_html "3 ammag 2 ateb 1 ahpla ", source, :tr_mode => :dynamic, :tr_fn => 'TestSlimTranslator.tr_reverse'
|
62
|
+
assert_html "3 ammag 2 ateb 1 ahpla ", source, :tr_mode => :static, :tr_fn => 'TestSlimTranslator.tr_reverse'
|
63
|
+
end
|
64
|
+
end
|
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.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,22 +11,27 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-09-04 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: temple
|
18
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.4.
|
23
|
+
version: 0.4.1
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements:
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ~>
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 0.4.1
|
27
32
|
- !ruby/object:Gem::Dependency
|
28
33
|
name: tilt
|
29
|
-
requirement:
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
30
35
|
none: false
|
31
36
|
requirements:
|
32
37
|
- - ~>
|
@@ -34,10 +39,15 @@ dependencies:
|
|
34
39
|
version: 1.3.3
|
35
40
|
type: :runtime
|
36
41
|
prerelease: false
|
37
|
-
version_requirements:
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.3.3
|
38
48
|
- !ruby/object:Gem::Dependency
|
39
49
|
name: rake
|
40
|
-
requirement:
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
41
51
|
none: false
|
42
52
|
requirements:
|
43
53
|
- - ! '>='
|
@@ -45,10 +55,15 @@ dependencies:
|
|
45
55
|
version: 0.8.7
|
46
56
|
type: :development
|
47
57
|
prerelease: false
|
48
|
-
version_requirements:
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.8.7
|
49
64
|
- !ruby/object:Gem::Dependency
|
50
65
|
name: sass
|
51
|
-
requirement:
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
52
67
|
none: false
|
53
68
|
requirements:
|
54
69
|
- - ! '>='
|
@@ -56,10 +71,15 @@ dependencies:
|
|
56
71
|
version: 3.1.0
|
57
72
|
type: :development
|
58
73
|
prerelease: false
|
59
|
-
version_requirements:
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 3.1.0
|
60
80
|
- !ruby/object:Gem::Dependency
|
61
81
|
name: minitest
|
62
|
-
requirement:
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
63
83
|
none: false
|
64
84
|
requirements:
|
65
85
|
- - ! '>='
|
@@ -67,10 +87,15 @@ dependencies:
|
|
67
87
|
version: '0'
|
68
88
|
type: :development
|
69
89
|
prerelease: false
|
70
|
-
version_requirements:
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
71
96
|
- !ruby/object:Gem::Dependency
|
72
97
|
name: kramdown
|
73
|
-
requirement:
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
74
99
|
none: false
|
75
100
|
requirements:
|
76
101
|
- - ! '>='
|
@@ -78,10 +103,15 @@ dependencies:
|
|
78
103
|
version: '0'
|
79
104
|
type: :development
|
80
105
|
prerelease: false
|
81
|
-
version_requirements:
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
82
112
|
- !ruby/object:Gem::Dependency
|
83
113
|
name: creole
|
84
|
-
requirement:
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
85
115
|
none: false
|
86
116
|
requirements:
|
87
117
|
- - ! '>='
|
@@ -89,10 +119,15 @@ dependencies:
|
|
89
119
|
version: '0'
|
90
120
|
type: :development
|
91
121
|
prerelease: false
|
92
|
-
version_requirements:
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
93
128
|
- !ruby/object:Gem::Dependency
|
94
129
|
name: builder
|
95
|
-
requirement:
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
96
131
|
none: false
|
97
132
|
requirements:
|
98
133
|
- - ! '>='
|
@@ -100,7 +135,12 @@ dependencies:
|
|
100
135
|
version: '0'
|
101
136
|
type: :development
|
102
137
|
prerelease: false
|
103
|
-
version_requirements:
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
104
144
|
description: Slim is a template language whose goal is reduce the syntax to the essential
|
105
145
|
parts without becoming cryptic.
|
106
146
|
email:
|
@@ -128,6 +168,7 @@ files:
|
|
128
168
|
- benchmarks/profile-parser.rb
|
129
169
|
- benchmarks/profile-render.rb
|
130
170
|
- benchmarks/run-benchmarks.rb
|
171
|
+
- benchmarks/run-diffbench.rb
|
131
172
|
- benchmarks/view.erb
|
132
173
|
- benchmarks/view.haml
|
133
174
|
- benchmarks/view.slim
|
@@ -141,11 +182,13 @@ files:
|
|
141
182
|
- lib/slim/filter.rb
|
142
183
|
- lib/slim/grammar.rb
|
143
184
|
- lib/slim/interpolation.rb
|
185
|
+
- lib/slim/logic_less.rb
|
186
|
+
- lib/slim/logic_less/filter.rb
|
187
|
+
- lib/slim/logic_less/wrapper.rb
|
144
188
|
- lib/slim/parser.rb
|
145
|
-
- lib/slim/sections.rb
|
146
189
|
- lib/slim/template.rb
|
190
|
+
- lib/slim/translator.rb
|
147
191
|
- lib/slim/version.rb
|
148
|
-
- lib/slim/wrapper.rb
|
149
192
|
- slim.gemspec
|
150
193
|
- test/rails/Rakefile
|
151
194
|
- test/rails/app/controllers/application_controller.rb
|
@@ -188,6 +231,8 @@ files:
|
|
188
231
|
- test/rails/test/helper.rb
|
189
232
|
- test/rails/test/test_slim.rb
|
190
233
|
- test/slim/helper.rb
|
234
|
+
- test/slim/logic_less/test_logic_less.rb
|
235
|
+
- test/slim/logic_less/test_wrapper.rb
|
191
236
|
- test/slim/test_chain_manipulation.rb
|
192
237
|
- test/slim/test_code_blocks.rb
|
193
238
|
- test/slim/test_code_escaping.rb
|
@@ -201,10 +246,9 @@ files:
|
|
201
246
|
- test/slim/test_parser_errors.rb
|
202
247
|
- test/slim/test_pretty.rb
|
203
248
|
- test/slim/test_ruby_errors.rb
|
204
|
-
- test/slim/test_sections.rb
|
205
249
|
- test/slim/test_slim_template.rb
|
206
250
|
- test/slim/test_text_interpolation.rb
|
207
|
-
- test/slim/
|
251
|
+
- test/slim/translator/test_translator.rb
|
208
252
|
homepage: http://slim-lang.com/
|
209
253
|
licenses: []
|
210
254
|
post_install_message:
|
@@ -226,8 +270,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
226
270
|
version: '0'
|
227
271
|
requirements: []
|
228
272
|
rubyforge_project: slim
|
229
|
-
rubygems_version: 1.8.
|
273
|
+
rubygems_version: 1.8.24
|
230
274
|
signing_key:
|
231
275
|
specification_version: 3
|
232
276
|
summary: Slim is a template language.
|
233
277
|
test_files: []
|
278
|
+
has_rdoc:
|