slim 1.3.3 → 1.3.4
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/CHANGES +5 -0
- data/README.md +18 -0
- data/Rakefile +1 -0
- data/lib/slim/filter.rb +0 -5
- data/lib/slim/logic_less/filter.rb +2 -2
- data/lib/slim/version.rb +1 -1
- data/test/core/test_html_structure.rb +2 -2
- data/test/core/test_slim_template.rb +3 -48
- data/test/literate/TESTS.md +23 -0
- data/test/literate/helper.rb +1 -1
- data/test/literate/run.rb +3 -7
- data/test/logic_less/test_logic_less.rb +25 -2
- metadata +20 -59
data/CHANGES
CHANGED
data/README.md
CHANGED
@@ -408,6 +408,24 @@ renders as
|
|
408
408
|
|
409
409
|
div class="first second third"
|
410
410
|
|
411
|
+
#### Dynamic tags `*`
|
412
|
+
|
413
|
+
You can create completely dynamic tags using the splat attributes. Just create a method which returns a hash
|
414
|
+
with the :tag key.
|
415
|
+
|
416
|
+
ruby:
|
417
|
+
def a_unless_current
|
418
|
+
@page_current ? {:tag => 'span'} : {:tag => 'a', :href => 'http://slim-lang.com/'}
|
419
|
+
end
|
420
|
+
- @page_current = true
|
421
|
+
*a_unless_current Link
|
422
|
+
- @page_current = false
|
423
|
+
*a_unless_current Link
|
424
|
+
|
425
|
+
renders as
|
426
|
+
|
427
|
+
<span>Link</span><a href="http://slim-lang.com/">Link</a>
|
428
|
+
|
411
429
|
#### ID shortcut `#` and class shortcut `.`
|
412
430
|
|
413
431
|
Similarly to Haml, you can specify the `id` and `class` attributes in the following shortcut form
|
data/Rakefile
CHANGED
data/lib/slim/filter.rb
CHANGED
@@ -41,8 +41,8 @@ module Slim
|
|
41
41
|
[:slim, :output, escape, access(name), content]
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
45
|
-
[:slim, :
|
44
|
+
def on_slim_attrvalue(escape, value)
|
45
|
+
[:slim, :attrvalue, escape, access(value)]
|
46
46
|
end
|
47
47
|
|
48
48
|
def on_slim_splat(code)
|
data/lib/slim/version.rb
CHANGED
@@ -77,7 +77,7 @@ h1#title This is my title
|
|
77
77
|
}
|
78
78
|
|
79
79
|
assert_html '<section class="hello world" id="notice">Hello World from @env</section>', source, :default_tag => 'section'
|
80
|
-
|
80
|
+
end
|
81
81
|
|
82
82
|
def test_render_with_custom_shortcut
|
83
83
|
source = %q{
|
@@ -225,7 +225,7 @@ p class='underscored_class_name' = output_number
|
|
225
225
|
}
|
226
226
|
|
227
227
|
assert_html '<p class="underscored_class_name">1337</p>', source
|
228
|
-
|
228
|
+
end
|
229
229
|
|
230
230
|
def test_nonstandard_attributes
|
231
231
|
source = %q{
|
@@ -4,9 +4,6 @@ class ::MockError < NameError
|
|
4
4
|
end
|
5
5
|
|
6
6
|
class TestSlimTemplate < TestSlim
|
7
|
-
class Scope
|
8
|
-
end
|
9
|
-
|
10
7
|
def test_default_mime_type
|
11
8
|
assert_equal 'text/html', Slim::Template.default_mime_type
|
12
9
|
end
|
@@ -20,11 +17,6 @@ class TestSlimTemplate < TestSlim
|
|
20
17
|
assert_equal "<p>Hello World!</p>", template.render
|
21
18
|
end
|
22
19
|
|
23
|
-
def test_passing_locals
|
24
|
-
template = Slim::Template.new { "p = 'Hey ' + name + '!'\n" }
|
25
|
-
assert_equal "<p>Hey Joe!</p>", template.render(Object.new, :name => 'Joe')
|
26
|
-
end
|
27
|
-
|
28
20
|
def test_evaluating_in_an_object_scope
|
29
21
|
template = Slim::Template.new { "p = 'Hey ' + @name + '!'\n" }
|
30
22
|
scope = Object.new
|
@@ -58,57 +50,20 @@ class TestSlimTemplate < TestSlim
|
|
58
50
|
res = template.render(Object.new, :name => 'Joe', :foo => 'bar')
|
59
51
|
rescue => ex
|
60
52
|
assert_kind_of MockError, ex
|
61
|
-
assert_backtrace(ex, 'test.slim:
|
53
|
+
assert_backtrace(ex, 'test.slim:5')
|
62
54
|
end
|
63
55
|
end
|
64
56
|
|
65
57
|
def test_compiling_template_source_to_a_method
|
66
58
|
template = Slim::Template.new { |t| "Hello World!" }
|
67
|
-
template.render
|
59
|
+
template.render
|
68
60
|
method = template.send(:compiled_method, [])
|
69
61
|
assert_kind_of UnboundMethod, method
|
70
62
|
end
|
71
63
|
|
72
64
|
def test_passing_locals
|
73
65
|
template = Slim::Template.new { "p = 'Hey ' + name + '!'\n" }
|
74
|
-
assert_equal "<p>Hey Joe!</p>", template.render(
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_evaluating_in_an_object_scope
|
78
|
-
template = Slim::Template.new { "p = 'Hey ' + @name + '!'\n" }
|
79
|
-
scope = Scope.new
|
80
|
-
scope.instance_variable_set :@name, 'Joe'
|
81
|
-
assert_equal "<p>Hey Joe!</p>", template.render(scope)
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_passing_a_block_for_yield
|
85
|
-
template = Slim::Template.new { "p = 'Hey ' + yield + '!'\n" }
|
86
|
-
assert_equal "<p>Hey Joe!</p>", template.render(Scope.new) { 'Joe' }
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_backtrace_file_and_line_reporting_without_locals
|
90
|
-
data = File.read(__FILE__).split("\n__END__\n").last
|
91
|
-
fail unless data[0] == ?h
|
92
|
-
template = Slim::Template.new('test.slim', 10) { data }
|
93
|
-
begin
|
94
|
-
template.render(Scope.new)
|
95
|
-
fail 'should have raised an exception'
|
96
|
-
rescue => ex
|
97
|
-
assert_kind_of NameError, ex
|
98
|
-
assert_backtrace(ex, 'test.slim:12')
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_backtrace_file_and_line_reporting_with_locals
|
103
|
-
data = File.read(__FILE__).split("\n__END__\n").last
|
104
|
-
fail unless data[0] == ?h
|
105
|
-
template = Slim::Template.new('test.slim') { data }
|
106
|
-
begin
|
107
|
-
res = template.render(Scope.new, :name => 'Joe', :foo => 'bar')
|
108
|
-
rescue => ex
|
109
|
-
assert_kind_of MockError, ex
|
110
|
-
assert_backtrace(ex, 'test.slim:5')
|
111
|
-
end
|
66
|
+
assert_equal "<p>Hey Joe!</p>", template.render(Object.new, :name => 'Joe')
|
112
67
|
end
|
113
68
|
end
|
114
69
|
|
data/test/literate/TESTS.md
CHANGED
@@ -782,6 +782,29 @@ renders as
|
|
782
782
|
|
783
783
|
#### Splat attributes `*`
|
784
784
|
|
785
|
+
|
786
|
+
#### Dynamic tags `*`
|
787
|
+
|
788
|
+
You can create completely dynamic tags using the splat attributes. Just create a method which returns a hash
|
789
|
+
with the :tag key.
|
790
|
+
|
791
|
+
~~~ slim
|
792
|
+
ruby:
|
793
|
+
def a_unless_current
|
794
|
+
@page_current ? {:tag => 'span'} : {:tag => 'a', :href => 'http://slim-lang.com/'}
|
795
|
+
end
|
796
|
+
- @page_current = true
|
797
|
+
*a_unless_current Link
|
798
|
+
- @page_current = false
|
799
|
+
*a_unless_current Link
|
800
|
+
~~~
|
801
|
+
|
802
|
+
renders as
|
803
|
+
|
804
|
+
~~~ html
|
805
|
+
<span>Link</span><a href="http://slim-lang.com/">Link</a>
|
806
|
+
~~~
|
807
|
+
|
785
808
|
#### ID shortcut and class shortcut `.`
|
786
809
|
|
787
810
|
#### Attribute shortcuts
|
data/test/literate/helper.rb
CHANGED
@@ -8,7 +8,7 @@ Slim::Engine.after Slim::Parser, Temple::Filters::Validator, :grammar => Slim::
|
|
8
8
|
Slim::Engine.before :Pretty, Temple::Filters::Validator
|
9
9
|
Slim::Engine.set_default_options :tr => false, :logic_less => false
|
10
10
|
|
11
|
-
|
11
|
+
class MiniTest::Spec
|
12
12
|
def render(source, options = {}, &block)
|
13
13
|
Slim::Template.new(options) { source }.render(self, &block)
|
14
14
|
end
|
data/test/literate/run.rb
CHANGED
@@ -34,20 +34,16 @@ class LiterateTest < Temple::Engine
|
|
34
34
|
|
35
35
|
class Compiler < Temple::Filter
|
36
36
|
def call(exp)
|
37
|
-
@opts, @in_testcase
|
38
|
-
"require 'helper'\n\n
|
37
|
+
@opts, @in_testcase = {}, false
|
38
|
+
"require 'helper'\n\n#{compile(exp)}"
|
39
39
|
end
|
40
40
|
|
41
41
|
def on_section(title, body)
|
42
42
|
old_opts = @opts.dup
|
43
|
-
@level += 1
|
44
43
|
raise Temple::FilterError, 'New section between slim and html block' if @in_testcase
|
45
|
-
|
46
|
-
result << "include Helper\n " if @level == 1
|
47
|
-
result << compile(body).gsub("\n", "\n ") << "\nend\n"
|
44
|
+
"describe #{title.inspect} do\n #{compile(body).gsub("\n", "\n ")}\nend\n"
|
48
45
|
ensure
|
49
46
|
@opts = old_opts
|
50
|
-
@level -= 1
|
51
47
|
end
|
52
48
|
|
53
49
|
def on_multi(*exps)
|
@@ -6,8 +6,8 @@ class TestSlimLogicLess < TestSlim
|
|
6
6
|
def initialize
|
7
7
|
@hash = {
|
8
8
|
:person => [
|
9
|
-
{ :name => 'Joe', },
|
10
|
-
{ :name => 'Jack', }
|
9
|
+
{ :name => 'Joe', :age => 1, :selected => true },
|
10
|
+
{ :name => 'Jack', :age => 2 }
|
11
11
|
]
|
12
12
|
}
|
13
13
|
end
|
@@ -109,4 +109,27 @@ p text with \#{123} test
|
|
109
109
|
|
110
110
|
assert_html '<p>text with #{123} test</p>', source
|
111
111
|
end
|
112
|
+
|
113
|
+
def test_ruby_attributes
|
114
|
+
source = %q{
|
115
|
+
p
|
116
|
+
- person
|
117
|
+
b name=name Person
|
118
|
+
a id=name = age
|
119
|
+
span class=name
|
120
|
+
Person
|
121
|
+
}
|
122
|
+
|
123
|
+
assert_html '<p><b name="Joe">Person</b><a id="Joe">1</a><span class="Joe"><Person></Person></span><b name="Jack">Person</b><a id="Jack">2</a><span class="Jack"><Person></Person></span></p>', source, :scope => Scope.new, :dictionary => '@hash', :dictionary_access => :symbol
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_boolean_attributes
|
127
|
+
source = %q{
|
128
|
+
p
|
129
|
+
- person
|
130
|
+
input checked=selected = name
|
131
|
+
}
|
132
|
+
|
133
|
+
assert_html '<p><input checked="checked">Joe</input><input>Jack</input></p>', source, :scope => Scope.new, :dictionary => '@hash', :dictionary_access => :symbol
|
134
|
+
end
|
112
135
|
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.3.
|
4
|
+
version: 1.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-11-15 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: temple
|
18
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirement: &6992320 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,15 +23,10 @@ dependencies:
|
|
23
23
|
version: 0.5.5
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements:
|
27
|
-
none: false
|
28
|
-
requirements:
|
29
|
-
- - ~>
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
version: 0.5.5
|
26
|
+
version_requirements: *6992320
|
32
27
|
- !ruby/object:Gem::Dependency
|
33
28
|
name: tilt
|
34
|
-
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirement: &6991480 !ruby/object:Gem::Requirement
|
35
30
|
none: false
|
36
31
|
requirements:
|
37
32
|
- - ~>
|
@@ -39,15 +34,10 @@ dependencies:
|
|
39
34
|
version: 1.3.3
|
40
35
|
type: :runtime
|
41
36
|
prerelease: false
|
42
|
-
version_requirements:
|
43
|
-
none: false
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.3.3
|
37
|
+
version_requirements: *6991480
|
48
38
|
- !ruby/object:Gem::Dependency
|
49
39
|
name: rake
|
50
|
-
requirement: !ruby/object:Gem::Requirement
|
40
|
+
requirement: &7050740 !ruby/object:Gem::Requirement
|
51
41
|
none: false
|
52
42
|
requirements:
|
53
43
|
- - ! '>='
|
@@ -55,15 +45,10 @@ dependencies:
|
|
55
45
|
version: 0.8.7
|
56
46
|
type: :development
|
57
47
|
prerelease: false
|
58
|
-
version_requirements:
|
59
|
-
none: false
|
60
|
-
requirements:
|
61
|
-
- - ! '>='
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: 0.8.7
|
48
|
+
version_requirements: *7050740
|
64
49
|
- !ruby/object:Gem::Dependency
|
65
50
|
name: sass
|
66
|
-
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirement: &7050220 !ruby/object:Gem::Requirement
|
67
52
|
none: false
|
68
53
|
requirements:
|
69
54
|
- - ! '>='
|
@@ -71,15 +56,10 @@ dependencies:
|
|
71
56
|
version: 3.1.0
|
72
57
|
type: :development
|
73
58
|
prerelease: false
|
74
|
-
version_requirements:
|
75
|
-
none: false
|
76
|
-
requirements:
|
77
|
-
- - ! '>='
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: 3.1.0
|
59
|
+
version_requirements: *7050220
|
80
60
|
- !ruby/object:Gem::Dependency
|
81
61
|
name: minitest
|
82
|
-
requirement: !ruby/object:Gem::Requirement
|
62
|
+
requirement: &7049700 !ruby/object:Gem::Requirement
|
83
63
|
none: false
|
84
64
|
requirements:
|
85
65
|
- - ! '>='
|
@@ -87,15 +67,10 @@ dependencies:
|
|
87
67
|
version: '0'
|
88
68
|
type: :development
|
89
69
|
prerelease: false
|
90
|
-
version_requirements:
|
91
|
-
none: false
|
92
|
-
requirements:
|
93
|
-
- - ! '>='
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '0'
|
70
|
+
version_requirements: *7049700
|
96
71
|
- !ruby/object:Gem::Dependency
|
97
72
|
name: kramdown
|
98
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirement: &7049220 !ruby/object:Gem::Requirement
|
99
74
|
none: false
|
100
75
|
requirements:
|
101
76
|
- - ! '>='
|
@@ -103,15 +78,10 @@ dependencies:
|
|
103
78
|
version: '0'
|
104
79
|
type: :development
|
105
80
|
prerelease: false
|
106
|
-
version_requirements:
|
107
|
-
none: false
|
108
|
-
requirements:
|
109
|
-
- - ! '>='
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '0'
|
81
|
+
version_requirements: *7049220
|
112
82
|
- !ruby/object:Gem::Dependency
|
113
83
|
name: creole
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirement: &7048720 !ruby/object:Gem::Requirement
|
115
85
|
none: false
|
116
86
|
requirements:
|
117
87
|
- - ! '>='
|
@@ -119,15 +89,10 @@ dependencies:
|
|
119
89
|
version: '0'
|
120
90
|
type: :development
|
121
91
|
prerelease: false
|
122
|
-
version_requirements:
|
123
|
-
none: false
|
124
|
-
requirements:
|
125
|
-
- - ! '>='
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
version: '0'
|
92
|
+
version_requirements: *7048720
|
128
93
|
- !ruby/object:Gem::Dependency
|
129
94
|
name: builder
|
130
|
-
requirement: !ruby/object:Gem::Requirement
|
95
|
+
requirement: &7048140 !ruby/object:Gem::Requirement
|
131
96
|
none: false
|
132
97
|
requirements:
|
133
98
|
- - ! '>='
|
@@ -135,12 +100,7 @@ dependencies:
|
|
135
100
|
version: '0'
|
136
101
|
type: :development
|
137
102
|
prerelease: false
|
138
|
-
version_requirements:
|
139
|
-
none: false
|
140
|
-
requirements:
|
141
|
-
- - ! '>='
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: '0'
|
103
|
+
version_requirements: *7048140
|
144
104
|
description: Slim is a template language whose goal is reduce the syntax to the essential
|
145
105
|
parts without becoming cryptic.
|
146
106
|
email:
|
@@ -272,8 +232,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
272
232
|
version: '0'
|
273
233
|
requirements: []
|
274
234
|
rubyforge_project: slim
|
275
|
-
rubygems_version: 1.8.
|
235
|
+
rubygems_version: 1.8.15
|
276
236
|
signing_key:
|
277
237
|
specification_version: 3
|
278
238
|
summary: Slim is a template language.
|
279
239
|
test_files: []
|
240
|
+
has_rdoc:
|