WIP - Rendering pipeline.

feature/pipeline
Brad Gessler 2016-03-28 23:34:12 -07:00 committed by Thomas Reynolds
parent 158c3e9f25
commit 11e478fad9
4 changed files with 48 additions and 1 deletions

View File

@ -0,0 +1,19 @@
class Middleman::Extensions::Pipeline < Middleman::Extension
expose_to_config :pipeline
def initialize(app, options_hash={}, &block)
super
@pipelines = []
end
def pipeline(&block)
@pipelines << block
end
def manipulate_resource_list(resources)
@pipelines.each do |pipeline|
pipeline.call resources
end
resources
end
end

View File

@ -0,0 +1,24 @@
require 'forwardable'
module Middleman
class Pipeline
extend Forwardable
attr_reader :filters
attr_reader :resource
def_delegators :filters, :<<, :push, :unshift, :insert, :shift, :pop, :first, :clear
def initialize(resource)
@resource = resource
@filters = []
end
def render(*args)
process resource.render *args
end
def process(body)
filters.inject(body){ |body, app| app.call(body) }
end
end
end

View File

@ -109,7 +109,7 @@ module Middleman
begin
# Write out the contents of the page
res.write resource.render({}, rack: { request: req })
res.write resource.pipeline.render({}, rack: { request: req })
# Valid content is a 200 status
res.status = 200

View File

@ -3,6 +3,7 @@ require 'middleman-core/sitemap/extensions/traversal'
require 'middleman-core/file_renderer'
require 'middleman-core/template_renderer'
require 'middleman-core/contracts'
require 'middleman-core/pipeline'
module Middleman
# Sitemap namespace
@ -40,6 +41,8 @@ module Middleman
attr_accessor :ignored
attr_reader :pipeline
# Initialize resource with parent store and URL
# @param [Middleman::Sitemap::Store] store
# @param [String] path
@ -50,6 +53,7 @@ module Middleman
@app = @store.app
@path = path
@ignored = false
@pipeline = Pipeline.new(self)
source = Pathname(source) if source && source.is_a?(String)