rack-http_router 0.0.33 → 0.0.34
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.
- checksums.yaml +4 -4
- data/lib/rack-http_router/action.rb +5 -5
- data/lib/rack-http_router/router/build_request.rb +12 -10
- data/lib/rack-http_router/router/route.rb +4 -2
- data/lib/rack-http_router/router.rb +29 -12
- data/lib/rack-http_router.rb +2 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 540161f25e3b163ac4fa031715aeb5fa88d08d18fa4e2064f531929a1cc5a71a
|
4
|
+
data.tar.gz: 4902e738c689c9e83d4fc8147da221187e86318a699545c6f81052d6d267d93a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a28d4e0c6173d667f69c11d48472e9c2766398aae894757fc2d8a87b3f3026d4c502c2a2a9d7582659fef5e7f8e31c1a0fe10af3f341b291757e8b2624cf87af
|
7
|
+
data.tar.gz: fe5f4cc387c3296b98ba1ec1e832cd8c8bed3ef44a64d25e772dedc5ec3095122f109b0233d1e65477692881e8a0fbfa75f937198812c57a81eee151999f9df0
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'erubi'
|
4
|
-
require '
|
4
|
+
require 'oj'
|
5
5
|
require 'rack'
|
6
6
|
|
7
7
|
module Rack
|
@@ -122,9 +122,9 @@ module Rack
|
|
122
122
|
response_instance: false
|
123
123
|
)
|
124
124
|
erb = if paths.is_a?(Array)
|
125
|
-
paths.map { |path| erb("views/#{path}", config, route, db, view_params) }.join
|
125
|
+
paths.map { |path| erb("#{config.dig(:views, :path) || "views"}/#{path}", config, route, db, view_params) }.join
|
126
126
|
else
|
127
|
-
erb("views/#{paths}", config, route, db, view_params)
|
127
|
+
erb("#{config.dig(:views, :path) || "views"}/#{paths}", config, route, db, view_params)
|
128
128
|
end
|
129
129
|
|
130
130
|
if response_instance
|
@@ -139,12 +139,12 @@ module Rack
|
|
139
139
|
end
|
140
140
|
|
141
141
|
def json(content = {}, status: 200)
|
142
|
-
[status, { 'Content-Type' => 'application/json' }, [content
|
142
|
+
[status, { 'Content-Type' => 'application/json' }, [Oj.dump(content, mode: :compat)]]
|
143
143
|
end
|
144
144
|
|
145
145
|
def json_response(content = {}, status: 200)
|
146
146
|
Rack::Response.new(
|
147
|
-
content
|
147
|
+
Oj.dump(content, mode: :compat),
|
148
148
|
status,
|
149
149
|
{ 'Content-Type' => 'application/json' }
|
150
150
|
)
|
@@ -22,18 +22,20 @@ module Rack
|
|
22
22
|
def update_request_params(request, route)
|
23
23
|
splitted_request_path = request.path.split('/')
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
25
|
+
i = 0
|
26
|
+
|
27
|
+
while i < route.splitted_path.size
|
28
|
+
route_word = route.splitted_path[i]
|
29
|
+
if route_word.start_with?(':')
|
30
|
+
param = splitted_request_path[i]
|
31
|
+
param = param.to_i if is_a_integer_string?(param)
|
32
|
+
|
33
|
+
update_request_param(request, route_word, param)
|
35
34
|
end
|
36
35
|
|
36
|
+
i += 1
|
37
|
+
end
|
38
|
+
|
37
39
|
request
|
38
40
|
end
|
39
41
|
|
@@ -4,14 +4,16 @@ module Rack
|
|
4
4
|
class HttpRouter
|
5
5
|
class Router
|
6
6
|
class Route
|
7
|
-
attr_reader :endpoint, :splitted_path, :has_params
|
7
|
+
attr_reader :endpoint, :splitted_path, :has_params, :has_befores, :befores
|
8
8
|
|
9
|
-
def initialize(path, endpoint)
|
9
|
+
def initialize(path, endpoint, befores = [])
|
10
10
|
@path = path
|
11
11
|
@splitted_path = @path.split('/')
|
12
12
|
@endpoint = endpoint
|
13
13
|
@params = fetch_params
|
14
14
|
@has_params = @params != []
|
15
|
+
@befores = befores
|
16
|
+
@has_befores = befores != []
|
15
17
|
end
|
16
18
|
|
17
19
|
def match?(env)
|
@@ -20,6 +20,8 @@ module Rack
|
|
20
20
|
end
|
21
21
|
@config = config
|
22
22
|
@scopes = []
|
23
|
+
@befores = []
|
24
|
+
@scopes_befores = {}
|
23
25
|
@error = proc { |_req, e| raise e }
|
24
26
|
@not_found = proc { [404, {}, ['Not found']] }
|
25
27
|
end
|
@@ -32,29 +34,40 @@ module Rack
|
|
32
34
|
|
33
35
|
return render_not_found(request_builder.call) if route_instance.nil?
|
34
36
|
|
35
|
-
|
36
|
-
return route_instance.endpoint.call(
|
37
|
-
request_builder.call(route_instance)
|
38
|
-
)
|
39
|
-
end
|
37
|
+
rack_request = request_builder.call(route_instance)
|
40
38
|
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
befores = route_instance.befores
|
40
|
+
before_result = nil
|
41
|
+
i = 0
|
42
|
+
while i < befores.size
|
43
|
+
before_result = call_endpoint(befores[i], rack_request)
|
44
|
+
return before_result unless before_result.is_a?(Rack::Request)
|
45
|
+
|
46
|
+
i += 1
|
44
47
|
end
|
45
48
|
|
46
|
-
route_instance.endpoint
|
49
|
+
call_endpoint(route_instance.endpoint, before_result || rack_request)
|
47
50
|
rescue Exception => e
|
48
51
|
@error.call(request_builder.call, e)
|
49
52
|
end
|
50
53
|
|
54
|
+
def call_endpoint(endpoint, rack_request)
|
55
|
+
return endpoint.call(rack_request) if endpoint.respond_to?(:call)
|
56
|
+
|
57
|
+
if endpoint.include?(Rack::HttpRouter::Action)
|
58
|
+
return endpoint.new(route: @route, config: @config).call(rack_request)
|
59
|
+
end
|
60
|
+
|
61
|
+
endpoint.new.call(rack_request)
|
62
|
+
end
|
63
|
+
|
51
64
|
def add(method, path, endpoint, as = nil)
|
52
65
|
method = :get if method == :head
|
53
66
|
|
54
67
|
path_with_scopes = "/#{@scopes.join('/')}#{put_path_slash(path)}"
|
55
68
|
@route[as] = path_with_scopes if as
|
56
69
|
|
57
|
-
route_instance = Route.new(path_with_scopes, endpoint)
|
70
|
+
route_instance = Route.new(path_with_scopes, endpoint, @befores)
|
58
71
|
|
59
72
|
if @scopes.size >= 1
|
60
73
|
return push_to_scope(method.to_s.upcase, route_instance)
|
@@ -71,11 +84,15 @@ module Rack
|
|
71
84
|
@error = endpoint
|
72
85
|
end
|
73
86
|
|
74
|
-
def append_scope(name)
|
87
|
+
def append_scope(name, befores = [])
|
75
88
|
@scopes.push(name)
|
89
|
+
befores = [befores] unless befores.is_a?(Array)
|
90
|
+
@befores.concat(befores)
|
91
|
+
@scopes_befores[name] = befores
|
76
92
|
end
|
77
93
|
|
78
94
|
def clear_last_scope
|
95
|
+
@befores -= @scopes_befores[@scopes.last]
|
79
96
|
@scopes = @scopes.first(@scopes.size - 1)
|
80
97
|
end
|
81
98
|
|
@@ -133,7 +150,7 @@ module Rack
|
|
133
150
|
return @routes[env['REQUEST_METHOD']].dig(
|
134
151
|
*(found_scopes << :__instances)
|
135
152
|
)
|
136
|
-
|
153
|
+
&.detect { |route_instance| route_instance.match?(env) }
|
137
154
|
end
|
138
155
|
|
139
156
|
match_route(env, tail, found_scopes)
|
data/lib/rack-http_router.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-http_router
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.34
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrique F. Teixeira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-07-
|
11
|
+
date: 2023-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erubi
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.12'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: oj
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.15'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.15'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rack
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|