debounced 0.1.2 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 659b59a2fe36931a2aeaa3d21a5548f2397bca71576425d66ac9e351e1779da1
4
- data.tar.gz: 56bcb79639135528a40a6d1d4472638cf0e497305f6dc5a6c7cfe4fe2edcac0c
3
+ metadata.gz: a0ca3c65791fc6ed5dcb22b1e966061aa0e80a290a9edf3121fe8229441ebe29
4
+ data.tar.gz: d2e14d5f93526625d4b748f9498d2419c9fb8e7f759a9381c0c4ab47024242c2
5
5
  SHA512:
6
- metadata.gz: c016272e442e37e0ff15fdcee33bcbfc59dde0c33eb09919a8f88fb0df09ce9f189788033c148d367914539a29de664ed0060156c6cc09dab098a1272e49ec1d
7
- data.tar.gz: 25d53b0ad3e0a7a5f162161af101f5561d20107865f7630cc5f2ea6ff549bfb21b44f15e9cc2d35ccf1dd8d04261333a9da0f59848e7dbb7a648dbefa2f81885
6
+ metadata.gz: 00c4d1ddfe2d3ecb0c03d742b63d7e38cce7a95c70f1d723e112b497cf16941f0178f3bc3c434e97dde88d66337db03ace5a5add86d7252e28875d1c22ef9fdb
7
+ data.tar.gz: 37619a355bed3d94ad841f718d09ed7ea73981a9f4c31bed5c332a8afcfa251099421247b4a4d0620ad4bd519de829ba23040d2ada4ee263d8070033eccd92e4
data/README.md CHANGED
@@ -61,17 +61,17 @@ Or in your application code:
61
61
  require 'debounced'
62
62
 
63
63
  # Start the listener thread
64
- proxy = Debounced::EventServiceProxy.new
64
+ proxy = Debounced::ServiceProxy.new
65
65
  listener_thread = proxy.listen
66
66
 
67
67
  # Debounce an event
68
68
  class MyEvent
69
69
  attr_reader :attributes
70
-
70
+
71
71
  def initialize(data)
72
72
  @attributes = data
73
73
  end
74
-
74
+
75
75
  def self.publish(data)
76
76
  # Publish logic here
77
77
  puts "Publishing event with data: #{data.inspect}"
data/exe/debounced-server CHANGED
@@ -1,11 +1,5 @@
1
1
  #!/usr/bin/env node
2
-
3
- import { fileURLToPath } from 'url';
4
- import { dirname, join } from 'path';
5
- import DebounceEventService from '../lib/assets/javascript/debounced/event_service.mjs';
6
-
7
- const __filename = fileURLToPath(import.meta.url);
8
- const __dirname = dirname(__filename);
2
+ import DebounceService from '../lib/assets/javascript/debounce_service.mjs';
9
3
 
10
4
  // Default socket path
11
5
  let socketDescriptor = process.env.DEBOUNCED_SOCKET || '/tmp/app.debounceEvents';
@@ -20,4 +14,4 @@ if (process.argv.length > 2) {
20
14
  socketDescriptor = process.argv[2];
21
15
  }
22
16
 
23
- new DebounceEventService(socketDescriptor).listen();
17
+ new DebounceService(socketDescriptor).listen();
@@ -3,7 +3,7 @@ import fs from 'fs';
3
3
 
4
4
  const logLevel = process.env.LOG_LEVEL || 'info';
5
5
 
6
- export default class DebounceEventService {
6
+ export default class DebounceService {
7
7
  constructor(socketDescriptor) {
8
8
  this._socketDescriptor = socketDescriptor;
9
9
  this._timers = {};
@@ -37,7 +37,7 @@ export default class DebounceEventService {
37
37
  }
38
38
 
39
39
  listen() {
40
- console.log('DebounceEventService listening on', this._socketDescriptor);
40
+ console.log('DebounceService listening on', this._socketDescriptor);
41
41
  ipc.server.start();
42
42
  }
43
43
 
@@ -0,0 +1,23 @@
1
+ module Debounced
2
+ ###
3
+ # Allow an abort signal to be passed to blocking call for graceful shutdown.
4
+ #
5
+ # Inspired by the AbortController in the DOM, but made for Ruby
6
+ # @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
7
+ #
8
+ # For notes about thread safety of this approach,
9
+ # @see https://stackoverflow.com/questions/9620886/is-it-safe-to-set-the-boolean-value-in-thread-from-another-one
10
+ class AbortSignal
11
+ def initialize
12
+ @abort = false
13
+ end
14
+
15
+ def abort
16
+ @abort = true
17
+ end
18
+
19
+ def set?
20
+ @abort
21
+ end
22
+ end
23
+ end
@@ -2,9 +2,12 @@ require 'socket'
2
2
  require 'active_support/json'
3
3
 
4
4
  module Debounced
5
- class EventServiceProxy
5
+ class ServiceProxy
6
6
  DELIMITER = "\f".freeze
7
- WAIT_TIMEOUT = 3
7
+
8
+ def initialize
9
+ @wait_timeout = Debounced.configuration.wait_timeout
10
+ end
8
11
 
9
12
  def listen(abort_signal = nil)
10
13
  Thread.new do
@@ -45,7 +48,7 @@ module Debounced
45
48
 
46
49
  if socket.nil?
47
50
  log_debug("Waiting for #{server_name}...")
48
- sleep(WAIT_TIMEOUT)
51
+ sleep(@wait_timeout)
49
52
  next
50
53
  end
51
54
 
@@ -131,13 +134,13 @@ module Debounced
131
134
  end
132
135
 
133
136
  def socket_descriptor
134
- Debounced.configuration.socket_descriptor
137
+ @socket_descriptor ||= Debounced.configuration.socket_descriptor
135
138
  end
136
139
 
137
140
  def socket
138
141
  @socket ||= UNIXSocket.new(socket_descriptor)
139
142
  .tap do |socket|
140
- socket.timeout = WAIT_TIMEOUT
143
+ socket.timeout = @wait_timeout
141
144
  end
142
145
  ###
143
146
  # Errno::ENOENT is raised if the socket file does not exist.
@@ -1,3 +1,3 @@
1
1
  module Debounced
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/debounced.rb CHANGED
@@ -15,10 +15,11 @@ module Debounced
15
15
  end
16
16
 
17
17
  class Configuration
18
- attr_accessor :socket_descriptor
18
+ attr_accessor :socket_descriptor, :wait_timeout
19
19
 
20
20
  def initialize
21
21
  @socket_descriptor = ENV['DEBOUNCED_SOCKET'] || '/tmp/app.debounceEvents'
22
+ @wait_timeout = ENV['DEBOUNCED_TIMEOUT']&.to_i || 3
22
23
  end
23
24
  end
24
25
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debounced
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gary Passero
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-16 00:00:00.000000000 Z
10
+ date: 2025-03-17 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rails
@@ -97,10 +97,11 @@ files:
97
97
  - CHANGELOG.md
98
98
  - README.md
99
99
  - exe/debounced-server
100
- - lib/assets/javascript/debounced/event_service.mjs
100
+ - lib/assets/javascript/debounce_service.mjs
101
101
  - lib/debounced.rb
102
- - lib/debounced/event_service_proxy.rb
102
+ - lib/debounced/abort_signal.rb
103
103
  - lib/debounced/railtie.rb
104
+ - lib/debounced/service_proxy.rb
104
105
  - lib/debounced/version.rb
105
106
  homepage: https://github.com/flytedesk/debounced
106
107
  licenses: