Skip to content

Instantly share code, notes, and snippets.

@bryanlarsen
Created February 28, 2010 04:14

Revisions

  1. bryanlarsen revised this gist Feb 28, 2010. 1 changed file with 15 additions and 0 deletions.
    15 changes: 15 additions & 0 deletions template_handler.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,15 @@

    module Dryml
    class TemplateHandler < ActionView::Template::Handler
    def self.call(template)
    "renderer = Dryml.page_renderer(self, local_assigns.keys, '#{template.details[:virtual_path]}', '#{template.identifier}')
    this = self.controller.send(:dryml_context) || local_assigns[:this]
    @this ||= this
    s = renderer.render_page(@this, local_assigns)
    # Important to strip whitespace, or the browser hangs around for ages (FF2)
    s.strip"
    end
    end
    end
  2. bryanlarsen created this gist Feb 28, 2010.
    33 changes: 33 additions & 0 deletions fallback_resolver.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    module Dryml
    # quacks like a Rails3 ActionView::Template
    class MissingTemplate
    attr_reader :details

    def identifier
    "#{@prefix}/#{@name}"
    end

    def mime_type
    details[:mime_type]
    end

    def initialize(name, details, prefix, partial)
    @name = name
    @details = details
    @prefix = prefix
    @partial = partial
    end

    def render(view, locals, &block)
    renderer = Dryml.empty_page_renderer(view)
    renderer.render_tag("#{@name}-page", locals)
    end

    end

    class FallbackResolver < ActionView::Resolver
    def find_templates(*args)
    [Dryml::MissingTemplate.new(*args)]
    end
    end
    end
    2 changes: 2 additions & 0 deletions init.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2 @@
    ActionView::Template.register_template_handler(:dryml, Dryml::TemplateHandler)
    ActionController::Base.view_paths << Dryml::FallbackResolver.new