lennarb 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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