live 0.10.0 → 0.12.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: e77327d7651ba96f1312740085897ec0f53430957dacb2d99782d895bf663afc
4
- data.tar.gz: 4436c155cd68f013986e86da07af57af4238522fc18e8d9161720abe0d47d5ae
3
+ metadata.gz: b389272cf70f88ade8e987e6df962c0e73761d738d7fc15e29134a6d3677f072
4
+ data.tar.gz: adebf021e1a94bed6fd09a4c90364f3176873fcbfb0b691005262a7095768927
5
5
  SHA512:
6
- metadata.gz: 3a8160a7a68a5cc3ca5d4a00c350cd3147ba583f839fe395f73c1956ae918b2b00b3316067c633a434cc4e13472588caf2ffe4ec5f5d2ba39dd70bdbf8adbf0f
7
- data.tar.gz: 0b623c52f0408c34eb09d16c5f3b25a609537fa55cb1771c92fa8092ab33baa31c8aeb3596150c014824a8a605b52c7b0630c5b2d80fea94e595d5d7935e53fd
6
+ metadata.gz: 8f36c200788c094e7662f14dad854db15b5bfe2e04c96e4bf546e2821be91eef549eb574a872476db632e2a6d00cbbe3e3670954756d5b801364d06cfa627809
7
+ data.tar.gz: ac325892c144ae36d6417990f76271016782cb196a8cbb7d59645a14a4868804bdd2f61a813de2cff14a8053912115bb1e64961a0ea937023a7ea0ff04d6848e
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/live/element.rb CHANGED
@@ -7,6 +7,9 @@ require 'json'
7
7
  require 'securerandom'
8
8
 
9
9
  module Live
10
+ class PageError < RuntimeError
11
+ end
12
+
10
13
  # Represents a single dynamic content area on the page.
11
14
  class Element
12
15
  def self.unique_id
@@ -66,8 +69,13 @@ module Live
66
69
  # @parameter method [Symbol] The name of the remote functio to invoke.
67
70
  # @parameter arguments [Array]
68
71
  def rpc(*arguments)
69
- # This update might not be sent right away. Therefore, mutable arguments may be serialized to JSON at a later time (or never). This could be a race condition:
70
- @page.updates.enqueue(arguments)
72
+ if @page
73
+ # This update might not be sent right away. Therefore, mutable arguments may be serialized to JSON at a later time (or never). This could be a race condition:
74
+ @page.updates.enqueue(arguments)
75
+ else
76
+ # This is a programming error, as it probably means the element is still part of the logic of the server side (e.g. async loop), but it is not bound to a page, so there is nothing to update/access/rpc.
77
+ raise PageError, "Element is not bound to a page, make sure to implement #close!"
78
+ end
71
79
  end
72
80
  end
73
81
  end
data/lib/live/page.rb CHANGED
@@ -9,7 +9,8 @@ require_relative 'resolver'
9
9
  require 'async'
10
10
  require 'async/queue'
11
11
 
12
- require 'protocol/websocket/json_message'
12
+ require 'protocol/websocket'
13
+ require 'protocol/websocket/message'
13
14
 
14
15
  module Live
15
16
  # Represents a connected client page with bound dynamic content areas.
@@ -91,27 +92,23 @@ module Live
91
92
  # Run the event handling loop with the given websocket connection.
92
93
  # @parameter connection [Async::WebSocket::Connection]
93
94
  def run(connection)
94
- queue_task = Async do
95
- while update = @updates.dequeue
96
- Console.debug(self, "Sending update:", update)
97
-
98
- connection.write(::Protocol::WebSocket::JSONMessage.generate(update))
99
- connection.flush if @updates.empty?
95
+ Sync do |task|
96
+ queue_task = task.async do
97
+ while update = @updates.dequeue
98
+ Console.debug(self, "Sending update:", update)
99
+ ::Protocol::WebSocket::TextMessage.generate(update).send(connection)
100
+ connection.flush if @updates.empty?
101
+ end
100
102
  end
101
- end
102
-
103
- while message = connection.read
104
- Console.debug(self, "Reading message:", message)
105
103
 
106
- if json_message = ::Protocol::WebSocket::JSONMessage.wrap(message)
107
- process_message(json_message.parse)
108
- else
109
- Console.warn(self, "Unhandled message:", message)
104
+ while message = connection.read
105
+ Console.debug(self, "Reading message:", message)
106
+ process_message(message.parse)
110
107
  end
108
+ ensure
109
+ self.close
110
+ queue_task&.stop
111
111
  end
112
- ensure
113
- self.close
114
- queue_task&.stop
115
112
  end
116
113
  end
117
- end
114
+ end
data/lib/live/version.rb CHANGED
@@ -4,5 +4,5 @@
4
4
  # Copyright, 2021-2024, by Samuel Williams.
5
5
 
6
6
  module Live
7
- VERSION = "0.10.0"
7
+ VERSION = "0.12.0"
8
8
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: live
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -38,7 +38,7 @@ cert_chain:
38
38
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
39
39
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
40
40
  -----END CERTIFICATE-----
41
- date: 2024-05-12 00:00:00.000000000 Z
41
+ date: 2024-07-03 00:00:00.000000000 Z
42
42
  dependencies:
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: async-websocket
@@ -46,14 +46,14 @@ dependencies:
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '0.23'
49
+ version: '0.27'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '0.23'
56
+ version: '0.27'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: xrb
59
59
  requirement: !ruby/object:Gem::Requirement
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
- rubygems_version: 3.5.3
106
+ rubygems_version: 3.5.11
107
107
  signing_key:
108
108
  specification_version: 4
109
109
  summary: Live HTML tags updated via a WebSocket.
metadata.gz.sig CHANGED
Binary file