File: request.rb

package info (click to toggle)
ruby-grape 1.6.2-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 2,156 kB
  • sloc: ruby: 25,265; makefile: 7
file content (51 lines) | stat: -rw-r--r-- 1,174 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# frozen_string_literal: true

require 'grape/util/lazy_object'

module Grape
  class Request < Rack::Request
    HTTP_PREFIX = 'HTTP_'

    alias rack_params params

    def initialize(env, **options)
      extend options[:build_params_with] || Grape.config.param_builder
      super(env)
    end

    def params
      @params ||= build_params
    rescue EOFError
      raise Grape::Exceptions::EmptyMessageBody.new(content_type)
    end

    def headers
      @headers ||= build_headers
    end

    private

    def grape_routing_args
      args = env[Grape::Env::GRAPE_ROUTING_ARGS].dup
      # preserve version from query string parameters
      args.delete(:version)
      args.delete(:route_info)
      args
    end

    def build_headers
      Grape::Util::LazyObject.new do
        env.each_pair.with_object({}) do |(k, v), headers|
          next unless k.to_s.start_with? HTTP_PREFIX

          transformed_header = Grape::Http::Headers::HTTP_HEADERS[k] || transform_header(k)
          headers[transformed_header] = v
        end
      end
    end

    def transform_header(header)
      -header[5..-1].split('_').each(&:capitalize!).join('-')
    end
  end
end