spikard 0.3.2 → 0.3.4
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/LICENSE +1 -1
- data/README.md +659 -659
- data/ext/spikard_rb/Cargo.toml +17 -17
- data/ext/spikard_rb/extconf.rb +10 -10
- data/ext/spikard_rb/src/lib.rs +6 -6
- data/lib/spikard/app.rb +386 -386
- data/lib/spikard/background.rb +27 -27
- data/lib/spikard/config.rb +396 -396
- data/lib/spikard/converters.rb +13 -13
- data/lib/spikard/handler_wrapper.rb +113 -113
- data/lib/spikard/provide.rb +214 -214
- data/lib/spikard/response.rb +173 -173
- data/lib/spikard/schema.rb +243 -243
- data/lib/spikard/sse.rb +111 -111
- data/lib/spikard/streaming_response.rb +44 -44
- data/lib/spikard/testing.rb +221 -221
- data/lib/spikard/upload_file.rb +131 -131
- data/lib/spikard/version.rb +5 -5
- data/lib/spikard/websocket.rb +59 -59
- data/lib/spikard.rb +43 -43
- data/sig/spikard.rbs +360 -360
- data/vendor/crates/spikard-core/Cargo.toml +40 -40
- data/vendor/crates/spikard-core/src/bindings/mod.rs +3 -3
- data/vendor/crates/spikard-core/src/bindings/response.rs +133 -133
- data/vendor/crates/spikard-core/src/debug.rs +63 -63
- data/vendor/crates/spikard-core/src/di/container.rs +726 -726
- data/vendor/crates/spikard-core/src/di/dependency.rs +273 -273
- data/vendor/crates/spikard-core/src/di/error.rs +118 -118
- data/vendor/crates/spikard-core/src/di/factory.rs +538 -538
- data/vendor/crates/spikard-core/src/di/graph.rs +545 -545
- data/vendor/crates/spikard-core/src/di/mod.rs +192 -192
- data/vendor/crates/spikard-core/src/di/resolved.rs +411 -411
- data/vendor/crates/spikard-core/src/di/value.rs +283 -283
- data/vendor/crates/spikard-core/src/errors.rs +39 -39
- data/vendor/crates/spikard-core/src/http.rs +153 -153
- data/vendor/crates/spikard-core/src/lib.rs +29 -29
- data/vendor/crates/spikard-core/src/lifecycle.rs +422 -422
- data/vendor/crates/spikard-core/src/parameters.rs +722 -722
- data/vendor/crates/spikard-core/src/problem.rs +310 -310
- data/vendor/crates/spikard-core/src/request_data.rs +189 -189
- data/vendor/crates/spikard-core/src/router.rs +249 -249
- data/vendor/crates/spikard-core/src/schema_registry.rs +183 -183
- data/vendor/crates/spikard-core/src/type_hints.rs +304 -304
- data/vendor/crates/spikard-core/src/validation.rs +699 -699
- data/vendor/crates/spikard-http/Cargo.toml +58 -58
- data/vendor/crates/spikard-http/src/auth.rs +247 -247
- data/vendor/crates/spikard-http/src/background.rs +249 -249
- data/vendor/crates/spikard-http/src/bindings/mod.rs +3 -3
- data/vendor/crates/spikard-http/src/bindings/response.rs +1 -1
- data/vendor/crates/spikard-http/src/body_metadata.rs +8 -8
- data/vendor/crates/spikard-http/src/cors.rs +490 -490
- data/vendor/crates/spikard-http/src/debug.rs +63 -63
- data/vendor/crates/spikard-http/src/di_handler.rs +423 -423
- data/vendor/crates/spikard-http/src/handler_response.rs +190 -190
- data/vendor/crates/spikard-http/src/handler_trait.rs +228 -228
- data/vendor/crates/spikard-http/src/handler_trait_tests.rs +284 -284
- data/vendor/crates/spikard-http/src/lib.rs +529 -529
- data/vendor/crates/spikard-http/src/lifecycle/adapter.rs +149 -149
- data/vendor/crates/spikard-http/src/lifecycle.rs +428 -428
- data/vendor/crates/spikard-http/src/middleware/mod.rs +285 -285
- data/vendor/crates/spikard-http/src/middleware/multipart.rs +86 -86
- data/vendor/crates/spikard-http/src/middleware/urlencoded.rs +147 -147
- data/vendor/crates/spikard-http/src/middleware/validation.rs +287 -287
- data/vendor/crates/spikard-http/src/openapi/mod.rs +309 -309
- data/vendor/crates/spikard-http/src/openapi/parameter_extraction.rs +190 -190
- data/vendor/crates/spikard-http/src/openapi/schema_conversion.rs +308 -308
- data/vendor/crates/spikard-http/src/openapi/spec_generation.rs +195 -195
- data/vendor/crates/spikard-http/src/parameters.rs +1 -1
- data/vendor/crates/spikard-http/src/problem.rs +1 -1
- data/vendor/crates/spikard-http/src/query_parser.rs +369 -369
- data/vendor/crates/spikard-http/src/response.rs +399 -399
- data/vendor/crates/spikard-http/src/router.rs +1 -1
- data/vendor/crates/spikard-http/src/schema_registry.rs +1 -1
- data/vendor/crates/spikard-http/src/server/handler.rs +87 -87
- data/vendor/crates/spikard-http/src/server/lifecycle_execution.rs +98 -98
- data/vendor/crates/spikard-http/src/server/mod.rs +805 -805
- data/vendor/crates/spikard-http/src/server/request_extraction.rs +119 -119
- data/vendor/crates/spikard-http/src/sse.rs +447 -447
- data/vendor/crates/spikard-http/src/testing/form.rs +14 -14
- data/vendor/crates/spikard-http/src/testing/multipart.rs +60 -60
- data/vendor/crates/spikard-http/src/testing/test_client.rs +285 -285
- data/vendor/crates/spikard-http/src/testing.rs +377 -377
- data/vendor/crates/spikard-http/src/type_hints.rs +1 -1
- data/vendor/crates/spikard-http/src/validation.rs +1 -1
- data/vendor/crates/spikard-http/src/websocket.rs +324 -324
- data/vendor/crates/spikard-rb/Cargo.toml +42 -42
- data/vendor/crates/spikard-rb/build.rs +8 -8
- data/vendor/crates/spikard-rb/src/background.rs +63 -63
- data/vendor/crates/spikard-rb/src/config.rs +294 -294
- data/vendor/crates/spikard-rb/src/conversion.rs +453 -453
- data/vendor/crates/spikard-rb/src/di.rs +409 -409
- data/vendor/crates/spikard-rb/src/handler.rs +625 -625
- data/vendor/crates/spikard-rb/src/lib.rs +2771 -2771
- data/vendor/crates/spikard-rb/src/lifecycle.rs +274 -274
- data/vendor/crates/spikard-rb/src/server.rs +283 -283
- data/vendor/crates/spikard-rb/src/sse.rs +231 -231
- data/vendor/crates/spikard-rb/src/test_client.rs +404 -404
- data/vendor/crates/spikard-rb/src/test_sse.rs +143 -143
- data/vendor/crates/spikard-rb/src/test_websocket.rs +221 -221
- data/vendor/crates/spikard-rb/src/websocket.rs +233 -233
- data/vendor/spikard-core/Cargo.toml +40 -40
- data/vendor/spikard-core/src/bindings/mod.rs +3 -3
- data/vendor/spikard-core/src/bindings/response.rs +133 -133
- data/vendor/spikard-core/src/debug.rs +63 -63
- data/vendor/spikard-core/src/di/container.rs +726 -726
- data/vendor/spikard-core/src/di/dependency.rs +273 -273
- data/vendor/spikard-core/src/di/error.rs +118 -118
- data/vendor/spikard-core/src/di/factory.rs +538 -538
- data/vendor/spikard-core/src/di/graph.rs +545 -545
- data/vendor/spikard-core/src/di/mod.rs +192 -192
- data/vendor/spikard-core/src/di/resolved.rs +411 -411
- data/vendor/spikard-core/src/di/value.rs +283 -283
- data/vendor/spikard-core/src/http.rs +153 -153
- data/vendor/spikard-core/src/lib.rs +28 -28
- data/vendor/spikard-core/src/lifecycle.rs +422 -422
- data/vendor/spikard-core/src/parameters.rs +719 -719
- data/vendor/spikard-core/src/problem.rs +310 -310
- data/vendor/spikard-core/src/request_data.rs +189 -189
- data/vendor/spikard-core/src/router.rs +249 -249
- data/vendor/spikard-core/src/schema_registry.rs +183 -183
- data/vendor/spikard-core/src/type_hints.rs +304 -304
- data/vendor/spikard-core/src/validation.rs +699 -699
- data/vendor/spikard-http/Cargo.toml +58 -58
- data/vendor/spikard-http/src/auth.rs +247 -247
- data/vendor/spikard-http/src/background.rs +249 -249
- data/vendor/spikard-http/src/bindings/mod.rs +3 -3
- data/vendor/spikard-http/src/bindings/response.rs +1 -1
- data/vendor/spikard-http/src/body_metadata.rs +8 -8
- data/vendor/spikard-http/src/cors.rs +490 -490
- data/vendor/spikard-http/src/debug.rs +63 -63
- data/vendor/spikard-http/src/di_handler.rs +423 -423
- data/vendor/spikard-http/src/handler_response.rs +190 -190
- data/vendor/spikard-http/src/handler_trait.rs +228 -228
- data/vendor/spikard-http/src/handler_trait_tests.rs +284 -284
- data/vendor/spikard-http/src/lib.rs +529 -529
- data/vendor/spikard-http/src/lifecycle/adapter.rs +149 -149
- data/vendor/spikard-http/src/lifecycle.rs +428 -428
- data/vendor/spikard-http/src/middleware/mod.rs +285 -285
- data/vendor/spikard-http/src/middleware/multipart.rs +86 -86
- data/vendor/spikard-http/src/middleware/urlencoded.rs +147 -147
- data/vendor/spikard-http/src/middleware/validation.rs +287 -287
- data/vendor/spikard-http/src/openapi/mod.rs +309 -309
- data/vendor/spikard-http/src/openapi/parameter_extraction.rs +190 -190
- data/vendor/spikard-http/src/openapi/schema_conversion.rs +308 -308
- data/vendor/spikard-http/src/openapi/spec_generation.rs +195 -195
- data/vendor/spikard-http/src/parameters.rs +1 -1
- data/vendor/spikard-http/src/problem.rs +1 -1
- data/vendor/spikard-http/src/query_parser.rs +369 -369
- data/vendor/spikard-http/src/response.rs +399 -399
- data/vendor/spikard-http/src/router.rs +1 -1
- data/vendor/spikard-http/src/schema_registry.rs +1 -1
- data/vendor/spikard-http/src/server/handler.rs +80 -80
- data/vendor/spikard-http/src/server/lifecycle_execution.rs +98 -98
- data/vendor/spikard-http/src/server/mod.rs +805 -805
- data/vendor/spikard-http/src/server/request_extraction.rs +119 -119
- data/vendor/spikard-http/src/sse.rs +447 -447
- data/vendor/spikard-http/src/testing/form.rs +14 -14
- data/vendor/spikard-http/src/testing/multipart.rs +60 -60
- data/vendor/spikard-http/src/testing/test_client.rs +285 -285
- data/vendor/spikard-http/src/testing.rs +377 -377
- data/vendor/spikard-http/src/type_hints.rs +1 -1
- data/vendor/spikard-http/src/validation.rs +1 -1
- data/vendor/spikard-http/src/websocket.rs +324 -324
- data/vendor/spikard-rb/Cargo.toml +42 -42
- data/vendor/spikard-rb/build.rs +8 -8
- data/vendor/spikard-rb/src/background.rs +63 -63
- data/vendor/spikard-rb/src/config.rs +294 -294
- data/vendor/spikard-rb/src/conversion.rs +392 -392
- data/vendor/spikard-rb/src/di.rs +409 -409
- data/vendor/spikard-rb/src/handler.rs +534 -534
- data/vendor/spikard-rb/src/lib.rs +2020 -2020
- data/vendor/spikard-rb/src/lifecycle.rs +267 -267
- data/vendor/spikard-rb/src/server.rs +283 -283
- data/vendor/spikard-rb/src/sse.rs +231 -231
- data/vendor/spikard-rb/src/test_client.rs +404 -404
- data/vendor/spikard-rb/src/test_sse.rs +143 -143
- data/vendor/spikard-rb/src/test_websocket.rs +221 -221
- data/vendor/spikard-rb/src/websocket.rs +233 -233
- metadata +1 -1
data/lib/spikard/converters.rb
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Spikard
|
|
4
|
-
# Conversion helpers between native Rust values and Ruby types.
|
|
5
|
-
module Converters
|
|
6
|
-
module_function
|
|
7
|
-
|
|
8
|
-
# No-op conversion now that Rust materialises UploadFile.
|
|
9
|
-
def convert_handler_body(body)
|
|
10
|
-
body
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spikard
|
|
4
|
+
# Conversion helpers between native Rust values and Ruby types.
|
|
5
|
+
module Converters
|
|
6
|
+
module_function
|
|
7
|
+
|
|
8
|
+
# No-op conversion now that Rust materialises UploadFile.
|
|
9
|
+
def convert_handler_body(body)
|
|
10
|
+
body
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'converters'
|
|
4
|
-
|
|
5
|
-
module Spikard
|
|
6
|
-
# Handler wrapper utilities.
|
|
7
|
-
#
|
|
8
|
-
# UploadFile conversion now happens in the Rust binding, so these wrappers
|
|
9
|
-
# simply forward the already-converted body/params.
|
|
10
|
-
#
|
|
11
|
-
# @example Basic usage with body only
|
|
12
|
-
# app.post('/upload', &wrap_body_handler do |body|
|
|
13
|
-
# {
|
|
14
|
-
# filename: body[:file].filename,
|
|
15
|
-
# content: body[:file].read
|
|
16
|
-
# }
|
|
17
|
-
# end)
|
|
18
|
-
#
|
|
19
|
-
# @example With all parameters
|
|
20
|
-
# app.post('/upload', &wrap_handler do |params, query, body|
|
|
21
|
-
# {
|
|
22
|
-
# id: params[:id],
|
|
23
|
-
# search: query[:q],
|
|
24
|
-
# file: body[:file].filename
|
|
25
|
-
# }
|
|
26
|
-
# end)
|
|
27
|
-
module HandlerWrapper
|
|
28
|
-
module_function
|
|
29
|
-
|
|
30
|
-
# Wrap a handler that receives only the request body
|
|
31
|
-
#
|
|
32
|
-
# Automatically converts file metadata in the body to UploadFile instances.
|
|
33
|
-
#
|
|
34
|
-
# @yield [body] Handler block that receives converted body
|
|
35
|
-
# @yieldparam body [Hash] Request body with file metadata converted to UploadFile
|
|
36
|
-
# @yieldreturn [Hash, Spikard::Response] Response data or Response object
|
|
37
|
-
# @return [Proc] Wrapped handler proc
|
|
38
|
-
#
|
|
39
|
-
# @example
|
|
40
|
-
# app.post('/upload', &wrap_body_handler do |body|
|
|
41
|
-
# { filename: body[:file].filename }
|
|
42
|
-
# end)
|
|
43
|
-
def wrap_body_handler(&handler)
|
|
44
|
-
raise ArgumentError, 'block required for wrap_body_handler' unless handler
|
|
45
|
-
|
|
46
|
-
# Return a proc that matches the signature expected by Spikard::App
|
|
47
|
-
# The actual handler receives path params, query params, and body from Rust
|
|
48
|
-
lambda do |_params, _query, body|
|
|
49
|
-
handler.call(body)
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Wrap a handler that receives path params, query params, and body
|
|
54
|
-
#
|
|
55
|
-
# Automatically converts file metadata in the body to UploadFile instances.
|
|
56
|
-
#
|
|
57
|
-
# @yield [params, query, body] Handler block that receives all request data
|
|
58
|
-
# @yieldparam params [Hash] Path parameters
|
|
59
|
-
# @yieldparam query [Hash] Query parameters
|
|
60
|
-
# @yieldparam body [Hash] Request body with file metadata converted to UploadFile
|
|
61
|
-
# @yieldreturn [Hash, Spikard::Response] Response data or Response object
|
|
62
|
-
# @return [Proc] Wrapped handler proc
|
|
63
|
-
#
|
|
64
|
-
# @example
|
|
65
|
-
# app.post('/users/{id}/upload', &wrap_handler do |params, query, body|
|
|
66
|
-
# {
|
|
67
|
-
# user_id: params[:id],
|
|
68
|
-
# description: query[:desc],
|
|
69
|
-
# file: body[:file].filename
|
|
70
|
-
# }
|
|
71
|
-
# end)
|
|
72
|
-
def wrap_handler(&handler)
|
|
73
|
-
raise ArgumentError, 'block required for wrap_handler' unless handler
|
|
74
|
-
|
|
75
|
-
lambda do |params, query, body|
|
|
76
|
-
handler.call(params, query, body)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# Wrap a handler that receives a context hash with all request data
|
|
81
|
-
#
|
|
82
|
-
# Automatically converts file metadata in the body to UploadFile instances.
|
|
83
|
-
# Useful when you want all request data in a single hash.
|
|
84
|
-
#
|
|
85
|
-
# @yield [context] Handler block that receives context hash
|
|
86
|
-
# @yieldparam context [Hash] Request context with:
|
|
87
|
-
# - :params [Hash] Path parameters
|
|
88
|
-
# - :query [Hash] Query parameters
|
|
89
|
-
# - :body [Hash] Request body with file metadata converted to UploadFile
|
|
90
|
-
# @yieldreturn [Hash, Spikard::Response] Response data or Response object
|
|
91
|
-
# @return [Proc] Wrapped handler proc
|
|
92
|
-
#
|
|
93
|
-
# @example
|
|
94
|
-
# app.post('/upload', &wrap_handler_with_context do |ctx|
|
|
95
|
-
# {
|
|
96
|
-
# file: ctx[:body][:file].filename,
|
|
97
|
-
# query_params: ctx[:query]
|
|
98
|
-
# }
|
|
99
|
-
# end)
|
|
100
|
-
def wrap_handler_with_context(&handler)
|
|
101
|
-
raise ArgumentError, 'block required for wrap_handler_with_context' unless handler
|
|
102
|
-
|
|
103
|
-
lambda do |params, query, body|
|
|
104
|
-
context = {
|
|
105
|
-
params: params,
|
|
106
|
-
query: query,
|
|
107
|
-
body: body
|
|
108
|
-
}
|
|
109
|
-
handler.call(context)
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'converters'
|
|
4
|
+
|
|
5
|
+
module Spikard
|
|
6
|
+
# Handler wrapper utilities.
|
|
7
|
+
#
|
|
8
|
+
# UploadFile conversion now happens in the Rust binding, so these wrappers
|
|
9
|
+
# simply forward the already-converted body/params.
|
|
10
|
+
#
|
|
11
|
+
# @example Basic usage with body only
|
|
12
|
+
# app.post('/upload', &wrap_body_handler do |body|
|
|
13
|
+
# {
|
|
14
|
+
# filename: body[:file].filename,
|
|
15
|
+
# content: body[:file].read
|
|
16
|
+
# }
|
|
17
|
+
# end)
|
|
18
|
+
#
|
|
19
|
+
# @example With all parameters
|
|
20
|
+
# app.post('/upload', &wrap_handler do |params, query, body|
|
|
21
|
+
# {
|
|
22
|
+
# id: params[:id],
|
|
23
|
+
# search: query[:q],
|
|
24
|
+
# file: body[:file].filename
|
|
25
|
+
# }
|
|
26
|
+
# end)
|
|
27
|
+
module HandlerWrapper
|
|
28
|
+
module_function
|
|
29
|
+
|
|
30
|
+
# Wrap a handler that receives only the request body
|
|
31
|
+
#
|
|
32
|
+
# Automatically converts file metadata in the body to UploadFile instances.
|
|
33
|
+
#
|
|
34
|
+
# @yield [body] Handler block that receives converted body
|
|
35
|
+
# @yieldparam body [Hash] Request body with file metadata converted to UploadFile
|
|
36
|
+
# @yieldreturn [Hash, Spikard::Response] Response data or Response object
|
|
37
|
+
# @return [Proc] Wrapped handler proc
|
|
38
|
+
#
|
|
39
|
+
# @example
|
|
40
|
+
# app.post('/upload', &wrap_body_handler do |body|
|
|
41
|
+
# { filename: body[:file].filename }
|
|
42
|
+
# end)
|
|
43
|
+
def wrap_body_handler(&handler)
|
|
44
|
+
raise ArgumentError, 'block required for wrap_body_handler' unless handler
|
|
45
|
+
|
|
46
|
+
# Return a proc that matches the signature expected by Spikard::App
|
|
47
|
+
# The actual handler receives path params, query params, and body from Rust
|
|
48
|
+
lambda do |_params, _query, body|
|
|
49
|
+
handler.call(body)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Wrap a handler that receives path params, query params, and body
|
|
54
|
+
#
|
|
55
|
+
# Automatically converts file metadata in the body to UploadFile instances.
|
|
56
|
+
#
|
|
57
|
+
# @yield [params, query, body] Handler block that receives all request data
|
|
58
|
+
# @yieldparam params [Hash] Path parameters
|
|
59
|
+
# @yieldparam query [Hash] Query parameters
|
|
60
|
+
# @yieldparam body [Hash] Request body with file metadata converted to UploadFile
|
|
61
|
+
# @yieldreturn [Hash, Spikard::Response] Response data or Response object
|
|
62
|
+
# @return [Proc] Wrapped handler proc
|
|
63
|
+
#
|
|
64
|
+
# @example
|
|
65
|
+
# app.post('/users/{id}/upload', &wrap_handler do |params, query, body|
|
|
66
|
+
# {
|
|
67
|
+
# user_id: params[:id],
|
|
68
|
+
# description: query[:desc],
|
|
69
|
+
# file: body[:file].filename
|
|
70
|
+
# }
|
|
71
|
+
# end)
|
|
72
|
+
def wrap_handler(&handler)
|
|
73
|
+
raise ArgumentError, 'block required for wrap_handler' unless handler
|
|
74
|
+
|
|
75
|
+
lambda do |params, query, body|
|
|
76
|
+
handler.call(params, query, body)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Wrap a handler that receives a context hash with all request data
|
|
81
|
+
#
|
|
82
|
+
# Automatically converts file metadata in the body to UploadFile instances.
|
|
83
|
+
# Useful when you want all request data in a single hash.
|
|
84
|
+
#
|
|
85
|
+
# @yield [context] Handler block that receives context hash
|
|
86
|
+
# @yieldparam context [Hash] Request context with:
|
|
87
|
+
# - :params [Hash] Path parameters
|
|
88
|
+
# - :query [Hash] Query parameters
|
|
89
|
+
# - :body [Hash] Request body with file metadata converted to UploadFile
|
|
90
|
+
# @yieldreturn [Hash, Spikard::Response] Response data or Response object
|
|
91
|
+
# @return [Proc] Wrapped handler proc
|
|
92
|
+
#
|
|
93
|
+
# @example
|
|
94
|
+
# app.post('/upload', &wrap_handler_with_context do |ctx|
|
|
95
|
+
# {
|
|
96
|
+
# file: ctx[:body][:file].filename,
|
|
97
|
+
# query_params: ctx[:query]
|
|
98
|
+
# }
|
|
99
|
+
# end)
|
|
100
|
+
def wrap_handler_with_context(&handler)
|
|
101
|
+
raise ArgumentError, 'block required for wrap_handler_with_context' unless handler
|
|
102
|
+
|
|
103
|
+
lambda do |params, query, body|
|
|
104
|
+
context = {
|
|
105
|
+
params: params,
|
|
106
|
+
query: query,
|
|
107
|
+
body: body
|
|
108
|
+
}
|
|
109
|
+
handler.call(context)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|