haml-edge 2.3.2 → 2.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.
- data/EDGE_GEM_VERSION +1 -1
 - data/VERSION +1 -1
 - data/lib/haml/precompiler.rb +15 -12
 - data/test/haml/engine_test.rb +62 -0
 - metadata +2 -2
 
    
        data/EDGE_GEM_VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            2.3. 
     | 
| 
      
 1 
     | 
    
         
            +
            2.3.3
         
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            2.3. 
     | 
| 
      
 1 
     | 
    
         
            +
            2.3.3
         
     | 
    
        data/lib/haml/precompiler.rb
    CHANGED
    
    | 
         @@ -204,13 +204,13 @@ END 
     | 
|
| 
       204 
204 
     | 
    
         
             
                  when ELEMENT; render_tag(text)
         
     | 
| 
       205 
205 
     | 
    
         
             
                  when COMMENT; render_comment(text[1..-1].strip)
         
     | 
| 
       206 
206 
     | 
    
         
             
                  when SANITIZE
         
     | 
| 
       207 
     | 
    
         
            -
                    return  
     | 
| 
      
 207 
     | 
    
         
            +
                    return push_plain(text[3..-1].strip, :escape_html => true) if text[1..2] == "=="
         
     | 
| 
       208 
208 
     | 
    
         
             
                    return push_script(text[2..-1].strip, :escape_html => true) if text[1] == SCRIPT
         
     | 
| 
       209 
     | 
    
         
            -
                    return  
     | 
| 
      
 209 
     | 
    
         
            +
                    return push_flat_script(text[2..-1].strip, :escape_html => true) if text[1] == FLAT_SCRIPT
         
     | 
| 
      
 210 
     | 
    
         
            +
                    return push_plain(text[1..-1].strip, :escape_html => true) if text[1] == ?\s
         
     | 
| 
       210 
211 
     | 
    
         
             
                    push_plain text
         
     | 
| 
       211 
212 
     | 
    
         
             
                  when SCRIPT
         
     | 
| 
       212 
     | 
    
         
            -
                    return  
     | 
| 
       213 
     | 
    
         
            -
                    return push_script(text[1..-1], :escape_html => true) if options[:escape_html]
         
     | 
| 
      
 213 
     | 
    
         
            +
                    return push_plain(text[2..-1].strip) if text[1] == SCRIPT
         
     | 
| 
       214 
214 
     | 
    
         
             
                    push_script(text[1..-1])
         
     | 
| 
       215 
215 
     | 
    
         
             
                  when FLAT_SCRIPT; push_flat_script(text[1..-1])
         
     | 
| 
       216 
216 
     | 
    
         
             
                  when SILENT_SCRIPT
         
     | 
| 
         @@ -237,9 +237,10 @@ END 
     | 
|
| 
       237 
237 
     | 
    
         
             
                  when FILTER; start_filtered(text[1..-1].downcase)
         
     | 
| 
       238 
238 
     | 
    
         
             
                  when DOCTYPE
         
     | 
| 
       239 
239 
     | 
    
         
             
                    return render_doctype(text) if text[0...3] == '!!!'
         
     | 
| 
       240 
     | 
    
         
            -
                    return  
     | 
| 
       241 
     | 
    
         
            -
                    return push_script(text[2..-1].strip) if text[1] == SCRIPT
         
     | 
| 
       242 
     | 
    
         
            -
                    return  
     | 
| 
      
 240 
     | 
    
         
            +
                    return push_plain(text[3..-1].strip, :escape_html => false) if text[1..2] == "=="
         
     | 
| 
      
 241 
     | 
    
         
            +
                    return push_script(text[2..-1].strip, :escape_html => false) if text[1] == SCRIPT
         
     | 
| 
      
 242 
     | 
    
         
            +
                    return push_flat_script(text[2..-1].strip, :escape_html => false) if text[1] == FLAT_SCRIPT
         
     | 
