terminalwire-rails 0.3.4 → 0.3.5.alpha1
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/lib/terminalwire/rails.rb +75 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d90959e1a40056af30dc79f607892c5d8d0a83fe53d85aa4ae3eb3287fe95024
|
4
|
+
data.tar.gz: 4b9027cebbb44ddde23bf53a52cb83dc16663f436714df55b9240dbf15614950
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eccbe784b7025be7dadaab1be611e311cdfe30c59ce4464fdca0155e822f6b10d12fe4247a28d72d21b2195d1a6ab73ddf2e7220ae1263e15a44555f62e09ec7
|
7
|
+
data.tar.gz: 2e111bdda7a9c31b1f84738a624e81cb425fab9bad6f7916e15aa85aa2ea8d7eb5a94d34d884f112cf995357490c47c173751e24d1154c0d9f086be194be3842
|
data/lib/terminalwire/rails.rb
CHANGED
@@ -5,6 +5,81 @@ require "jwt"
|
|
5
5
|
|
6
6
|
module Terminalwire
|
7
7
|
module Rails
|
8
|
+
class Channel
|
9
|
+
# Prefix used to for channel name to avoid conflicts.
|
10
|
+
NAMESPACE = "terminalwire".freeze
|
11
|
+
|
12
|
+
# Length of random channel name.
|
13
|
+
RANDOM_NAME_LENGTH = 32
|
14
|
+
|
15
|
+
# 5 minutes, which is really way too much time.
|
16
|
+
TIMEOUT_SECONDS = 5 * 60
|
17
|
+
|
18
|
+
attr_reader :name, :server, :logger, :timeout
|
19
|
+
|
20
|
+
def initialize(name: self.class.random_name, server: self.class.server, logger: self.class.logger, timeout: TIMEOUT_SECONDS)
|
21
|
+
@server = server
|
22
|
+
@name = name
|
23
|
+
@queue = Queue.new
|
24
|
+
@logger = logger
|
25
|
+
@timeout = timeout
|
26
|
+
|
27
|
+
yield self if block_given?
|
28
|
+
end
|
29
|
+
|
30
|
+
def broadcast(message)
|
31
|
+
@logger.info "ActiveExchange: Publishing #{message.inspect} to #{@name.inspect}"
|
32
|
+
@server.broadcast(@name, message)
|
33
|
+
end
|
34
|
+
alias :publish :broadcast
|
35
|
+
|
36
|
+
def subscribe
|
37
|
+
return if @queue.closed?
|
38
|
+
@logger.info "ActiveExchange: Subscribed to #{@name.inspect}"
|
39
|
+
@server.subscribe(@name, -> (message) { @queue << message })
|
40
|
+
end
|
41
|
+
|
42
|
+
def read
|
43
|
+
Timeout::timeout @timeout do
|
44
|
+
subscribe
|
45
|
+
@logger.debug "Queue: waiting"
|
46
|
+
@queue.pop
|
47
|
+
end
|
48
|
+
ensure
|
49
|
+
@logger.debug "Queue: closed"
|
50
|
+
@queue.close
|
51
|
+
end
|
52
|
+
alias :pop :read
|
53
|
+
|
54
|
+
def to_param
|
55
|
+
self.class.verifier.generate(@name, expires_in: @timeout)
|
56
|
+
end
|
57
|
+
|
58
|
+
class << self
|
59
|
+
def server
|
60
|
+
ActionCable.server.pubsub
|
61
|
+
end
|
62
|
+
|
63
|
+
def logger
|
64
|
+
::Rails.logger
|
65
|
+
end
|
66
|
+
|
67
|
+
def random_name
|
68
|
+
[NAMESPACE, SecureRandom.hex(RANDOM_NAME_LENGTH)].join(":")
|
69
|
+
end
|
70
|
+
|
71
|
+
# Use Rails' secret_key_base for signing
|
72
|
+
def verifier
|
73
|
+
@verifier ||= ActiveSupport::MessageVerifier.new(::Rails.application.secret_key_base)
|
74
|
+
end
|
75
|
+
|
76
|
+
def from_param(...)
|
77
|
+
new name: verifier.verify(...)
|
78
|
+
end
|
79
|
+
alias :find :from_param
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
8
83
|
class Session
|
9
84
|
# JWT file name for the session file.
|
10
85
|
FILENAME = "session.jwt"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terminalwire-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brad Gessler
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-03-19 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: terminalwire-server
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - '='
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.3.
|
18
|
+
version: 0.3.5.alpha1
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - '='
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: 0.3.
|
25
|
+
version: 0.3.5.alpha1
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rails
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|