lennarb 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,73 +1,77 @@
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
- # This class is used to manage the namespaces.
6
- #
7
- # @api private
8
- class NamespaceStack
9
- # @return [Array] The stack of namespaces
10
- #
11
- # @api private
12
- attr_reader :stack
7
+ class Router
8
+ # This class is used to manage the namespaces.
9
+ #
10
+ # @private `Since v0.1.0`
11
+ #
12
+ class NamespaceStack
13
+ # @return [Array] The stack of namespaces
14
+ #
15
+ # @private
16
+ #
17
+ attr_reader :stack
13
18
 
14
- # @return [void]
15
- #
16
- # @api private
17
- def initialize = @stack = ['']
19
+ # The initialize method is used to initialize the stack of namespaces.
20
+ #
21
+ # @private
22
+ #
23
+ # @attibute stack [Array] The stack of namespaces
24
+ #
25
+ # @return [void]
26
+ #
27
+ def initialize = @stack = ['']
18
28
 
19
- # This method is used to push a prefix to the stack.
20
- #
21
- # @param prefix [String] The prefix to be pushed
22
- # @return [void]
23
- #
24
- # @example:
25
- #
26
- # stack = NamespaceStack.new
27
- # stack.push('/users')
28
- # stack.current_prefix # => '/users'
29
- #
30
- # @see #resolve_prefix
31
- #
32
- # @api private
33
- def push(prefix)
34
- @stack.push(resolve_prefix(prefix))
35
- end
29
+ # This method is used to push a prefix to the stack.
30
+ #
31
+ # @parameter prefix [String] The prefix to be pushed
32
+ #
33
+ # @return [void]
34
+ #
35
+ # ex.
36
+ #
37
+ # stack = NamespaceStack.new
38
+ # stack.push('/users')
39
+ # stack.current_prefix # => '/users'
40
+ #
41
+ # @see #resolve_prefix
42
+ #
43
+ def push(prefix)
44
+ @stack.push(resolve_prefix(prefix))
45
+ end
36
46
 
37
- # @return [String] The popped prefix
38
- #
39
- # @api private
40
- def pop
41
- @stack.pop unless @stack.size == 1
42
- end
47
+ # This method is used to remove the last prefix from the stack.
48
+ #
49
+ # @return [String] The popped prefix
50
+ #
51
+ def pop
52
+ @stack.pop unless @stack.size == 1
53
+ end
43
54
 
44
- # @return [String] The current prefix
45
- #
46
- # @api private
47
- #
48
- # @since 0.1.0
49
- def current_prefix = @stack.last
55
+ # @return [String] The current prefix
56
+ #
57
+ def current_prefix = @stack.last
50
58
 
51
- # The to_s method is used to return the current prefix.
52
- #
53
- # @return [String] The current prefix
54
- #
55
- # @api private
56
- def to_s = current_prefix
59
+ # The to_s method is used to return the current prefix.
60
+ #
61
+ # @return [String] The current prefix
62
+ #
63
+ def to_s = current_prefix
57
64
 
58
- private
65
+ private
59
66
 
60
- # The resolve_prefix method is used to resolve the prefix.
61
- #
62
- # @param prefix [String] The prefix to be resolved
63
- # @return [String] The resolved prefix
64
- #
65
- # @see #current_prefix
66
- #
67
- # @since 0.1.0
68
- def resolve_prefix(prefix)
69
- current_prefix + prefix
70
- end
71
- end
72
- end
67
+ # The resolve_prefix method is used to resolve the prefix.
68
+ #
69
+ # @parameter prefix [String] The prefix to be resolved
70
+ # @return [String] The resolved prefix
71
+ #
72
+ def resolve_prefix(prefix)
73
+ current_prefix + prefix
74
+ end
75
+ end
76
+ end
73
77
  end
@@ -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