hamlit 1.5.3 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b37fdbe2260e2bb676c56133ab5c61fb5064900
4
- data.tar.gz: ae2188f3122c3a02bff15888f0d9891368bd388b
3
+ metadata.gz: 48cbd681aed1b48f72d46f0256620e5d6d358445
4
+ data.tar.gz: 804f4570f39a8d92091157197dd26791c908dfd6
5
5
  SHA512:
6
- metadata.gz: 5ae27755753ed242c704eac31eb066f702f2383b12851fda96accbcc2a20b3887a0c12f87a73fe45154f152e744f8248137dd8930ab2b78db660347544dea17e
7
- data.tar.gz: 00af5e2645cf488be39c75708d70e2f14fb23c6f6778b38d74ce82a4d4931e2e010506b53868a260f80ab91a57ec36a36a3a3d28f3439f3b07b6c508d74eae09
6
+ metadata.gz: 79e74c4d9128dda022f1275ef9adbd1f0f90733b0f0223e836a8985dac426a29620563602d3ccda345296b1ee251da0c92cd0c93c96d6af091eb6b64a844a0b8
7
+ data.tar.gz: 8567ec9a0f5984c122cfa99d14c8afbf7b55cf29be98f5439d50fd92f169d4200ee2cb3c398802f7c7a21c919c06dce822d3586e1dd7d8135979bcef539796bf
@@ -1,3 +1,8 @@
1
+ ## v1.5.4
2
+
3
+ - Recursively remove whitespace inside a tag
4
+ - Fix ! operator immediately before whitespace
5
+
1
6
  ## v1.5.3
2
7
 
3
8
  - Support !, !=, !==, &= and ~ as inline operators
@@ -1,30 +1,18 @@
1
+ require 'hamlit/concerns/whitespace'
2
+
1
3
  # This module is created to compile [:haml, :strip],
2
4
  # which is sexp for whitespace inner removal.module Hamlit
3
5
  module Hamlit
4
6
  module Compilers
5
7
  module Strip
6
- def on_haml_strip(*exps)
7
- stripped = strip_newline(exps)
8
- on_multi(*stripped)
9
- end
10
-
11
- private
8
+ include Concerns::Whitespace
12
9
 
13
- def strip_newline(content)
14
- indexes = newline_indexes(content)
15
-
16
- content = content.dup
17
- content.delete_at(indexes.last)
18
- content.delete_at(indexes.first)
19
- content
20
- end
10
+ def on_haml_strip(*exps)
11
+ exps = exps.dup
12
+ remove_first_space!(exps)
13
+ remove_last_space!(exps)
21
14
 
22
- def newline_indexes(exps)
23
- indexes = []
24
- exps.each_with_index do |exp, index|
25
- indexes << index if exp == [:static, "\n"]
26
- end
27
- indexes
15
+ on_multi(*exps)
28
16
  end
29
17
  end
30
18
  end
@@ -1,9 +1,11 @@
1
1
  require 'set'
2
2
 
3
- # Hamlit::Parsers::Whitespace cares about "whitespace removal",
3
+ # Hamlit::Concerns::Whitespace cares about "whitespace removal",
4
4
  # which is achieved by '<' or '>' after html tag.
5
+ # NOTE: Whitespace means [:static, "\n"] because it is rendered
6
+ # as whitespace on browsers.
5
7
  module Hamlit
6
- module Parsers
8
+ module Concerns
7
9
  module Whitespace
8
10
  def parse_whitespace_removal(scanner)
9
11
  if scanner.match?(/</)
@@ -16,20 +18,11 @@ module Hamlit
16
18
  inner_removal
17
19
  end
18
20
 
19
- def remove_last_outer_space!(exps)
20
- exps.reverse!
21
- remove_first_outer_space!(exps)
22
- ensure
23
- exps.reverse!
24
- end
25
-
26
- private
27
-
28
- def remove_first_outer_space!(exps)
21
+ # `<` removes spaces inside script or silent script recursively.
22
+ def remove_first_space!(exps)
29
23
  deleted = false
