Class: Readme::HttpRequest

Inherits:
Object
  • Object
show all
Includes:
ContentTypeHelper
Defined in:
lib/readme/http_request.rb

Constant Summary collapse

IS_RACK_V3 =
Gem.loaded_specs['rack'].version > Gem::Version.create('3.0')
HTTP_NON_HEADERS =

rubocop:disable Style/MutableConstant

[
  Rack::HTTP_COOKIE,
  Rack::HTTP_HOST,
  Rack::HTTP_PORT
]

Constants included from ContentTypeHelper

ContentTypeHelper::JSON_MIME_TYPES

Instance Method Summary collapse

Methods included from ContentTypeHelper

#json?

Constructor Details

#initialize(env) ⇒ HttpRequest

Returns a new instance of HttpRequest.



28
29
30
31
32
33
34
35
36
# File 'lib/readme/http_request.rb', line 28

def initialize(env)
  # Sanitize the auth header, if it exists
  env['HTTP_AUTHORIZATION'] = Readme::Mask.mask(env['HTTP_AUTHORIZATION']) if env.key?('HTTP_AUTHORIZATION')
  @request = Rack::Request.new(env)

  return unless IS_RACK_V3

  @input = Rack::RewindableInput.new(@request.body)
end

Instance Method Details

#bodyObject



88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/readme/http_request.rb', line 88

def body
  if IS_RACK_V3
    body = @input.read
    @input.rewind
    body
  else
    @request.body.rewind
    content = @request.body.read
    @request.body.rewind

    content
  end
end

#content_lengthObject



70
71
72
# File 'lib/readme/http_request.rb', line 70

def content_length
  @request.content_length.to_i
end

#content_typeObject



62
63
64
# File 'lib/readme/http_request.rb', line 62

def content_type
  @request.content_type
end

#cookiesObject



46
47
48
# File 'lib/readme/http_request.rb', line 46

def cookies
  @request.cookies
end

#form_data?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/readme/http_request.rb', line 66

def form_data?
  @request.form_data?
end

#headersObject



78
79
80
81
82
83
84
85
86
# File 'lib/readme/http_request.rb', line 78

def headers
  @request
    .each_header
    .select { |key, _| http_header?(key) }
    .to_h
    .transform_keys { |header| normalize_header_name(header) }
    .merge unprefixed_headers
    .merge host_header
end

#http_versionObject



50
51
52
53
54
55
56
# File 'lib/readme/http_request.rb', line 50

def http_version
  if IS_RACK_V3
    @request.get_header(Rack::SERVER_PROTOCOL)
  else
    @request.get_header(Rack::HTTP_VERSION)
  end
end

#options?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/readme/http_request.rb', line 74

def options?
  @request.request_method == 'OPTIONS'
end

#parsed_form_dataObject



102
103
104
# File 'lib/readme/http_request.rb', line 102

def parsed_form_data
  @request.POST
end

#query_paramsObject



42
43
44
# File 'lib/readme/http_request.rb', line 42

def query_params
  @request.GET
end

#request_methodObject



58
59
60
# File 'lib/readme/http_request.rb', line 58

def request_method
  @request.request_method
end

#urlObject



38
39
40
# File 'lib/readme/http_request.rb', line 38

def url
  @request.url
end