module Roda::RodaPlugins::Inversion::RequestMethods

Public Instance Methods

block_result_body( result ) click to toggle source

Hook block results for template rendering.

Calls superclass method
# File lib/roda/plugins/inversion.rb, line 156
def block_result_body( result )
        if ( template = self.extract_template_from_result( result ) )

                # Wrap the template in a layout if there is one
                template = self.wrap_in_layout( template )

                # Set some default stuff on the top-level template
                self.set_common_attributes( template )

                return template.render
        else
                super
        end
end

Protected Instance Methods

extract_template_from_result( result ) click to toggle source

Fetch the template from the result (if there is one) and return it.

# File lib/roda/plugins/inversion.rb, line 177
def extract_template_from_result( result )
        templates = self.scope.class.template_map

        # Result is a template name.
        if result.is_a?( Symbol ) && templates.key?( result )
                return scope.template( result )

                # Result is a template object.
        elsif result.respond_to?( :render )
                return result
        end

        # Not templated; returned as-is
        return nil
end
set_common_attributes( template ) click to toggle source

Set some default values from the request in the given top-level template.

# File lib/roda/plugins/inversion.rb, line 208
def set_common_attributes( template )
        template.request  = self
        template.response = self.scope.response
        template.app      = self.scope
end
wrap_in_layout( content ) click to toggle source

Wrap the specified content template in the layout template and return it. If there isn’t a layout declared, just return content as-is.

# File lib/roda/plugins/inversion.rb, line 196
def wrap_in_layout( content )
        layout = self.scope.class.layout_template or return content

        layout.reload if layout.changed?
        l_template = layout.dup
        l_template.body = content

        return l_template
end