30
- exps.delete_if do |exp|
31
- break if deleted
32
24
 
25
+ exps.delete_if do |exp|
33
26
  name, *args = exp
34
27
  case name
35
28
  when :static
@@ -41,13 +34,30 @@ module Hamlit
41
34
  when :newline
42
35
  next false
43
36
  when :haml
44
- remove_last_outer_space!(exp) if args.first == :script
37
+ # recursive call for script
38
+ remove_last_space!(exp) if args.first == :script
39
+ when :multi
40
+ break if exp == :multi
41
+ # to flatten multi
42
+ remove_last_space!(exp)
45
43
  end
46
44
  break
47
45
  end
48
- remove_last_outer_space!(exps) if deleted
46
+
47
+ # recursive call for silent script
48
+ remove_last_space!(exps) if deleted
49
+ end
50
+
51
+ def remove_last_space!(exps)
52
+ exps.reverse!
53
+ remove_first_space!(exps)
54
+ ensure
55
+ exps.reverse!
56
+ exps
49
57
  end
50
58
 
59
+ private
60
+
51
61
  def reset_outer_removal
52
62
  @outer_removal = Set.new
53
63
  @tag_indent = 0
@@ -8,7 +8,6 @@ require 'hamlit/parsers/multiline'
8
8
  require 'hamlit/parsers/script'
9
9
  require 'hamlit/parsers/tag'
10
10
  require 'hamlit/parsers/text'
11
- require 'hamlit/parsers/whitespace'
12
11
 
13
12
  module Hamlit
14
13
  class Parser < Temple::Parser
@@ -20,7 +19,6 @@ module Hamlit
20
19
  include Parsers::Script
21
20
  include Parsers::Tag
22
21
  include Parsers::Text
23
- include Parsers::Whitespace
24
22
 
25
23
  SKIP_NEWLINE_EXPS = %i[newline code multi].freeze
26
24
  SKIP_NEWLINE_FILTERS = %w[ruby markdown erb].freeze
@@ -56,7 +54,7 @@ module Hamlit
56
54
 
57
55
  @current_lineno += 1
58
56
  node = parse_line(current_line)
59
- remove_last_outer_space!(ast) if outer_remove?
57
+ remove_last_space!(ast) if outer_remove?
60
58
 
61
59
  ast << [:newline] if @current_indent > 0
62
60
  ast << node
@@ -104,7 +102,7 @@ module Hamlit
104
102
  return parse_text(scanner, lstrip: true, escape: false) if scanner.scan(/!( |==)/)
105
103
  return parse_script(scanner, force_escape: true) if scanner.match?(/&=/)
106
104
  return parse_script(scanner, disable_escape: true) if scanner.match?(/!=/)
107
- return parse_text(scanner, lstrip: true, escape: false) if inline && scanner.scan(/!/)
105
+ return parse_text(scanner, lstrip: true, escape: false) if scanner.scan(/!/)
108
106
 
109
107
  case scanner.peek(1)
110
108
  when '=', '~'
@@ -1,5 +1,6 @@
1
1
  require 'hamlit/concerns/error'
2
2
  require 'hamlit/concerns/indentable'
3
+ require 'hamlit/concerns/whitespace'
3
4
  require 'hamlit/helpers'
4
5
 
5
6
  module Hamlit
@@ -7,6 +8,7 @@ module Hamlit
7
8
  module Tag
8
9
  include Concerns::Error
9
10
  include Concerns::Indentable
11
+ include Concerns::Whitespace
10
12
 
11
13
  TAG_ID_CLASS_REGEXP = /[a-zA-Z0-9_-]+/
12
14
  TAG_REGEXP = /[a-zA-Z0-9\-_:]+/
@@ -1,3 +1,3 @@
1
1
  module Hamlit
