Sha256: 338e248afeed95374f5f958cf2bf40cdb4017630498c4919cbd7ea94f382f976

Contents?: true

Size: 1.02 KB

Versions: 3

Compression:

Stored size: 1.02 KB

Contents

module Reel
  class Request
    class Parser
      attr_reader :headers

      def initialize
        @parser = Http::Parser.new(self)
        reset
      end

      def add(data)
        @parser << data
      end
      alias_method :<<, :add

      def headers?
        !!@headers
      end

      def http_method
        @parser.http_method.downcase.to_sym
      end

      def http_version
        @parser.http_version.join(".")
      end

      def url
        @parser.request_url
      end

      #
      # Http::Parser callbacks
      #

      def on_headers_complete(headers)
        @headers = headers
      end

      def on_body(chunk)
        if @chunk
          @chunk << chunk
        else
          @chunk = chunk
        end
      end

      def chunk
        if (chunk = @chunk)
          @chunk = nil
          chunk
        end
      end

      def on_message_complete
        @finished = true
      end

      def reset
        @finished = false
        @headers  = nil
        @chunk    = nil
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
reel-0.2.0 lib/reel/request_parser.rb
reel-0.2.0.pre lib/reel/request_parser.rb
reel-0.1.0 lib/reel/request_parser.rb