app_bridge 0.8.4 → 1.0.0
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/Cargo.lock +1 -1
- data/ext/app_bridge/Cargo.toml +1 -1
- data/ext/app_bridge/src/lib.rs +2 -1
- data/ext/app_bridge/wit/world.wit +3 -2
- data/lib/app_bridge/app.rb +41 -0
- data/lib/app_bridge/version.rb +1 -1
- data/lib/app_bridge.rb +5 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57425690652a5ffb8ee07849e313b01b14935419f6426772533d393feb69f476
|
4
|
+
data.tar.gz: 3c3ba85a77a936e8340c34dd485ddcf8c03c4c0caf5eef25ea680cedea35e817
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae8b6a79d31ec201e87802161b2f3a42ac8fbff62c17b80a3025d2c1c937a5d099cc53932428cb5a52a1da8e9aee26b4212f6d13c128f830c8ad0cc6ec536e62
|
7
|
+
data.tar.gz: c4a55014ffe5b8e477c343a95b59a92c2a8fb170b4296efa96a6f32021b936915fc1724a88af0c8d473799960e602e6fa11dcae2f3e309b7f3a20207af3a87b1
|
data/Cargo.lock
CHANGED
data/ext/app_bridge/Cargo.toml
CHANGED
data/ext/app_bridge/src/lib.rs
CHANGED
@@ -301,7 +301,8 @@ fn init(ruby: &Ruby) -> Result<(), Error> {
|
|
301
301
|
app_class.define_alloc_func::<MutRApp>();
|
302
302
|
app_class.define_method("initialize", method!(MutRApp::initialize, 1))?;
|
303
303
|
app_class.define_method("triggers", method!(MutRApp::triggers, 0))?;
|
304
|
-
app_class.
|
304
|
+
app_class.define_private_method("_rust_fetch_events", method!(MutRApp::rb_fetch_events, 1))?;
|
305
|
+
|
305
306
|
|
306
307
|
Ok(())
|
307
308
|
}
|
@@ -81,8 +81,9 @@ interface triggers {
|
|
81
81
|
// Fetch events
|
82
82
|
//
|
83
83
|
// There are some limitations to the function:
|
84
|
-
// - It must
|
85
|
-
// - It must return less than or equal to 100 events
|
84
|
+
// - It must a `trigger-response` within 30 seconds
|
85
|
+
// - It must return less than or equal to 100 `trigger-response.events`
|
86
|
+
// - It must not return more than 64 kB of data in the `trigger-response.store`
|
86
87
|
//
|
87
88
|
// If you need to fetch more events, you can return up to 100 events and then
|
88
89
|
// store the data needed for you to remember where you left off in the store.
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "timeout"
|
4
|
+
|
5
|
+
module AppBridge
|
6
|
+
# An app that can be used to fetch events.
|
7
|
+
class App
|
8
|
+
def fetch_events(context)
|
9
|
+
response = request_events_with_timeout(context)
|
10
|
+
|
11
|
+
validate_number_of_events!(response.events)
|
12
|
+
validate_store_size!(response.store)
|
13
|
+
|
14
|
+
response
|
15
|
+
end
|
16
|
+
|
17
|
+
def polling_timeout
|
18
|
+
30 # seconds
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def validate_number_of_events!(events)
|
24
|
+
return if events.size <= 100
|
25
|
+
|
26
|
+
raise TooManyEventsError, "Maximum 100 events allowed"
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_store_size!(store)
|
30
|
+
return if store.size <= 64 * 1024
|
31
|
+
|
32
|
+
raise StoreTooLargeError, "Store size exceeds 64 kB limit"
|
33
|
+
end
|
34
|
+
|
35
|
+
def request_events_with_timeout(context)
|
36
|
+
Timeout.timeout(polling_timeout, TimeoutError, "Polling exceeded #{polling_timeout} seconds") do
|
37
|
+
_rust_fetch_events(context)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/app_bridge/version.rb
CHANGED
data/lib/app_bridge.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "app_bridge/version"
|
4
|
+
require_relative "app_bridge/app"
|
5
|
+
|
4
6
|
begin
|
5
7
|
require "app_bridge/#{RUBY_VERSION.split(".").first(2).join(".")}/app_bridge"
|
6
8
|
rescue LoadError
|
@@ -9,6 +11,9 @@ end
|
|
9
11
|
|
10
12
|
module AppBridge
|
11
13
|
class Error < StandardError; end
|
14
|
+
class TimeoutError < Error; end
|
15
|
+
class TooManyEventsError < Error; end
|
16
|
+
class StoreTooLargeError < Error; end
|
12
17
|
|
13
18
|
# Represents a trigger event that is recieved from the app.
|
14
19
|
class TriggerEvent
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app_bridge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Ross
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rb_sys
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- ext/app_bridge/src/request_builder.rs
|
50
50
|
- ext/app_bridge/wit/world.wit
|
51
51
|
- lib/app_bridge.rb
|
52
|
+
- lib/app_bridge/app.rb
|
52
53
|
- lib/app_bridge/version.rb
|
53
54
|
- sig/app_bridge.rbs
|
54
55
|
- tasks/fixtures.rake
|