2
- VERSION = "1.5.3"
2
+ VERSION = "1.5.4"
3
3
  end
data/release ADDED
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ source ./test
6
+ bundle exec rake release
@@ -9,7 +9,7 @@ describe Hamlit::Engine do
9
9
  end
10
10
 
11
11
  it 'renders xml doctype' do
12
- assert_render(<<-HAML, <<-HTML)
12
+ assert_render(<<-HAML, <<-HTML, format: :xhtml)
13
13
  !!! XML
14
14
  HAML
15
15
  <?xml version='1.0' encoding='utf-8' ?>
@@ -1,7 +1,7 @@
1
1
  describe Hamlit::Engine do
2
2
  describe 'tab indent' do
3
3
  it 'accepts tab indentation' do
4
- assert_render(<<-HAML, <<-HTML)
4
+ assert_render(<<-HAML, <<-HTML, compatible_only: :haml)
5
5
  %p
6
6
  \t%a
7
7
  HAML
@@ -1,7 +1,7 @@
1
1
  describe Hamlit::Engine do
2
2
  describe 'multiline' do
3
3
  it 'joins multi-lines ending with pipe' do
4
- assert_render(<<-HAML, <<-HTML)
4
+ assert_render(<<-HAML, <<-HTML, compatible_only: [])
5
5
  a |
6
6
  b |
7
7
  HAML
@@ -18,7 +18,7 @@ describe Hamlit::Engine do
18
18
 
19
19
  describe 'html escape' do
20
20
  it 'escapes attribute values on static attributes' do
21
- assert_render(<<-'HAML', <<-HTML)
21
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :faml)
22
22
  %a(title="'")
23
23
  %a(title = "'\"")
24
24
  %a(href='/search?foo=bar&hoge=<fuga>')
@@ -30,7 +30,7 @@ describe Hamlit::Engine do
30
30
  end
31
31
 
32
32
  it 'escapes attribute values on dynamic attributes' do
33
- assert_render(<<-'HAML', <<-HTML)
33
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :faml)
34
34
  - title = "'\""
35
35
  - href = '/search?foo=bar&hoge=<fuga>'
36
36
  %a(title=title)
@@ -41,7 +41,7 @@ describe Hamlit::Engine do
41
41
  end
42
42
 
43
43
  it 'accepts even illegal input for haml' do
44
- assert_render(<<-'HAML', <<-HTML)
44
+ assert_render(<<-'HAML', <<-HTML, error_with: [:haml, :faml])
45
45
  %span{ class: '}}}', id: '{}}' } }{
46
46
  HAML
47
47
  <span class='}}}' id='{}}'>}{</span>
@@ -122,7 +122,7 @@ describe Hamlit::Engine do
122
122
  end
123
123
 
124
124
  it 'joins attribute class and element class' do
125
- assert_render(<<-HAML, <<-HTML)
125
+ assert_render(<<-HAML, <<-HTML, compatible_only: :haml)
126
126
  .foo{ class: ['bar'] }
127
127
  .foo{ class: ['bar', nil] }
128
128
  .foo{ class: ['bar', 'baz'] }
@@ -198,8 +198,9 @@ describe Hamlit::Engine do
198
198
  HTML
199
199
  end
200
200
 
201
- it 'does not delete some attributes, for optimization' do
202
- assert_render(<<-'HAML', <<-HTML)
201
+ # NOTE: This incompatibility will not be fixed for performance.
202
+ it 'does not delete non-boolean attributes, for optimization' do
203
+ assert_render(<<-'HAML', <<-HTML, compatible_only: []) # wontfix
203
204
  - val = false
204
205
  %a{ href: val }
205
206
  - val = nil
@@ -213,7 +214,7 @@ describe Hamlit::Engine do
213
214
 
214
215
  describe 'html escape' do
215
216
  it 'escapes attribute values on static attributes' do
216
- assert_render(<<-'HAML', <<-HTML)
217
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :faml)
217
218
  %a{title: "'"}
