Sha256: 16d1d23508456c35a10059116e841d1273d4f98a3b746417e78ba07f3c0438f6

Contents?: true

Size: 864 Bytes

Versions: 2

Compression:

Stored size: 864 Bytes

Contents

require 'forwardable'
require 'rack/request'

module Hi
  class Request
    extend Forwardable

    ATTRIBUTES = [
      :host,
      :ip,
      :port,
      :request_method,
      :scheme,
      :url,
      :query_string,
      :body,
      :content_length,
      :media_type,
      :referer,
      :user_agent,
      :xhr?
    ]

    def_delegators :request, *ATTRIBUTES
    attr_reader :env, :request

    def initialize(env)
      @env = env
      @request = Rack::Request.new(env)
    end

    def headers
      env.select { |key| key.start_with? 'HTTP_' }
    end

    def body_string
      body.string if body
    end

    def to_h
      request_hash.merge({
        body: body_string,
        headers: headers,
      })
    end

    private

    def request_hash
      ATTRIBUTES.inject({}) { |hash, attr| hash[attr] = send(attr); hash }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hi-1.2.1 lib/hi/request.rb
hi-1.2.0 lib/hi/request.rb