Sha256: b32282def79224672b04c12abcfa09d1bc61e753a47c43dedf49dc2810b2c1c3

Contents?: true

Size: 1.87 KB

Versions: 11

Compression:

Stored size: 1.87 KB

Contents

require "tilt"

module Machined
  module Processors
    class LayoutProcessor < Tilt::Template
      # A reference to the Sprockets context
      attr_reader :context
      
      # Path to the layout file
      attr_reader :layout_path
      
      # See `Tilt::Template#prepare`.
      def prepare
      end
      
      # See `Tilt::Template#evaluate`.
      def evaluate(context, locals, &block)
        @context = context
        if layout? && @layout_path = resolve_layout
          context.depend_on @layout_path
          evaluate_layout
        else
          data
        end
      end
      
      protected
      
      # A reference to the Views sprocket, where the
      # layout asset will be.
      def views
        context.machined.views
      end
      
      # Determine if we should attempt to wrap the
      # content with a layout.
      def layout?
        context.layout != false
      end
      
      # Attempt to find the layout file in the Views
      # sprocket.
      def resolve_layout
        views.resolve "layouts/#{context.layout}", :content_type => context.content_type
      rescue Sprockets::FileNotFound, Sprockets::ContentTypeMismatch
        nil
      end
      
      # Recreate `Sprockets::Context#evaluate`, because it doesn't
      # support yielding. I'm not even sure it's necessary to
      # support multiple processors for a layout, though.
      def evaluate_layout
        processors = views.attributes_for(layout_path).processors
        result     = Sprockets::Utils.read_unicode layout_path
        
        processors.each do |processor|
          begin
            template = processor.new(layout_path.to_s) { result }
            result   = template.render(context, {}) { data }
          rescue Exception => e
            context.send :annotate_exception!, e
            raise
          end
        end
        
        result
      end
    end
  end
end
  

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
machined-0.7.1 lib/machined/processors/layout_processor.rb
machined-0.7.0 lib/machined/processors/layout_processor.rb
machined-0.6.0 lib/machined/processors/layout_processor.rb
machined-0.5.0 lib/machined/processors/layout_processor.rb
machined-0.4.0 lib/machined/processors/layout_processor.rb
machined-0.3.1 lib/machined/processors/layout_processor.rb
machined-0.3.0 lib/machined/processors/layout_processor.rb
machined-0.2.2 lib/machined/processors/layout_processor.rb
machined-0.2.1 lib/machined/processors/layout_processor.rb
machined-0.2.0 lib/machined/processors/layout_processor.rb
machined-0.1.1 lib/machined/processors/layout_processor.rb