218
219
  %a{title: "'\""}
219
220
  %a{href: '/search?foo=bar&hoge=<fuga>'}
@@ -225,7 +226,7 @@ describe Hamlit::Engine do
225
226
  end
226
227
 
227
228
  it 'escapes attribute values on dynamic attributes' do
228
- assert_render(<<-'HAML', <<-HTML)
229
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :faml)
229
230
  - title = "'\""
230
231
  - href = '/search?foo=bar&hoge=<fuga>'
231
232
  %a{title: title}
@@ -237,7 +238,7 @@ describe Hamlit::Engine do
237
238
  end
238
239
 
239
240
  it 'escapes attribute values on hash attributes' do
240
- assert_render(<<-'HAML', <<-HTML)
241
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :faml)
241
242
  - title = { title: "'\"" }
242
243
  - href = { href: '/search?foo=bar&hoge=<fuga>' }
243
244
  %a{ title }
@@ -260,7 +261,7 @@ describe Hamlit::Engine do
260
261
  end
261
262
 
262
263
  it 'renders true attributes' do
263
- assert_render(<<-'HAML', <<-HTML)
264
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml)
264
265
  %span{ data: { disable: true } } bar
265
266
  HAML
266
267
  <span data-disable>bar</span>
@@ -39,7 +39,7 @@ describe Hamlit::Engine do
39
39
  end
40
40
 
41
41
  it 'renders block script' do
42
- assert_render(<<-HAML, <<-HTML)
42
+ assert_render(<<-HAML, <<-HTML, compatible_only: [])
43
43
  = 3.times do |i|
44
44
  = i
45
45
  4
@@ -53,7 +53,7 @@ describe Hamlit::Engine do
53
53
  end
54
54
 
55
55
  it 'renders tag internal block script' do
56
- assert_render(<<-HAML, <<-HTML)
56
+ assert_render(<<-HAML, <<-HTML, compatible_only: [])
57
57
  %span
58
58
  = 1.times do |i|
59
59
  = i
@@ -85,7 +85,7 @@ describe Hamlit::Engine do
85
85
  end
86
86
 
87
87
  it 'renders !=' do
88
- assert_render(<<-HAML, <<-HTML, escape_html: true)
88
+ assert_render(<<-HAML, <<-HTML, escape_html: true, compatible_only: [])
89
89
  != '<"&>'
90
90
  != '<"&>'.tap do |str|
91
91
  -# no operation
@@ -96,7 +96,7 @@ describe Hamlit::Engine do
96
96
  end
97
97
 
98
98
  it 'renders &=' do
99
- assert_render(<<-HAML, <<-HTML, escape_html: false)
99
+ assert_render(<<-HAML, <<-HTML, escape_html: false, compatible_only: [])
100
100
  &= '<"&>'
101
101
  &= '<"&>'.tap do |str|
102
102
  -# no operation
@@ -77,7 +77,7 @@ describe Hamlit::Engine do
77
77
  end
78
78
 
79
79
  it 'renders empty elsif statement' do
80
- assert_render(<<-'HAML', <<-HTML)
80
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
81
81
  %span
82
82
  - if false
83
83
  - elsif false
@@ -88,7 +88,7 @@ describe Hamlit::Engine do
88
88
  end
89
89
 
90
90
  it 'renders empty else statement' do
91
- assert_render(<<-'HAML', <<-HTML)
91
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
92
92
  %span
93
93
  - if false
94
94
  ng
@@ -100,7 +100,7 @@ describe Hamlit::Engine do
100
100
  end
101
101
 
102
102
  it 'renders empty when statement' do
103
- assert_render(<<-'HAML', <<-HTML)
103
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
104
104
  %span
105
105
  - case
106
106
  - when false
@@ -188,7 +188,7 @@ describe Hamlit::Engine do
188
188
  end
