class Roger::Rack::Roger
Roger
middleware that processe roger templates
Attributes
options[R]
project[R]
Public Class Methods
new(project, options = {})
click to toggle source
Initialize the Rack
app
@param [Hash] options Options to use
@option options
# File lib/roger/rack/roger.rb, line 27 def initialize(project, options = {}) @project = project @options = default_options.update(options) @docroot = project.html_path @resolver = Resolver.new(@docroot) @file_server = ::Rack::File.new(@docroot) end
Public Instance Methods
call(env)
click to toggle source
# File lib/roger/rack/roger.rb, line 36 def call(env) url = env["PATH_INFO"] env["MOCKUP_PROJECT"] = env["roger.project"] || @project template_path = @resolver.url_to_path(url) if process_path_by_roger?(template_path) env["rack.errors"].puts "Rendering template #{template_path.inspect} (#{url.inspect})" build_response(template_path, env).finish else env["rack.errors"].puts "Invoking file handler for #{url.inspect}" @file_server.call(env) end end
default_options()
click to toggle source
# File lib/roger/rack/roger.rb, line 15 def default_options { match: ["**/*.{html,md,erb}"], skip: [] } end
Protected Instance Methods
build_response(template_path, env)
click to toggle source
# File lib/roger/rack/roger.rb, line 62 def build_response(template_path, env) renderer = ::Roger::Renderer.new( env, partials_path: @project.partials_path, layouts_path: @project.layouts_path ) mime = ::Rack::Mime.mime_type(File.extname(template_path), "text/html") ::Rack::Response.new do |res| res.headers["Content-Type"] = mime if mime res.headers["X-Handled-By"] = "Roger" res.status = 200 res.write renderer.render(template_path, @project.options[:renderer] || {}) end end
process_path_by_roger?(path)
click to toggle source
Wether or not we should process this path by the Roger
renderer.
# File lib/roger/rack/roger.rb, line 54 def process_path_by_roger?(path) return false unless path return false unless match_path(path, @options[:match], @options[:skip]) ::Roger::Renderer.will_render?(path) end