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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 303eecc7d766a080ffccb1d9b199d0728d0416600f54904f3d257e3fc2bf5c17
4
- data.tar.gz: 52e4e42cfc9b83b491555126af7b0984579e738ba40ba280ac20f255054859ca
3
+ metadata.gz: 57425690652a5ffb8ee07849e313b01b14935419f6426772533d393feb69f476
4
+ data.tar.gz: 3c3ba85a77a936e8340c34dd485ddcf8c03c4c0caf5eef25ea680cedea35e817
5
5
  SHA512:
6
- metadata.gz: 94a7305b7e768b706d5cb6bcf09d650a3b529e5a2719d60aa2d1da9a193b083309136a6f0dfe405a6ada3b8c9f910d87a1853dbd01f369acba096284083b946e
7
- data.tar.gz: 4c4f7e0a0586ec45d6d1bf26cf5583b04dddc386418da4a15f862f013fb599a6464617741345c49485ee72af628887a27c6079f03dd867c0e9d323d085fb9db7
6
+ metadata.gz: ae8b6a79d31ec201e87802161b2f3a42ac8fbff62c17b80a3025d2c1c937a5d099cc53932428cb5a52a1da8e9aee26b4212f6d13c128f830c8ad0cc6ec536e62
7
+ data.tar.gz: c4a55014ffe5b8e477c343a95b59a92c2a8fb170b4296efa96a6f32021b936915fc1724a88af0c8d473799960e602e6fa11dcae2f3e309b7f3a20207af3a87b1
data/Cargo.lock CHANGED
@@ -67,7 +67,7 @@ checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
67
67
 
68
68
  [[package]]
69
69
  name = "app_bridge"
70
- version = "0.8.4"
70
+ version = "1.0.0"
71
71
  dependencies = [
72
72
  "magnus",
73
73
  "reqwest",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "app_bridge"
3
- version = "0.8.4"
3
+ version = "1.0.0"
4
4
  edition = "2021"
5
5
  authors = ["Alexander Ross <ross@standout.se>"]
6
6
  publish = false
@@ -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.define_method("fetch_events", method!(MutRApp::rb_fetch_events, 1))?;
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 return within 30 seconds
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppBridge
4
- VERSION = "0.8.4"
4
+ VERSION = "1.0.0"
5
5
  end
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.8.4
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-02-28 00:00:00.000000000 Z
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