Sha256: 42c9f23e40a10d6d121e0ba7d690f207c4d47ab72fd33adb7967908173a41409

Contents?: true

Size: 1.62 KB

Versions: 7

Compression:

Stored size: 1.62 KB

Contents

module Baurets
  module Optionsful
    class Server

      ## 
      # Wakes up!
      #
      def initialize(app)  
        @app = app
        @config = Configurator.new.configure!
      end  

      ##
      # Handle HTTP OPTIONS requests.
      # 
      def call(env) 
        unless env["REQUEST_METHOD"] == "OPTIONS"
          @app.call(env)
        else
          @env = env
          build_response
        end
      end

      private
      
      def extract_options_information
        allows = ::Baurets::Optionsful::Introspections.do_the_matches(@env["PATH_INFO"])
      end

      def build_response
        allows = extract_options_information
        headers = {}
        status = 500
        body = ""
        unless allows.empty?
          headers.merge!({"Allow" => allows})
          status = 204
          if @config[:link] == true
            headers.merge!({"Link" => build_link_header})
          end
        else
          status = 404
          body = "Not found."
        end
        [status, headers, body]
      end
      
      def build_link_header
        link = ""
        if @config[:host] == "auto"
          server_name = @env["SERVER_NAME"]
          server_port = @env["SERVER_PORT"]
          link = "\"<http://#{server_name}:#{server_port}"
        else
          link = "\"<http://#{@config[:host]}"
        end
        unless @config[:base_path].empty?
          link += @config[:base_path] unless @config[:base_path] == "/"
        end
        if @config[:propagate] == true
          link += @env["PATH_INFO"]
        end
        link += ">; type=text/html; rel=help\""
        link
      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
optionsful-0.5.3 lib/baurets/optionsful/server.rb
optionsful-0.5.2 lib/baurets/optionsful/server.rb
optionsful-0.5.1 lib/baurets/optionsful/server.rb
optionsful-0.5.0 lib/baurets/optionsful/server.rb
optionsful-0.4.3 lib/baurets/optionsful/server.rb
optionsful-0.4.2 lib/baurets/optionsful/server.rb
optionsful-0.4.1 lib/baurets/optionsful/server.rb