lennarb 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,117 +1,141 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Released under the MIT License.
4
+ # Copyright, 2023, by Aristóteles Coutinho.
5
+
3
6
  module Lenna
4
- class Router
5
- # The Request class is responsible for managing the request.
6
- #
7
- # @attr headers [Hash] the request headers
8
- # @attr body [Hash] the request body
9
- # @attr params [Hash] the request params
10
- class Request < ::Rack::Request
7
+ class Router
8
+ # The Request class is responsible for managing the request.
9
+ #
10
+ # @attr headers [Hash] the request headers
11
+ # @attr body [Hash] the request body
12
+ # @attr params [Hash] the request params
13
+ #
14
+ # @public `Since v0.1.0`
15
+ #
16
+ class Request < ::Rack::Request
17
+ # This method is used to set the request headers.
18
+ #
19
+ # @parameter name [String] the header name
20
+ # @parameter value [String] the header value
21
+ #
22
+ # @return [String] the header value
23
+ #
24
+ # @public
25
+ #
26
+ # ex.
27
+ # request.put_header('Foo', 'bar')
28
+ #
29
+ # request.headers
30
+ # # => { 'Foo' => 'bar' }
31
+ #
32
+ def put_header(name, value) = headers[name] = value
11
33
 
12
- # This method is used to set the request params.
13
- #
14
- # @param params [Hash] the request params
15
- #
16
- # @return [Hash] the request params
17
- #
18
- # @api public
19
- def assign_params(params) = @params = params
34
+ # This method is used to set the request params.
35
+ #
36
+ # @parameter params [Hash] the request params
37
+ #
38
+ # @return [Hash] the request params
39
+ #
40
+ # @public
41
+ #
42
+ def assign_params(params) = @params = params
20
43
 
21
- # This method is used to parse the body params.
22
- #
23
- # @return [Hash] the request params
24
- #
25
- # @api public
26
- def params = super.merge(parse_body_params)
44
+ # This method is used to parse the body params.
45
+ #
46
+ # @return [Hash] the request params
47
+ #
48
+ # @public
49
+ #
50
+ def params = super.merge(parse_body_params)
27
51
 
28
- # This method rewinds the body
29
- #
30
- # @return [String] the request body content
31
- #
32
- # @api public
33
- #
34
- # @since 0.1.0
35
- def body_content
36
- body.rewind
37
- body.read
38
- end
52
+ # This method rewinds the body
53
+ #
54
+ # @return [String] the request body content
55
+ #
56
+ # @public
57
+ #
58
+ def body
59
+ super.rewind
60
+ super.read
61
+ end
39
62
 
40
- # This method returns the headers in a normalized way.
41
- #
42
- # @return [Hash] the request headers
43
- #
44
- # @api public
45
- #
46
- # @example:
47
- # Turn this:
48
- # HTTP_FOO=bar Foo=bar
49
- def headers
50
- content_type = env['CONTENT_TYPE']
51
- @headers ||= env.select { |k, _| k.start_with?('HTTP_') }
52
- .transform_keys { |k| format_header_name(k) }
63
+ # This method returns the headers in a normalized way.
64
+ #
65
+ # @public
66
+ #
67
+ # @return [Hash] the request headers
68
+ #
69
+ # ex.
70
+ # Turn this:
71
+ # HTTP_FOO=bar Foo=bar
72
+ #
73
+ def headers
74
+ content_type = env['CONTENT_TYPE']
75
+ @headers ||= env.select { |k, _| k.start_with?('HTTP_') }
76
+ .transform_keys { |k| format_header_name(k) }
53
77
 
54
- @headers['Content-Type'] = content_type if content_type
55
- @headers
56
- end
78
+ @headers['Content-Type'] = content_type if content_type
79
+ @headers
80
+ end
57
81
 
58
- # This method returns the request body in a normalized way.
59
- #
60
- # @return [Hash] the request body
61
- #
62
- # @api public
63
- def json_body = @json_body ||= parse_body_params
82
+ # This method returns the request body like a json.
83
+ #
84
+ # @return [Hash] the request body
85
+ #
86
+ def json_body = @json_body ||= parse_body_params
64
87
 
65
- private
88
+ private
66
89
 
67
- def json_request? = media_type == 'application/json'
90
+ # This method returns the media type.
91
+ #
92
+ # @return [String] the request media type
93
+ #
94
+ def media_type = headers['Content-Type']
68
95
 
69
- def parse_json_body
70
- @parsed_json_body ||= ::JSON.parse(body_content) if json_request?
71
- rescue ::JSON::ParserError
72
- {}
73
- end
96
+ # This method parses the json body.
97
+ #
98
+ # @return [Hash] the request json body
99
+ #
100
+ def parse_json_body
101
+ @parsed_json_body ||= ::JSON.parse(body)
102
+ rescue ::JSON::ParserError
103
+ {}
104
+ end
74
105
 
75
- # This method parses the body params.
76
- #
77
- # @return [Hash] the request body params
78
- #
79
- # @api private
80
- def parse_body_params
81
- case media_type
82
- when 'application/json'
83
- parse_json_body
84
- when 'application/x-www-form-urlencoded', 'multipart/form-data'
85
- post_params
86
- else
87
- {}
88
- end
89
- end
106
+ # This method parses the body params.
107
+ #
108
+ # @return [Hash] the request body params
109
+ #
110
+ def parse_body_params
111
+ case media_type
112
+ in 'application/json' then parse_json_body
113
+ else post_params
114
+ end
115
+ end
90
116
 
91
- # This method parses the post params.
92
- #
93
- # @return [Hash] the request post params
94
- #
95
- # @api private
96
- def post_params
97
- @post_params ||=
98
- if body_content.empty?
99
- {}
100
- else
101
- ::Rack::Utils.parse_nested_query(body_content)
102
- end
103
- end
117
+ # This method parses the post params.
118
+ #
119
+ # @return [Hash] the request post params
120
+ #
121
+ def post_params
122
+ @post_params ||=
123
+ if body.empty?
124
+ {}
125
+ else
126
+ ::Rack::Utils.parse_nested_query(body)
127
+ end
128
+ end
104
129
 
105
- # This method formats the header name.
106
- #
107
- # @param name [String] the header name
108
- #
109
- # @return [String] the formatted header name
110
- #
111
- # @api private
112
- def format_header_name(name)
113
- name.sub(/^HTTP_/, '').split('_').map(&:capitalize).join('-')
114
- end
115
- end
116
- end
130
+ # This method formats the header name.
131
+ #
132
+ # @parameter name [String] the header name
133
+ #
134
+ # @return [String] the formatted header name
135
+ #
136
+ def format_header_name(name)
137
+ name.sub(/^HTTP_/, '').split('_').map(&:capitalize).join('-')
138
+ end
139
+ end
140
+ end
117
141
  end