189
189
 
190
190
  it 'joins a next line if a current line ends with ","' do
191
- assert_render("- foo = [', \n ']\n= foo", <<-HTML)
191
+ assert_render("- foo = [', \n ']\n= foo", <<-HTML, compatible_only: :haml)
192
192
  [&quot;, &quot;]
193
193
  HTML
194
194
  end
@@ -226,7 +226,7 @@ describe Hamlit::Engine do
226
226
  end
227
227
 
228
228
  it 'accepts ! operator' do
229
- assert_render(<<-'HAML', <<-'HTML')
229
+ assert_render(<<-'HAML', <<-'HTML', compatible_only: :faml)
230
230
  %span!#{'<nyaa>'}
231
231
  %span! #{'<nyaa>'}
232
232
  !#{'<nyaa>'}
@@ -234,7 +234,7 @@ describe Hamlit::Engine do
234
234
  HAML
235
235
  <span><nyaa></span>
236
236
  <span><nyaa></span>
237
- !&lt;nyaa&gt;
237
+ <nyaa>
238
238
  <nyaa>
239
239
  HTML
240
240
  end
@@ -297,6 +297,29 @@ describe Hamlit::Engine do
297
297
  <span>foofoo2<span>bar</span></span>
298
298
  HTML
299
299
  end
300
+
301
+ it 'removes whitespace inside script inside silent script' do
302
+ assert_render(<<-HAML, <<-HTML, compatible_only: [:haml, :faml])
303
+ .bar<
304
+ - 3.times do
305
+ = 'foo'
306
+ HAML
307
+ <div class='bar'>foofoofoo</div>
308
+ HTML
309
+ end
310
+
311
+ it 'removes whitespace inside script recursively' do
312
+ assert_render(<<-HAML, <<-HTML, compatible_only: [:haml, :faml])
313
+ .foo<
314
+ - 1.times do
315
+ = 2.times do
316
+ - 2.times do
317
+ = 1.times do
318
+ = 'bar'
319
+ HAML
320
+ <div class='foo'>bar1bar1bar1bar12</div>
321
+ HTML
322
+ end
300
323
  end
301
324
  end
302
325
  end
@@ -13,7 +13,7 @@ describe Hamlit::Engine do
13
13
  end
14
14
 
15
15
  it 'renders . or # which is not continued by tag name' do
16
- assert_render(<<-HAML, <<-HTML)
16
+ assert_render(<<-HAML, <<-HTML, compatible_only: [], error_with: :haml)
17
17
  .
18
18
  .*
19
19
  #
@@ -72,7 +72,7 @@ describe Hamlit::Engine do
72
72
  end
73
73
 
74
74
  it 'renders ! operator' do
75
- assert_render(<<-'HAML', <<-HTML)
75
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :faml)
76
76
  aaa#{'<a>'}
77
77
  !aaa#{'<a>'}
78
78
  ! aaa#{'<a>'}
@@ -80,10 +80,10 @@ describe Hamlit::Engine do
80
80
  !!aa
81
81
  HAML
82
82
  aaa&lt;a&gt;
83
- !aaa&lt;a&gt;
84
83
  aaa<a>
85
84
  aaa<a>
86
- !!aa
85
+ aaa<a>
86
+ !aa
87
87
  HTML
88
88
  end
89
89
 
@@ -91,7 +91,7 @@ describe Hamlit::Engine do
91
91
  specify { assert_render('#{}', "\n") }
92
92
  specify { assert_render('1#{}', "1\n") }
93
93
  specify { assert_render('1#{2}', "12\n") }
94
- specify { assert_render('1#{2', "1\#{2\n") }
94
+ specify { assert_render('1#{2', "1\#{2\n", error_with: [:haml, :faml]) }
95
95
  specify { assert_render('}#{1}', "}1\n") }
96
96
  specify { assert_render('#{1}2', "12\n") }
