Sha256: 9d5f8f9becbcd4b36d9a6f20be5ba217e3b081d059868379b8c85bb0e302475c

Contents?: true

Size: 1.57 KB

Versions: 15

Compression:

Stored size: 1.57 KB

Contents

require 'rack/request'
require 'rack/response'
require 'rack/file'

require File.dirname(__FILE__) + '/../resolver'

module Roger
  module Rack
    
    class Roger
      
      attr_reader :project
      
      def initialize(project)
        @project = project
        @docroot = project.html_path
        
        @resolver = Resolver.new(@docroot)
        @file_server = ::Rack::File.new(@docroot)
      end

      def call(env)
        url = env["PATH_INFO"]
        env["MOCKUP_PROJECT"] = project
        
        if template_path = @resolver.url_to_path(url)
          env["rack.errors"].puts "Rendering template #{template_path.inspect} (#{url.inspect})"
          # begin
            templ = ::Roger::Template.open(template_path, :partials_path => @project.partials_path, :layouts_path => @project.layouts_path)
            mime = ::Rack::Mime.mime_type(File.extname(template_path), 'text/html')
            resp = ::Rack::Response.new do |res|
              res.headers["Content-Type"] = mime if mime
              res.status = 200
              res.write templ.render(env)
            end
            resp.finish
          # rescue StandardError => e
          #   env["rack.errors"].puts "#{e.message}\n #{e.backtrace.join("\n")}\n\n"
          #   resp = ::Rack::Response.new do |res|
          #     res.status = 500
          #     res.write "An error occurred"
          #   end
          #   resp.finish
          # end
        else
          env["rack.errors"].puts "Invoking file handler for #{url.inspect}"
          @file_server.call(env)
        end
      end    
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
roger-1.1.3 lib/roger/rack/roger.rb
roger-1.1.2 lib/roger/rack/roger.rb
roger-1.1.1 lib/roger/rack/roger.rb
roger-1.1.0 lib/roger/rack/roger.rb
roger-1.0.1 lib/roger/rack/roger.rb
roger-1.0.0 lib/roger/rack/roger.rb
roger-0.13.0 lib/roger/rack/roger.rb
roger-0.12.5 lib/roger/rack/roger.rb
roger-0.12.4 lib/roger/rack/roger.rb
roger-0.12.3 lib/roger/rack/roger.rb
roger-0.12.2 lib/roger/rack/roger.rb
roger-0.12.1 lib/roger/rack/roger.rb
roger-0.12.0 lib/roger/rack/roger.rb
roger-0.11.0 lib/roger/rack/roger.rb
roger-0.10.0 lib/roger/rack/roger.rb