| 
      
 243 
     | 
    
         
            +
                    return push_plain(text[1..-1].strip, :escape_html => false) if text[1] == ?\s
         
     | 
| 
       243 
244 
     | 
    
         
             
                    push_plain text
         
     | 
| 
       244 
245 
     | 
    
         
             
                  when ESCAPE; push_plain text[1..-1]
         
     | 
| 
       245 
246 
     | 
    
         
             
                  else push_plain text
         
     | 
| 
         @@ -306,13 +307,13 @@ END 
     | 
|
| 
       306 
307 
     | 
    
         | 
| 
       307 
308 
     | 
    
         
             
                # Renders a block of text as plain text.
         
     | 
| 
       308 
309 
     | 
    
         
             
                # Also checks for an illegally opened block.
         
     | 
| 
       309 
     | 
    
         
            -
                def push_plain(text)
         
     | 
| 
      
 310 
     | 
    
         
            +
                def push_plain(text, options = {})
         
     | 
| 
       310 
311 
     | 
    
         
             
                  if block_opened?
         
     | 
| 
       311 
312 
     | 
    
         
             
                    raise SyntaxError.new("Illegal nesting: nesting within plain text is illegal.", @next_line.index)
         
     | 
| 
       312 
313 
     | 
    
         
             
                  end
         
     | 
| 
       313 
314 
     | 
    
         | 
| 
       314 
315 
     | 
    
         
             
                  if contains_interpolation?(text)
         
     | 
| 
       315 
     | 
    
         
            -
                    push_script unescape_interpolation(text)
         
     | 
| 
      
 316 
     | 
    
         
            +
                    push_script unescape_interpolation(text), :escape_html => options[:escape_html]
         
     | 
| 
       316 
317 
     | 
    
         
             
                  else
         
     | 
| 
       317 
318 
     | 
    
         
             
                    push_text text
         
     | 
| 
       318 
319 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -333,6 +334,7 @@ END 
     | 
|
| 
       333 
334 
     | 
    
         
             
                def push_script(text, opts = {})
         
     | 
| 
       334 
335 
     | 
    
         
             
                  raise SyntaxError.new("There's no Ruby code for = to evaluate.") if text.empty?
         
     | 
| 
       335 
336 
     | 
    
         
             
                  return if options[:suppress_eval]
         
     | 
| 
      
 337 
     | 
    
         
            +
                  opts[:escape_html] = options[:escape_html] if opts[:escape_html].nil?
         
     | 
| 
       336 
338 
     | 
    
         | 
| 
       337 
339 
     | 
    
         
             
                  args = %w[preserve_script in_tag preserve_tag escape_html nuke_inner_whitespace]
         
     | 
| 
       338 
340 
     | 
    
         
             
                  args.map! {|name| opts[name.to_sym]}
         
     | 
| 
         @@ -363,11 +365,11 @@ END 
     | 
|
| 
       363 
365 
     | 
    
         | 
| 
       364 
366 
     | 
    
         
             
                # Causes <tt>text</tt> to be evaluated, and Haml::Helpers#find_and_flatten
         
     | 
| 
       365 
367 
     | 
    
         
             
                # to be run on it afterwards.
         
     | 
| 
       366 
     | 
    
         
            -
                def push_flat_script(text)
         
     | 
| 
      
 368 
     | 
    
         
            +
                def push_flat_script(text, options = {})
         
     | 
| 
       367 
369 
     | 
    
         
             
                  flush_merged_text
         
     | 
| 
       368 
370 
     | 
    
         | 
| 
       369 
371 
     | 
    
         
             
                  raise SyntaxError.new("There's no Ruby code for ~ to evaluate.") if text.empty?
         
     | 
| 
       370 
     | 
    
         
            -
                  push_script(text, :preserve_script => true)
         
     | 
| 
      
 372 
     | 
    
         
            +
                  push_script(text, options.merge(:preserve_script => true))
         
     | 
