Sha256: ab32165d12c2540114eb4d7ad45a1314273f8e68225419403a291f49420a1112

Contents?: true

Size: 1.4 KB

Versions: 3

Compression:

Stored size: 1.4 KB

Contents

require 'rack'
require 'webrick/httputils'

module YARD
  module Server
    class RackMiddleware
      def initialize(app, opts = {})
        args = [opts[:libraries] || {}, opts[:options] || {}, opts[:server_options] || {}]
        @app = RackAdapter.new(*args)
      end
      
      def call(env) @app.call(env) end
    end
    
    class RackAdapter < Adapter
      include WEBrick::HTTPUtils
      
      def call(env)
        request = Rack::Request.new(env)
        request.path_info = unescape(request.path_info) # unescape things like %3F
        router.call(request)
      end
      
      def start
        server = Rack::Server.new(server_options)
        server.instance_variable_set("@app", self)
        print_start_message(server)
        server.start
      end
      
      private
      
      def print_start_message(server)
        opts = server.default_options.merge(server.options)
        puts ">> YARD #{YARD::VERSION} documentation server at http://#{opts[:Host]}:#{opts[:Port]}"

        # Only happens for Mongrel
        return unless server.server.to_s == "Rack::Handler::Mongrel"
        puts ">> #{server.server.class_name} web server (running on Rack)"
        puts ">> Listening on #{opts[:Host]}:#{opts[:Port]}, CTRL+C to stop"
      end
    end
  end
end

# @private
class Rack::Request
  alias query params
  def xhr?; (env['HTTP_X_REQUESTED_WITH'] || "").downcase == "xmlhttprequest" end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
yard-0.6.3 lib/yard/server/rack_adapter.rb
yard-0.6.2 lib/yard/server/rack_adapter.rb
yard-0.6.1 lib/yard/server/rack_adapter.rb