class Xapian::Rack::RelativeLoader

Public Class Methods

new(app, options = {}) click to toggle source
# File lib/xapian/rack/search.rb, line 27
def initialize(app, options = {})
        @app = app
        
        @logger = options[:logger] || Logger.new($stderr)
end

Public Instance Methods

call(name) { |500, {}| ... } click to toggle source
# File lib/xapian/rack/search.rb, line 33
def call(name, &block)
        # Handle relative URIs
        if URI.parse(name).relative?
                env = {
                        'HTTP_ACCEPT' => '*/*',
                        'QUERY_STRING' => '',
                        'REQUEST_METHOD' => 'GET',
                        'PATH_INFO' => name,
                        'rack.input' => StringIO.new,
                }
                
                begin
                        status, header, content = @app.call(env)
                rescue
                        @logger.error "Error requesting resource #{name}: #{$!}"
                        $!.backtrace.each{|line| @logger.error(line)}
                        
                        yield 500, {}, nil
                end
        
                body = lambda do 
                        buffer = ""
                        content.each{|segment| buffer += segment}

                        buffer
                end
                
                downcase_header = {}
                header.each{|k,v| downcase_header[k.downcase] = v}
                
                yield status, downcase_header, body
                
                return true
        end
        
        return false
end