| 
       371 
373 
     | 
    
         
             
                end
         
     | 
| 
       372 
374 
     | 
    
         | 
| 
       373 
375 
     | 
    
         
             
                def start_haml_comment
         
     | 
| 
         @@ -651,8 +653,9 @@ END 
     | 
|
| 
       651 
653 
     | 
    
         
             
                    parse = true
         
     | 
| 
       652 
654 
     | 
    
         
             
                    value = unescape_interpolation(value[1..-1].strip) if value[0] == ?=
         
     | 
| 
       653 
655 
     | 
    
         
             
                  when '&', '!'
         
     | 
| 
       654 
     | 
    
         
            -
                    if value[0] == ?=
         
     | 
| 
      
 656 
     | 
    
         
            +
                    if value[0] == ?= || value[0] == ?~
         
     | 
| 
       655 
657 
     | 
    
         
             
                      parse = true
         
     | 
| 
      
 658 
     | 
    
         
            +
                      preserve_script = (value[0] == ?~)
         
     | 
| 
       656 
659 
     | 
    
         
             
                      value =
         
     | 
| 
       657 
660 
     | 
    
         
             
                        if value[1] == ?=
         
     | 
| 
       658 
661 
     | 
    
         
             
                          unescape_interpolation(value[2..-1].strip)
         
     | 
    
        data/test/haml/engine_test.rb
    CHANGED
    
    | 
         @@ -359,6 +359,68 @@ HTML 
     | 
|
| 
       359 
359 
     | 
    
         
             
            HAML
         
     | 
| 
       360 
360 
     | 
    
         
             
              end
         
     | 
| 
       361 
361 
     | 
    
         | 
| 
      
 362 
     | 
    
         
            +
              def test_escape_html
         
     | 
| 
      
 363 
     | 
    
         
            +
                html = <<HTML
         
     | 
| 
      
 364 
     | 
    
         
            +
            &
         
     | 
| 
      
 365 
     | 
    
         
            +
            &
         
     | 
| 
      
 366 
     | 
    
         
            +
            &
         
     | 
| 
      
 367 
     | 
    
         
            +
            HTML
         
     | 
| 
      
 368 
     | 
    
         
            +
             
     | 
| 
      
 369 
     | 
    
         
            +
                assert_equal(html, render(<<HAML, :escape_html => true))
         
     | 
| 
      
 370 
     | 
    
         
            +
            &= "&"
         
     | 
| 
      
 371 
     | 
    
         
            +
            != "&"
         
     | 
| 
      
 372 
     | 
    
         
            +
            = "&"
         
     | 
| 
      
 373 
     | 
    
         
            +
            HAML
         
     | 
| 
      
 374 
     | 
    
         
            +
             
     | 
| 
      
 375 
     | 
    
         
            +
                assert_equal(html, render(<<HAML, :escape_html => true))
         
     | 
| 
      
 376 
     | 
    
         
            +
            &~ "&"
         
     | 
| 
      
 377 
     | 
    
         
            +
            !~ "&"
         
     | 
| 
      
 378 
     | 
    
         
            +
            ~ "&"
         
     | 
| 
      
 379 
     | 
    
         
            +
            HAML
         
     | 
| 
      
 380 
     | 
    
         
            +
             
     | 
| 
      
 381 
     | 
    
         
            +
                assert_equal(html, render(<<HAML, :escape_html => true))
         
     | 
| 
      
 382 
     | 
    
         
            +
            & \#{"&"}
         
     | 
| 
      
 383 
     | 
    
         
            +
            ! \#{"&"}
         
     | 
| 
      
 384 
     | 
    
         
            +
            \#{"&"}
         
     | 
| 
      
 385 
     | 
    
         
            +
            HAML
         
     | 
| 
      
 386 
     | 
    
         
            +
             
     | 
