slim 1.3.2 → 1.3.3

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.
@@ -0,0 +1,15 @@
1
+ require 'slim'
2
+ require 'slim/logic_less'
3
+ require 'slim/translator'
4
+ require 'slim/grammar'
5
+ require 'minitest/autorun'
6
+
7
+ Slim::Engine.after Slim::Parser, Temple::Filters::Validator, :grammar => Slim::Grammar
8
+ Slim::Engine.before :Pretty, Temple::Filters::Validator
9
+ Slim::Engine.set_default_options :tr => false, :logic_less => false
10
+
11
+ module Helper
12
+ def render(source, options = {}, &block)
13
+ Slim::Template.new(options) { source }.render(self, &block)
14
+ end
15
+ end
@@ -0,0 +1,96 @@
1
+ require 'temple'
2
+
3
+ class LiterateTest < Temple::Engine
4
+ class Parser < Temple::Parser
5
+ def call(lines)
6
+ stack = [[:multi]]
7
+ until lines.empty?
8
+ case lines.shift
9
+ when /\A(#+)\s*(.*)\Z/
10
+ stack.pop(stack.size - $1.size)
11
+ block = [:multi]
12
+ stack.last << [:section, $2, block]
13
+ stack << block
14
+ when /\A~{3,}\s*(\w+)\s*\Z/
15
+ lang = $1
16
+ code = []
17
+ until lines.empty?
18
+ case lines.shift
19
+ when /\A~{3,}\s*\Z/
20
+ break
21
+ when /\A.*\Z/
22
+ code << $&
23
+ end
24
+ end
25
+ stack.last << [lang.to_sym, code.join("\n")]
26
+ when /\A\s*\Z/
27
+ when /\A\s*(.*?)\s*Z/
28
+ stack.last << [:comment, $1]
29
+ end
30
+ end
31
+ stack.first
32
+ end
33
+ end
34
+
35
+ class Compiler < Temple::Filter
36
+ def call(exp)
37
+ @opts, @in_testcase, @level = {}, false, 0
38
+ "require 'helper'\n\n" << compile(exp)
39
+ end
40
+
41
+ def on_section(title, body)
42
+ old_opts = @opts.dup
43
+ @level += 1
44
+ raise Temple::FilterError, 'New section between slim and html block' if @in_testcase
45
+ result = "describe #{title.inspect} do\n "
46
+ result << "include Helper\n " if @level == 1
47
+ result << compile(body).gsub("\n", "\n ") << "\nend\n"
48
+ ensure
49
+ @opts = old_opts
50
+ @level -= 1
51
+ end
52
+
53
+ def on_multi(*exps)
54
+ exps.map {|exp| compile(exp) }.join("\n")
55
+ end
56
+
57
+ def on_comment(text)
58
+ "#{@in_testcase ? ' ' : ''}# #{text}"
59
+ end
60
+
61
+ def on_slim(code)
62
+ raise Temple::FilterError, 'Slim block must be followed by html block' if @in_testcase
63
+ @in_testcase = true
64
+ "it 'should render' do\n slim = #{code.inspect}"
65
+ end
66
+
67
+ def on_html(code)
68
+ raise Temple::FilterError, 'Html block must be preceded by slim block' unless @in_testcase
69
+ @in_testcase = false
70
+ result = " html = #{code.inspect}\n"
71
+ if @opts.empty?
72
+ result << " render(slim).must_equal html\nend\n"
73
+ else
74
+ result << " options = #{@opts.inspect}\n render(slim, options).must_equal html\nend\n"
75
+ end
76
+ end
77
+
78
+ def on_options(code)
79
+ raise Temple::FilterError, 'Options set inside test case' if @in_testcase
80
+ @opts.update(eval("{#{code}}"))
81
+ "# #{code.gsub("\n", "\n# ")}"
82
+ end
83
+
84
+ def on(*exp)
85
+ raise Temple::InvalidExpression, exp
86
+ end
87
+ end
88
+
89
+ use Parser
90
+ use Compiler
91
+ use(:Evaluator) {|code| eval(code) }
92
+ end
93
+
94
+ Dir.glob(File.join(File.dirname(__FILE__), '*.md')) do |file|
95
+ LiterateTest.new.call(File.readlines(file))
96
+ 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.2
4
+ version: 1.3.3
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-09-26 00:00:00.000000000 Z
14
+ date: 2012-10-16 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: temple
18
- requirement: &18956260 !ruby/object:Gem::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.5.0
23
+ version: 0.5.5
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *18956260
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: 0.5.5
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: tilt
29
- requirement: &18955320 !ruby/object:Gem::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: *18955320
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: &18970580 !ruby/object:Gem::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: *18970580
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: &18970100 !ruby/object:Gem::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: *18970100
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: &18969540 !ruby/object:Gem::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: *18969540
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: &18968820 !ruby/object:Gem::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: *18968820
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: &18967940 !ruby/object:Gem::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: *18967940
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: &18966900 !ruby/object:Gem::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: *18966900
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:
@@ -110,10 +150,7 @@ email:
110
150
  executables:
111
151
  - slimrb
112
152
  extensions: []
113
- extra_rdoc_files:
114
- - README.md
115
- - LICENSE
116
- - CHANGES
153
+ extra_rdoc_files: []
117
154
  files:
118
155
  - .gemtest
119
156
  - .gitignore
@@ -134,7 +171,7 @@ files:
134
171
  - benchmarks/view.slim
135
172
  - bin/slimrb
136
173
  - lib/slim.rb
137
- - lib/slim/boolean_attributes.rb
174
+ - lib/slim/code_attributes.rb
138
175
  - lib/slim/command.rb
139
176
  - lib/slim/control_structures.rb
140
177
  - lib/slim/embedded_engine.rb
@@ -169,6 +206,9 @@ files:
169
206
  - test/core/test_slim_template.rb
170
207
  - test/core/test_text_interpolation.rb
171
208
  - test/core/test_thread_options.rb
209
+ - test/literate/TESTS.md
210
+ - test/literate/helper.rb
211
+ - test/literate/run.rb
172
212
  - test/logic_less/test_logic_less.rb
173
213
  - test/logic_less/test_wrapper.rb
174
214
  - test/rails/Rakefile
@@ -215,8 +255,7 @@ files:
215
255
  homepage: http://slim-lang.com/
216
256
  licenses: []
217
257
  post_install_message:
218
- rdoc_options:
219
- - --charset=UTF-8
258
+ rdoc_options: []
220
259
  require_paths:
221
260
  - lib
222
261
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -233,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
272
  version: '0'
234
273
  requirements: []
235
274
  rubyforge_project: slim
236
- rubygems_version: 1.8.15
275
+ rubygems_version: 1.8.24
237
276
  signing_key:
238
277
  specification_version: 3
239
278
  summary: Slim is a template language.
@@ -1,67 +0,0 @@
1
- module Slim
2
- # @api private
3
- class BooleanAttributes < Filter
4
- define_options :attr_delimiter
5
-
6
- # Handle attributes expression `[:html, :attrs, *attrs]`
7
- #
8
- # @param [Array] attrs Array of temple expressions
9
- # @return [Array] Compiled temple expression
10
- def on_html_attrs(*attrs)
11
- [:multi, *attrs.map {|a| compile(a) }]
12
- end
13
-
14
- # Handle attribute expression `[:slim, :attr, escape, code]`
15
- #
16
- # @param [Boolean] escape Escape html
17
- # @param [String] code Ruby code
18
- # @return [Array] Compiled temple expression
19
- def on_html_attr(name, value)
20
- unless value[0] == :slim && value[1] == :attrvalue
21
- @attr = name
22
- return super
23
- end
24
-
25
- escape, code = value[2], value[3]
26
- case code
27
- when 'true'
28
- [:html, :attr, name, [:static, name]]
29
- when 'false', 'nil'
30
- [:multi]
31
- else
32
- tmp = unique_name
33
- conds = [:case, tmp,
34
- ['true', [:html, :attr, name, [:static, name]]],
35
- ['false, nil', [:multi]]]
36
- if delimiter = options[:attr_delimiter][name]
37
- conds << ['Array',
38
- [:multi,
39
- [:code, "#{tmp} = #{tmp}.flatten.compact.join(#{delimiter.inspect})"],
40
- [:if, "!#{tmp}.empty?",
41
- [:html, :attr, name, [:escape, escape, [:dynamic, tmp]]]]]]
42
- end
43
- conds << [:else, [:html, :attr, name, [:escape, escape, [:dynamic, tmp]]]]
44
- [:multi, [:code, "#{tmp} = (#{code})"], conds]
45
- end
46
- end
47
-
48
- # Handle attribute expression `[:slim, :attrvalue, escape, code]`
49
- #
50
- # @param [Boolean] escape Escape html
51
- # @param [String] code Ruby code
52
- # @return [Array] Compiled temple expression
53
- def on_slim_attrvalue(escape, code)
54
- tmp = unique_name
55
- [:multi,
56
- [:code, "#{tmp} = #{code}"],
57
- [:escape, escape,
58
- [:dynamic,
59
- if delimiter = options[:attr_delimiter][@attr]
60
- "Array === #{tmp} ? #{tmp}.flatten.compact.join(#{delimiter.inspect}) : #{tmp}"
61
- else
62
- tmp
63
- end
64
- ]]]
65
- end
66
- end
67
- end