Class: Ruty::Tags::Block
- Inherits:
-
Ruty::Tag
- Object
- Datastructure::Node
- Ruty::Tag
- Ruty::Tags::Block
- Defined in:
- lib/ruty/tags/inheritance.rb
Overview
special tag that marks a part of a template for inheritance. If a template extends from a template with a block tag with the same name it will replace the block in the inherited template with the block with the same name in the current template.
Instance Method Summary collapse
- #add_layer(nodelist) ⇒ Object
-
#initialize(parser, argstring) ⇒ Block
constructor
A new instance of Block.
- #render_node(context, stream, index = -1) ⇒ Object
Constructor Details
#initialize(parser, argstring) ⇒ Block
Returns a new instance of Block.
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/ruty/tags/inheritance.rb', line 16 def initialize parser, argstring if not argstring =~ /^[a-zA-Z_][a-zA-Z0-9_]*$/ parser.fail('Invalid syntax for block tag') end @name = argstring.to_sym @stack = [parser.parse_until { |name, a| name == :endblock }] blocks = (parser.storage[:blocks] ||= {}) parser.fail("block '#{@name}' defined twice") if blocks.include?(@name) blocks[@name] = self end |
Instance Method Details
#add_layer(nodelist) ⇒ Object
28 29 30 |
# File 'lib/ruty/tags/inheritance.rb', line 28 def add_layer nodelist @stack << nodelist end |
#render_node(context, stream, index = -1) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/ruty/tags/inheritance.rb', line 32 def render_node context, stream, index=-1 context.push context[:block] = Ruty::Datastructure::Deferred.new( :super => Proc.new { render_node(context, stream, index - 1) if index.abs <= @stack.size }, :depth => Proc.new { index.abs }, :name => Proc.new { @name } ) @stack[index].render_node(context, stream) context.pop nil end |