97
97
  specify { assert_render('1#{ "2#{3}4" }5', "12345\n") }
@@ -100,7 +100,7 @@ describe Hamlit::Engine do
100
100
  specify { assert_render('あ#{1}', "あ1\n") }
101
101
  specify { assert_render('あ#{"い"}う', "あいう\n") }
102
102
  specify { assert_render('a#{"<b>"}c', "a&lt;b&gt;c\n") }
103
- specify { assert_render(":plain\n あ\n \#{'い'}", "あ\nい\n\n") }
103
+ specify { assert_render(":plain\n あ\n \#{'い'}", "あ\nい\n\n", compatible_only: :haml) }
104
104
  end
105
105
  end
106
106
  end
@@ -1,7 +1,7 @@
1
1
  describe Hamlit::Filters::Coffee do
2
2
  describe '#compile' do
3
3
  it 'renders coffee filter' do
4
- assert_render(<<-HAML, <<-HTML)
4
+ assert_render(<<-HAML, <<-HTML, compatible_only: :haml)
5
5
  :coffee
6
6
  foo = ->
7
7
  alert('hello')
@@ -20,7 +20,7 @@ describe Hamlit::Filters::Coffee do
20
20
  end
21
21
 
22
22
  it 'renders coffeescript filter' do
23
- assert_render(<<-HAML, <<-HTML)
23
+ assert_render(<<-HAML, <<-HTML, compatible_only: :haml)
24
24
  :coffee
25
25
  foo = ->
26
26
  alert('hello')
@@ -39,7 +39,7 @@ describe Hamlit::Filters::Coffee do
39
39
  end
40
40
 
41
41
  it 'renders coffeescript filter' do
42
- assert_render(<<-'HAML', <<-HTML)
42
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml)
43
43
  :coffee
44
44
  foo = ->
45
45
  alert("#{'<&>'}")
@@ -1,7 +1,7 @@
1
1
  describe Hamlit::Filters::Erb do
2
2
  describe '#compile' do
3
3
  it 'renders erb filter' do
4
- assert_render(<<-HAML, <<-HTML)
4
+ assert_render(<<-HAML, <<-HTML, compatible_only: [], error_with: :faml)
5
5
  :erb
6
6
  <% if true %>
7
7
  ok
@@ -1,7 +1,7 @@
1
1
  describe Hamlit::Filters::Javascript do
2
2
  describe '#compile' do
3
3
  it 'just renders script tag for empty filter' do
4
- assert_render(<<-HAML, <<-HTML)
4
+ assert_render(<<-HAML, <<-HTML, compatible_only: [])
5
5
  before
6
6
  :javascript
7
7
  after
@@ -30,7 +30,7 @@ describe Hamlit::Filters::Javascript do
30
30
  end
31
31
 
32
32
  it 'accepts illegal indentation' do
33
- assert_render(<<-HAML, <<-HTML)
33
+ assert_render(<<-HAML, <<-HTML, compatible_only: :faml)
34
34
  :javascript
