Module: Erubis::HeaderFooterEnhancer

Included in:
HeaderFooterEruby
Defined in:
lib/erubis/enhancer.rb

Overview

[experimental] allow header and footer in eRuby script

ex.

$ cat ex1.eruby <% def list_items(list) %> <% for item in list %>

  • <%= item %>
  • <% end %> <% end %>
    $ erubis -s ex1.eruby
    _buf = []; def list_items(list)
    ;   for item in list
    ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
    ';   end
    ; end
    ;
    _buf.join
    
    ## with header and footer
    $ cat ex2.eruby
    <!--#header:
    def list_items(list)
    #-->
    <%  for item in list %>
    <li><%= item %></li>
    <%  end %>
    <!--#footer:
    end
    #-->
    
    $ erubis -s -c HeaderFooterEruby ex4.eruby
    
    def list_items(list)
    _buf = []; _buf << '
    ';  for item in list
    ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
    ';  end
    ; _buf << '
    ';
    _buf.join
    end
    
    ====================
    

    this is language-independent.

    Constant Summary collapse

    /(.*?)(^[ \t]*)?<!--\#(\w+):(.*?)\#-->([ \t]*\r?\n)?/m

    Instance Attribute Summary collapse

    Class Method Summary collapse

    Instance Method Summary collapse

    Instance Attribute Details

    Returns the value of attribute footer.

    
    
    601
    602
    603
    # File 'lib/erubis/enhancer.rb', line 601
    
    def footer
      @footer
    end

    #headerObject

    Returns the value of attribute header.

    
    
    601
    602
    603
    # File 'lib/erubis/enhancer.rb', line 601
    
    def header
      @header
    end

    Class Method Details

    .descObject

    :nodoc:

    
    
    579
    580
    581
    # File 'lib/erubis/enhancer.rb', line 579
    
    def self.desc   # :nodoc:
      "allow header/footer in document (ex. '<!--#header: #-->')"
    end

    Instance Method Details

    #add_text(src, text) ⇒ Object

    
    
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    # File 'lib/erubis/enhancer.rb', line 585
    
    def add_text(src, text)
      m = nil
      text.scan(HEADER_FOOTER_PATTERN) do |txt, lspace, word, content, rspace|
        m = Regexp.last_match
        flag_trim = @trim && lspace && rspace
        super(src, txt)
        content = "#{lspace}#{content}#{rspace}" if flag_trim
        super(src, lspace) if !flag_trim && lspace
        instance_variable_set("@#{word}", content)
        super(src, rspace) if !flag_trim && rspace
      end
      #rest = $' || text                    # ruby1.8
      rest = m ? text[m.end(0)..-1] : text  # ruby1.9
      super(src, rest)
    end

    #convert(input) ⇒ Object

    
    
    603
    604
    605
    606
    # File 'lib/erubis/enhancer.rb', line 603
    
    def convert(input)
      source = super
      return @src = "#{@header}#{source}#{@footer}"
    end