Sha256: 4cb88624aa04cd09fa6a03e07243cf52725f691031899968a7d55e926ab70f13

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

require 'orange/core'
require 'orange/middleware/base'

module Orange::Middleware
  
  class Template < Base
    def init(*args)
      @core.add_pulp(Orange::Pulp::Template)
      @core.mixin(Orange::Mixins::Template)
      
      # Establish a default template chooser
      @core.template_chooser do |packet|
        if packet['route.context'] == :admin
          packet.add_css('admin.css', :module => '_orange_')
          'admin.haml'
        else
          false
        end
      end
    end
    
    def packet_call(packet)
      packet['template.file'] = orange.template_for packet
      status, headers, content = pass packet
      if needs_wrapped?(packet)
        content = wrap(packet, content)
        packet[:content] = content.first
      end
      orange.fire(:wrapped, packet)
      [status, headers, packet.content]
    end
    
    def needs_wrapped?(packet)
      packet['template.file'] && !packet['template.disable']
    end
    
    def wrap(packet, content = false)
      content = packet.content unless content
      content = content.join
      content = orange[:parser].haml(packet['template.file'], packet, :wrapped_content => content, :template => true) do 
        content
      end
      [content]
    end
  end
end

module Orange::Pulp::Template
  def wrap
    packet[:content] = orange[:parser].haml(packet['template.file'], packet, :wrapped_content => packet[:content], :template => true) do
      content
    end
  end
end

module Orange::Mixins::Template
  def template_for(packet)
    @template_chooser.call(packet)
  end
  def template_chooser(&block)
    @template_chooser = Proc.new
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
orange-0.0.4 lib/orange/middleware/template.rb