lennarb 0.1.5 → 0.1.7

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,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