Module: Erubis::HeaderFooterEnhancer

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

Overview

experimental

allow header and footer in eRuby script

ex.

====================
## without header and footer
$ cat ex1.eruby
<% def list_items(list) %>
<%   for item in list %>
<li><%= item %></li>
<%   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