Sha256: 9b96205d198990fe822d37aacfc687e55783d14d0e3710fd47e4e3838e9e0975

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

export_default :Request

require 'uri'

class Request
  attr_reader :headers, :adapter

  def initialize(headers, adapter)
    @headers  = headers
    @adapter  = adapter
  end

  def protocol
    @adapter.protocol
  end

  def method
    @method ||= @headers[':method']
  end

  def scheme
    @scheme ||= @headers[':scheme']
  end

  def uri
    @uri ||= URI.parse(@headers[':path'] || '')
  end

  def path
    @path ||= uri.path
  end

  def query
    @uri ||= URI.parse(@headers[':path'] || '')
    return @query if @query
  
    if (q = uri.query)
      @query = q.split('&').each_with_object({}) do |kv, h|
        k, v = kv.split('=')
        h[k.to_sym] = URI.decode_www_form_component(v)
      end
    else
      @query = {}
    end
  end

  EMPTY_HASH = {}

  def respond(chunk, headers = EMPTY_HASH)
    @adapter.respond(chunk, headers)
  end

  def send_headers(headers = EMPTY_HASH, empty_response = false)
    @adapter.send_headers(headers, empty_response)
  end

  def send_body_chunk(body, done: false)
    @adapter.send_body_chunk(body, done: done)
  end

  def finish
    @adapter.finish
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
polyphony-0.19 lib/polyphony/http/request.rb