spikard 0.3.4 → 0.3.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.
- 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 +366 -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 +68 -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
- metadata +1 -79
- data/vendor/spikard-core/Cargo.toml +0 -40
- data/vendor/spikard-core/src/bindings/mod.rs +0 -3
- data/vendor/spikard-core/src/bindings/response.rs +0 -133
- data/vendor/spikard-core/src/debug.rs +0 -63
- data/vendor/spikard-core/src/di/container.rs +0 -726
- data/vendor/spikard-core/src/di/dependency.rs +0 -273
- data/vendor/spikard-core/src/di/error.rs +0 -118
- data/vendor/spikard-core/src/di/factory.rs +0 -538
- data/vendor/spikard-core/src/di/graph.rs +0 -545
- data/vendor/spikard-core/src/di/mod.rs +0 -192
- data/vendor/spikard-core/src/di/resolved.rs +0 -411
- data/vendor/spikard-core/src/di/value.rs +0 -283
- data/vendor/spikard-core/src/http.rs +0 -153
- data/vendor/spikard-core/src/lib.rs +0 -28
- data/vendor/spikard-core/src/lifecycle.rs +0 -422
- data/vendor/spikard-core/src/parameters.rs +0 -719
- data/vendor/spikard-core/src/problem.rs +0 -310
- data/vendor/spikard-core/src/request_data.rs +0 -189
- data/vendor/spikard-core/src/router.rs +0 -249
- data/vendor/spikard-core/src/schema_registry.rs +0 -183
- data/vendor/spikard-core/src/type_hints.rs +0 -304
- data/vendor/spikard-core/src/validation.rs +0 -699
- data/vendor/spikard-http/Cargo.toml +0 -58
- data/vendor/spikard-http/src/auth.rs +0 -247
- data/vendor/spikard-http/src/background.rs +0 -249
- data/vendor/spikard-http/src/bindings/mod.rs +0 -3
- data/vendor/spikard-http/src/bindings/response.rs +0 -1
- data/vendor/spikard-http/src/body_metadata.rs +0 -8
- data/vendor/spikard-http/src/cors.rs +0 -490
- data/vendor/spikard-http/src/debug.rs +0 -63
- data/vendor/spikard-http/src/di_handler.rs +0 -423
- data/vendor/spikard-http/src/handler_response.rs +0 -190
- data/vendor/spikard-http/src/handler_trait.rs +0 -228
- data/vendor/spikard-http/src/handler_trait_tests.rs +0 -284
- data/vendor/spikard-http/src/lib.rs +0 -529
- data/vendor/spikard-http/src/lifecycle/adapter.rs +0 -149
- data/vendor/spikard-http/src/lifecycle.rs +0 -428
- data/vendor/spikard-http/src/middleware/mod.rs +0 -285
- data/vendor/spikard-http/src/middleware/multipart.rs +0 -86
- data/vendor/spikard-http/src/middleware/urlencoded.rs +0 -147
- data/vendor/spikard-http/src/middleware/validation.rs +0 -287
- data/vendor/spikard-http/src/openapi/mod.rs +0 -309
- data/vendor/spikard-http/src/openapi/parameter_extraction.rs +0 -190
- data/vendor/spikard-http/src/openapi/schema_conversion.rs +0 -308
- data/vendor/spikard-http/src/openapi/spec_generation.rs +0 -195
- data/vendor/spikard-http/src/parameters.rs +0 -1
- data/vendor/spikard-http/src/problem.rs +0 -1
- data/vendor/spikard-http/src/query_parser.rs +0 -369
- data/vendor/spikard-http/src/response.rs +0 -399
- data/vendor/spikard-http/src/router.rs +0 -1
- data/vendor/spikard-http/src/schema_registry.rs +0 -1
- data/vendor/spikard-http/src/server/handler.rs +0 -80
- data/vendor/spikard-http/src/server/lifecycle_execution.rs +0 -98
- data/vendor/spikard-http/src/server/mod.rs +0 -805
- data/vendor/spikard-http/src/server/request_extraction.rs +0 -119
- data/vendor/spikard-http/src/sse.rs +0 -447
- data/vendor/spikard-http/src/testing/form.rs +0 -14
- data/vendor/spikard-http/src/testing/multipart.rs +0 -60
- data/vendor/spikard-http/src/testing/test_client.rs +0 -285
- data/vendor/spikard-http/src/testing.rs +0 -377
- data/vendor/spikard-http/src/type_hints.rs +0 -1
- data/vendor/spikard-http/src/validation.rs +0 -1
- data/vendor/spikard-http/src/websocket.rs +0 -324
- data/vendor/spikard-rb/Cargo.toml +0 -42
- data/vendor/spikard-rb/build.rs +0 -8
- data/vendor/spikard-rb/src/background.rs +0 -63
- data/vendor/spikard-rb/src/config.rs +0 -294
- data/vendor/spikard-rb/src/conversion.rs +0 -392
- data/vendor/spikard-rb/src/di.rs +0 -409
- data/vendor/spikard-rb/src/handler.rs +0 -534
- data/vendor/spikard-rb/src/lib.rs +0 -2020
- data/vendor/spikard-rb/src/lifecycle.rs +0 -267
- data/vendor/spikard-rb/src/server.rs +0 -283
- data/vendor/spikard-rb/src/sse.rs +0 -231
- data/vendor/spikard-rb/src/test_client.rs +0 -404
- data/vendor/spikard-rb/src/test_sse.rs +0 -143
- data/vendor/spikard-rb/src/test_websocket.rs +0 -221
- data/vendor/spikard-rb/src/websocket.rs +0 -233
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
name = "spikard-rb"
|
|
3
|
-
version = "0.3.
|
|
4
|
-
edition = "2024"
|
|
5
|
-
authors = ["Na'aman Hirschfeld <nhirschfeld@gmail.com>"]
|
|
6
|
-
license = "MIT"
|
|
7
|
-
repository = "https://github.com/Goldziher/spikard"
|
|
8
|
-
homepage = "https://github.com/Goldziher/spikard"
|
|
9
|
-
description = "High-performance Ruby bindings for Spikard HTTP framework via Magnus"
|
|
10
|
-
keywords = ["ruby", "bindings", "magnus", "http", "framework"]
|
|
11
|
-
categories = ["api-bindings", "web-programming::http-server"]
|
|
12
|
-
documentation = "https://docs.rs/spikard-rb"
|
|
13
|
-
readme = "README.md"
|
|
14
|
-
|
|
15
|
-
[lib]
|
|
16
|
-
name = "spikard_rb_core"
|
|
17
|
-
crate-type = ["cdylib", "rlib"]
|
|
18
|
-
|
|
19
|
-
[dependencies]
|
|
20
|
-
magnus = { git = "https://github.com/matsadler/magnus", rev = "f6db11769efb517427bf7f121f9c32e18b059b38", features = ["rb-sys"] }
|
|
21
|
-
serde = { version = "1.0", features = ["derive"] }
|
|
22
|
-
serde_json = "1.0"
|
|
23
|
-
spikard-core = { path = "../spikard-core", features = ["di"] }
|
|
24
|
-
spikard-http = { path = "../spikard-http", features = ["di"] }
|
|
25
|
-
axum = "0.8"
|
|
26
|
-
axum-test = "18"
|
|
27
|
-
bytes = "1.11"
|
|
28
|
-
cookie = "0.18"
|
|
29
|
-
tokio = { version = "1", features = ["full"] }
|
|
30
|
-
tracing = "0.1"
|
|
31
|
-
serde_qs = "0.15"
|
|
32
|
-
urlencoding = "2.1"
|
|
33
|
-
once_cell = "1.21"
|
|
34
|
-
async-stream = "0.3"
|
|
35
|
-
http = "1.4"
|
|
36
|
-
|
|
37
|
-
[features]
|
|
38
|
-
default = ["di"]
|
|
39
|
-
di = ["spikard-core/di", "spikard-http/di"]
|
|
40
|
-
|
|
41
|
-
[build-dependencies]
|
|
42
|
-
rb-sys-build = "0.9"
|
|
1
|
+
[package]
|
|
2
|
+
name = "spikard-rb"
|
|
3
|
+
version = "0.3.6"
|
|
4
|
+
edition = "2024"
|
|
5
|
+
authors = ["Na'aman Hirschfeld <nhirschfeld@gmail.com>"]
|
|
6
|
+
license = "MIT"
|
|
7
|
+
repository = "https://github.com/Goldziher/spikard"
|
|
8
|
+
homepage = "https://github.com/Goldziher/spikard"
|
|
9
|
+
description = "High-performance Ruby bindings for Spikard HTTP framework via Magnus"
|
|
10
|
+
keywords = ["ruby", "bindings", "magnus", "http", "framework"]
|
|
11
|
+
categories = ["api-bindings", "web-programming::http-server"]
|
|
12
|
+
documentation = "https://docs.rs/spikard-rb"
|
|
13
|
+
readme = "README.md"
|
|
14
|
+
|
|
15
|
+
[lib]
|
|
16
|
+
name = "spikard_rb_core"
|
|
17
|
+
crate-type = ["cdylib", "rlib"]
|
|
18
|
+
|
|
19
|
+
[dependencies]
|
|
20
|
+
magnus = { git = "https://github.com/matsadler/magnus", rev = "f6db11769efb517427bf7f121f9c32e18b059b38", features = ["rb-sys"] }
|
|
21
|
+
serde = { version = "1.0", features = ["derive"] }
|
|
22
|
+
serde_json = "1.0"
|
|
23
|
+
spikard-core = { path = "../spikard-core", features = ["di"] }
|
|
24
|
+
spikard-http = { path = "../spikard-http", features = ["di"] }
|
|
25
|
+
axum = "0.8"
|
|
26
|
+
axum-test = "18"
|
|
27
|
+
bytes = "1.11"
|
|
28
|
+
cookie = "0.18"
|
|
29
|
+
tokio = { version = "1", features = ["full"] }
|
|
30
|
+
tracing = "0.1"
|
|
31
|
+
serde_qs = "0.15"
|
|
32
|
+
urlencoding = "2.1"
|
|
33
|
+
once_cell = "1.21"
|
|
34
|
+
async-stream = "0.3"
|
|
35
|
+
http = "1.4"
|
|
36
|
+
|
|
37
|
+
[features]
|
|
38
|
+
default = ["di"]
|
|
39
|
+
di = ["spikard-core/di", "spikard-http/di"]
|
|
40
|
+
|
|
41
|
+
[build-dependencies]
|
|
42
|
+
rb-sys-build = "0.9"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
use rb_sys_build::RbConfig;
|
|
2
|
-
|
|
3
|
-
fn main() {
|
|
4
|
-
let mut rbconfig = RbConfig::current();
|
|
5
|
-
rbconfig.link_ruby(false);
|
|
6
|
-
rbconfig.print_cargo_args();
|
|
7
|
-
println!("cargo:rerun-if-changed=build.rs");
|
|
8
|
-
}
|
|
1
|
+
use rb_sys_build::RbConfig;
|
|
2
|
+
|
|
3
|
+
fn main() {
|
|
4
|
+
let mut rbconfig = RbConfig::current();
|
|
5
|
+
rbconfig.link_ruby(false);
|
|
6
|
+
rbconfig.print_cargo_args();
|
|
7
|
+
println!("cargo:rerun-if-changed=build.rs");
|
|
8
|
+
}
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
use magnus::prelude::*;
|
|
2
|
-
use magnus::value::{InnerValue, Opaque};
|
|
3
|
-
use magnus::{Error, Ruby, Value};
|
|
4
|
-
use once_cell::sync::Lazy;
|
|
5
|
-
use spikard_http::{BackgroundHandle, BackgroundJobError, BackgroundJobMetadata};
|
|
6
|
-
use std::sync::{Arc, RwLock};
|
|
7
|
-
|
|
8
|
-
static BACKGROUND_HANDLE: Lazy<RwLock<Option<BackgroundHandle>>> = Lazy::new(|| RwLock::new(None));
|
|
9
|
-
|
|
10
|
-
pub fn install_handle(handle: BackgroundHandle) {
|
|
11
|
-
match BACKGROUND_HANDLE.write() {
|
|
12
|
-
Ok(mut guard) => *guard = Some(handle),
|
|
13
|
-
Err(_) => eprintln!("warning: background handle lock poisoned, continuing"),
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
pub fn clear_handle() {
|
|
18
|
-
match BACKGROUND_HANDLE.write() {
|
|
19
|
-
Ok(mut guard) => *guard = None,
|
|
20
|
-
Err(_) => eprintln!("warning: background handle lock poisoned, continuing"),
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
pub fn background_run(ruby: &Ruby, block: Value) -> Result<(), Error> {
|
|
25
|
-
let call_sym = ruby.intern("call");
|
|
26
|
-
if !block.respond_to(call_sym, false)? {
|
|
27
|
-
return Err(Error::new(
|
|
28
|
-
ruby.exception_type_error(),
|
|
29
|
-
"background.run expects a callable block",
|
|
30
|
-
));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
let handle = BACKGROUND_HANDLE
|
|
34
|
-
.read()
|
|
35
|
-
.map_err(|_| Error::new(ruby.exception_runtime_error(), "background handle lock poisoned"))?
|
|
36
|
-
.clone()
|
|
37
|
-
.ok_or_else(|| Error::new(ruby.exception_runtime_error(), "background runtime not initialized"))?;
|
|
38
|
-
|
|
39
|
-
let proc_value = Arc::new(Opaque::from(block));
|
|
40
|
-
|
|
41
|
-
handle
|
|
42
|
-
.spawn_with_metadata(
|
|
43
|
-
async move {
|
|
44
|
-
let proc_clone = proc_value.clone();
|
|
45
|
-
tokio::task::spawn_blocking(move || -> Result<(), BackgroundJobError> {
|
|
46
|
-
let ruby = Ruby::get().map_err(|e| BackgroundJobError::from(e.to_string()))?;
|
|
47
|
-
let callable = proc_clone.get_inner_with(&ruby);
|
|
48
|
-
callable
|
|
49
|
-
.funcall::<_, _, Value>("call", ())
|
|
50
|
-
.map(|_| ())
|
|
51
|
-
.map_err(|err| BackgroundJobError::from(format_ruby_error(err)))
|
|
52
|
-
})
|
|
53
|
-
.await
|
|
54
|
-
.map_err(|e| BackgroundJobError::from(e.to_string()))?
|
|
55
|
-
},
|
|
56
|
-
BackgroundJobMetadata::default(),
|
|
57
|
-
)
|
|
58
|
-
.map_err(|err| Error::new(ruby.exception_runtime_error(), err.to_string()))
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
fn format_ruby_error(err: Error) -> String {
|
|
62
|
-
err.to_string()
|
|
63
|
-
}
|
|
1
|
+
use magnus::prelude::*;
|
|
2
|
+
use magnus::value::{InnerValue, Opaque};
|
|
3
|
+
use magnus::{Error, Ruby, Value};
|
|
4
|
+
use once_cell::sync::Lazy;
|
|
5
|
+
use spikard_http::{BackgroundHandle, BackgroundJobError, BackgroundJobMetadata};
|
|
6
|
+
use std::sync::{Arc, RwLock};
|
|
7
|
+
|
|
8
|
+
static BACKGROUND_HANDLE: Lazy<RwLock<Option<BackgroundHandle>>> = Lazy::new(|| RwLock::new(None));
|
|
9
|
+
|
|
10
|
+
pub fn install_handle(handle: BackgroundHandle) {
|
|
11
|
+
match BACKGROUND_HANDLE.write() {
|
|
12
|
+
Ok(mut guard) => *guard = Some(handle),
|
|
13
|
+
Err(_) => eprintln!("warning: background handle lock poisoned, continuing"),
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
pub fn clear_handle() {
|
|
18
|
+
match BACKGROUND_HANDLE.write() {
|
|
19
|
+
Ok(mut guard) => *guard = None,
|
|
20
|
+
Err(_) => eprintln!("warning: background handle lock poisoned, continuing"),
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
pub fn background_run(ruby: &Ruby, block: Value) -> Result<(), Error> {
|
|
25
|
+
let call_sym = ruby.intern("call");
|
|
26
|
+
if !block.respond_to(call_sym, false)? {
|
|
27
|
+
return Err(Error::new(
|
|
28
|
+
ruby.exception_type_error(),
|
|
29
|
+
"background.run expects a callable block",
|
|
30
|
+
));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let handle = BACKGROUND_HANDLE
|
|
34
|
+
.read()
|
|
35
|
+
.map_err(|_| Error::new(ruby.exception_runtime_error(), "background handle lock poisoned"))?
|
|
36
|
+
.clone()
|
|
37
|
+
.ok_or_else(|| Error::new(ruby.exception_runtime_error(), "background runtime not initialized"))?;
|
|
38
|
+
|
|
39
|
+
let proc_value = Arc::new(Opaque::from(block));
|
|
40
|
+
|
|
41
|
+
handle
|
|
42
|
+
.spawn_with_metadata(
|
|
43
|
+
async move {
|
|
44
|
+
let proc_clone = proc_value.clone();
|
|
45
|
+
tokio::task::spawn_blocking(move || -> Result<(), BackgroundJobError> {
|
|
46
|
+
let ruby = Ruby::get().map_err(|e| BackgroundJobError::from(e.to_string()))?;
|
|
47
|
+
let callable = proc_clone.get_inner_with(&ruby);
|
|
48
|
+
callable
|
|
49
|
+
.funcall::<_, _, Value>("call", ())
|
|
50
|
+
.map(|_| ())
|
|
51
|
+
.map_err(|err| BackgroundJobError::from(format_ruby_error(err)))
|
|
52
|
+
})
|
|
53
|
+
.await
|
|
54
|
+
.map_err(|e| BackgroundJobError::from(e.to_string()))?
|
|
55
|
+
},
|
|
56
|
+
BackgroundJobMetadata::default(),
|
|
57
|
+
)
|
|
58
|
+
.map_err(|err| Error::new(ruby.exception_runtime_error(), err.to_string()))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
fn format_ruby_error(err: Error) -> String {
|
|
62
|
+
err.to_string()
|
|
63
|
+
}
|