UtopiaSourceUtopiaContentNode

class Node

Represents an immutable node within the content hierarchy.

Definitions

def lookup_tag(tag)

Lookup the given tag which is being rendered within the given node. Invoked by class Utopia::Content::Document.

Implementation

def lookup_tag(tag)
	return @controller.lookup_tag(tag.name, self)
end

def call(document, state)

Invoked when the node is being rendered by class Utopia::Content::Document.

Implementation

def call(document, state)
	# Load the template:
	template = @controller.fetch_template(@file_path)
	
	# Evaluate the template/code:
	context = Context.new(document, state)
	markup = template.to_buffer(context)
	
	# Render the resulting markup into the document:
	document.parse_markup(markup)
end

Context

This is a special context in which a limited set of well defined methods are exposed in the content view.

Implementation

Context = Struct.new(:document, :state) do
	def partial(*arguments, &block)
		if block_given?
			state.defer(&block)
		else
			state.defer do |document|
				document.tag(*arguments)
			end
		end
	end
	
	alias deferred_tag partial
	
	def controller
		document.controller
	end
	
	def localization
		document.localization
	end
	
	def request
		document.request
	end
	
	def response
		document
	end
	
	def attributes
		state.attributes
	end
	
	def [] key
		state.attributes.fetch(key) {document.attributes[key]}
	end
	
	alias current state
	
	def content
		document.content
	end
	
	def parent
		document.parent
	end
	
	def first
		document.first
	end
	
	def links(*arguments, **options, &block)
		state.node.links(*arguments, **options, &block)
	end
end