| 
      
 387 
     | 
    
         
            +
                assert_equal(html, render(<<HAML, :escape_html => true))
         
     | 
| 
      
 388 
     | 
    
         
            +
            &== \#{"&"}
         
     | 
| 
      
 389 
     | 
    
         
            +
            !== \#{"&"}
         
     | 
| 
      
 390 
     | 
    
         
            +
            == \#{"&"}
         
     | 
| 
      
 391 
     | 
    
         
            +
            HAML
         
     | 
| 
      
 392 
     | 
    
         
            +
             
     | 
| 
      
 393 
     | 
    
         
            +
                tag_html = <<HTML
         
     | 
| 
      
 394 
     | 
    
         
            +
            <p>&</p>
         
     | 
| 
      
 395 
     | 
    
         
            +
            <p>&</p>
         
     | 
| 
      
 396 
     | 
    
         
            +
            <p>&</p>
         
     | 
| 
      
 397 
     | 
    
         
            +
            HTML
         
     | 
| 
      
 398 
     | 
    
         
            +
             
     | 
| 
      
 399 
     | 
    
         
            +
                assert_equal(tag_html, render(<<HAML, :escape_html => true))
         
     | 
| 
      
 400 
     | 
    
         
            +
            %p&= "&"
         
     | 
| 
      
 401 
     | 
    
         
            +
            %p!= "&"
         
     | 
| 
      
 402 
     | 
    
         
            +
            %p= "&"
         
     | 
| 
      
 403 
     | 
    
         
            +
            HAML
         
     | 
| 
      
 404 
     | 
    
         
            +
             
     | 
| 
      
 405 
     | 
    
         
            +
                assert_equal(tag_html, render(<<HAML, :escape_html => true))
         
     | 
| 
      
 406 
     | 
    
         
            +
            %p&~ "&"
         
     | 
| 
      
 407 
     | 
    
         
            +
            %p!~ "&"
         
     | 
| 
      
 408 
     | 
    
         
            +
            %p~ "&"
         
     | 
| 
      
 409 
     | 
    
         
            +
            HAML
         
     | 
| 
      
 410 
     | 
    
         
            +
             
     | 
| 
      
 411 
     | 
    
         
            +
                assert_equal(tag_html, render(<<HAML, :escape_html => true))
         
     | 
| 
      
 412 
     | 
    
         
            +
            %p& \#{"&"}
         
     | 
| 
      
 413 
     | 
    
         
            +
            %p! \#{"&"}
         
     | 
| 
      
 414 
     | 
    
         
            +
            %p \#{"&"}
         
     | 
| 
      
 415 
     | 
    
         
            +
            HAML
         
     | 
| 
      
 416 
     | 
    
         
            +
             
     | 
| 
      
 417 
     | 
    
         
            +
                assert_equal(tag_html, render(<<HAML, :escape_html => true))
         
     | 
| 
      
 418 
     | 
    
         
            +
            %p&== \#{"&"}
         
     | 
| 
      
 419 
     | 
    
         
            +
            %p!== \#{"&"}
         
     | 
| 
      
 420 
     | 
    
         
            +
            %p== \#{"&"}
         
     | 
| 
      
 421 
     | 
    
         
            +
            HAML
         
     | 
| 
      
 422 
     | 
    
         
            +
              end
         
     | 
| 
      
 423 
     | 
    
         
            +
             
     | 
| 
       362 
424 
     | 
    
         
             
              # HTML escaping tests
         
     | 
| 
       363 
425 
     | 
    
         | 
| 
       364 
426 
     | 
    
         
             
              def test_ampersand_equals_should_escape
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: haml-edge
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2.3. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.3.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Nathan Weizenbaum
         
     | 
| 
         @@ -10,7 +10,7 @@ autorequire: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            date: 2009-07- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2009-07-10 00:00:00 -04:00
         
     | 
| 
       14 
14 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       16 
16 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     |