35
35
  if {
36
36
  alert('hello');
@@ -1,7 +1,7 @@
1
1
  describe Hamlit::Filters::Less do
2
2
  describe '#compile' do
3
3
  it 'renders less filter' do
4
- assert_render(<<-HAML, <<-HTML)
4
+ assert_render(<<-HAML, <<-HTML, compatible_only: :haml, error_with: :faml)
5
5
  :less
6
6
  .users_controller {
7
7
  .show_action {
@@ -20,7 +20,7 @@ describe Hamlit::Filters::Less do
20
20
  end
21
21
 
22
22
  it 'parses string interpolation' do
23
- assert_render(<<-'HAML', <<-HTML)
23
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml, error_with: :faml)
24
24
  :less
25
25
  .foo {
26
26
  content: "#{'<&>'}";
@@ -13,7 +13,7 @@ describe Hamlit::Filters::Markdown do
13
13
  end
14
14
 
15
15
  it 'renders markdown filter with string interpolation' do
16
- assert_render(<<-'HAML', <<-HTML)
16
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :faml)
17
17
  - project = '<Hamlit>'
18
18
  :markdown
19
19
  # #{project}
@@ -1,7 +1,7 @@
1
1
  describe Hamlit::Filters::Sass do
2
2
  describe '#compile' do
3
3
  it 'renders sass filter' do
4
- assert_render(<<-HAML, <<-HTML)
4
+ assert_render(<<-HAML, <<-HTML, compatible_only: :haml)
5
5
  :sass
6
6
  .users_controller
7
7
  .show_action
@@ -17,7 +17,7 @@ describe Hamlit::Filters::Sass do
17
17
  end
18
18
 
19
19
  it 'renders sass filter with string interpolation' do
20
- assert_render(<<-'HAML', <<-HTML)
20
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml)
21
21
  :sass
22
22
  .users_controller
23
23
  .show_action
@@ -1,7 +1,7 @@
1
1
  describe Hamlit::Filters::Scss do
2
2
  describe '#compile' do
3
3
  it 'renders scss filter' do
4
- assert_render(<<-HAML, <<-HTML)
4
+ assert_render(<<-HAML, <<-HTML, compatible_only: :haml)
5
5
  :scss
6
6
  .users_controller {
7
7
  .show_action {
@@ -19,7 +19,7 @@ describe Hamlit::Filters::Scss do
19
19
  end
20
20
 
21
21
  it 'parses string interpolation' do
22
- assert_render(<<-'HAML', <<-HTML)
22
+ assert_render(<<-'HAML', <<-HTML, compatible_only: :haml)
23
23
  :scss
24
24
  .users_controller {
25
25
  .show_action {
@@ -1,7 +1,11 @@
1
+ require 'haml'
2
+ require 'faml'
1
3
  require 'hamlit'
2
4
  require 'unindent'
3
5
 
4
6
  module HamlitSpecHelper
7
+ DEFAULT_OPTIONS = { ugly: true, escape_html: true }.freeze
8
+
5
9
  def parse_string(str)
6
10
  Hamlit::Parser.new.call(str)
7
11
  end
@@ -11,10 +15,21 @@ module HamlitSpecHelper
11
15
  end
12
16
 
13
17
  def assert_render(haml, html, options = {})
14
- haml = haml.unindent
15
- html = html.unindent
18
+ errs = array_wrap(options.delete(:error_with) || [])
19
+ impls = array_wrap(options.delete(:compatible_only) || [:haml, :faml] - errs)
20
+ haml = haml.unindent
21
+ html = html.unindent
16
22
 
17
23
  expect(render_string(haml, options)).to eq(html)
24
+ impls.each do |impl|
25
+ expect_compatibility(impl, haml, options)
26
+ end
27
+ errs.each do |impl|
28
+ expect_compatibility(impl, haml, options, type: :error)
29
+ end
30
+ ([:haml, :faml] - impls - errs).each do |impl|
31
+ expect_compatibility(impl, haml, options, type: :failure)
32
+ end
18
33
  end
19
34
 
20
35
  def assert_parse(haml, &block)
@@ -28,6 +43,58 @@ module HamlitSpecHelper
28
43
  result = described_class.new.call(before)
29
44
  expect(result).to eq(after)
30
45
  end
46
+
47
+ private
48
+
49
+ def expect_compatibility(impl, haml, options, type: :success)
50
+ case impl
51
+ when :haml
52
+ expect_haml(haml, options, type: type)
53
+ when :faml
54
+ expect_faml(haml, options, type: type)
55
+ end
56
+ end
57
+
58
+ def expect_faml(haml, options, type: :success)
59
+ hamlit_html = render_string(haml, options)
60
+ options = options.dup
61
+ options.delete(:escape_html)
62
+
63
+ case type
64
+ when :success
65
+ faml_html = eval Faml::Engine.new(options).call(haml)
66
+ expect(hamlit_html).to eq(faml_html)
67
+ when :failure
68
+ faml_html = eval Faml::Engine.new(options).call(haml)
69
+ expect(hamlit_html).to_not eq(faml_html)
70
+ when :error
71
+ expect {
72
+ eval Faml::Engine.new(options).call(haml)
73
+ }.to raise_error
74
+ end
75
+ end
76
+
77
+ def expect_haml(haml, options, type: :success)
78
+ hamlit_html = render_string(haml, options)
79
+ options = DEFAULT_OPTIONS.merge(options)
80
+ case type
81
+ when :success
82
+ haml_html = Haml::Engine.new(haml, options).render(Object.new, {})
83
+ expect(hamlit_html).to eq(haml_html)
84
+ when :failure
85
+ haml_html = Haml::Engine.new(haml, options).render(Object.new, {})
86
+ expect(hamlit_html).to_not eq(haml_html)
87
+ when :error
88
+ expect {
89
+ Haml::Engine.new(haml, options).render(Object.new, {})
90
+ }.to raise_error
91
+ end
92
+ end
93
+
94
+ def array_wrap(arr)
95
+ return arr if arr.is_a?(Array)
96
+ [arr]
97
+ end
31
98
  end
32
99
 
33
100
  RSpec.configure do |config|
data/test ADDED
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+ trap 'rm .ruby-version' 0
5
+
6
+ VERSIONS=(
7
+ 2.0.0
8
+ 2.1.6
9
+ 2.2.2
10
+ )
11
+
12
+ function test_with() {
13
+ version=$1
14
+ rbenv local $version
15
+ ruby -v
16
+ rake spec
17
+ }
18
+
19
+ for version in ${VERSIONS[@]}; do
20
+ test_with $version
21
+ done
22
+
23
+ rbenv local ${VERSIONS[2]}
24
+ ruby -v
25
+ rake rails:spec
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamlit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.3
4
+ version: 1.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-06 00:00:00.000000000 Z
11
+ date: 2015-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: escape_utils
@@ -339,6 +339,7 @@ files:
339
339
  - lib/hamlit/concerns/registerable.rb
340
340
  - lib/hamlit/concerns/ripperable.rb
341
341
  - lib/hamlit/concerns/string_interpolation.rb
342
+ - lib/hamlit/concerns/whitespace.rb
342
343
  - lib/hamlit/engine.rb
343
344
  - lib/hamlit/filters/base.rb
344
345
  - lib/hamlit/filters/coffee.rb
@@ -365,11 +366,11 @@ files:
365
366
  - lib/hamlit/parsers/script.rb
366
367
  - lib/hamlit/parsers/tag.rb
367
368
  - lib/hamlit/parsers/text.rb
368
- - lib/hamlit/parsers/whitespace.rb
369
369
  - lib/hamlit/railtie.rb
370
370
  - lib/hamlit/template.rb
371
371
  - lib/hamlit/temple.rb
372
372
  - lib/hamlit/version.rb
373
+ - release
373
374
  - spec/Rakefile
374
375
  - spec/hamlit/engine/comment_spec.rb
375
376
  - spec/hamlit/engine/doctype_spec.rb
@@ -458,6 +459,7 @@ files:
458
459
  - spec/rails/vendor/assets/javascripts/.keep
459
460
  - spec/rails/vendor/assets/stylesheets/.keep
460
461
  - spec/spec_helper.rb
462
+ - test
461
463
  homepage: https://github.com/k0kubun/hamlit
462
464
  licenses:
463
465
  - MIT
@@ -571,3 +573,4 @@ test_files:
571
573
  - spec/rails/vendor/assets/javascripts/.keep
572
574
  - spec/rails/vendor/assets/stylesheets/.keep
573
575
  - spec/spec_helper.rb
576
+ has_rdoc: