redmineup 1.1.11 → 1.1.12
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/app/assets/javascripts/consumer_worker.js +28 -8
- data/doc/CHANGELOG +5 -0
- data/lib/redmineup/helpers/test_helper.rb +12 -0
- data/lib/redmineup/version.rb +1 -1
- data/lib/redmineup.rb +1 -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: 16f1cce1801a74eabcd8a01b4c1039f3bec3a1e4ced0911a75f1f01b2294a7ec
|
|
4
|
+
data.tar.gz: 9d8172c485f65ca0c76fa2af110e2b326ed9282b5655d00ed8532cf69e75a0d8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 46644a7392b9f57a5343499c03d7bc5a1c87a76793b09c5c6bde68c79f007bd7a65228fa5bf67cc2cf1ddccb9232c83b1dc0038195ee1bc810597dba3b2fb83e
|
|
7
|
+
data.tar.gz: 49f143063899297dfed5ea555c2fc38d3d22b534ec3ec63013784f802571ccd10c511d0b24790f68a4456ef8fa15b6d174381bea2a33059704f89236caf1c286
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
const connections = new Map();
|
|
2
2
|
const MAX_PENDING_ACK = 3;
|
|
3
|
+
const RETRY_BASE_DELAY = 5000;
|
|
4
|
+
const RETRY_MAX_DELAY = 320000;
|
|
3
5
|
|
|
4
6
|
self.onconnect = function (event) {
|
|
5
7
|
const clientPort = event.ports[0];
|
|
@@ -114,26 +116,41 @@ function sendSubscribe(socket, identifier) {
|
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
function initSocketStruct() {
|
|
117
|
-
return { socket: null, clients: new Map() };
|
|
119
|
+
return { socket: null, clients: new Map(), retryDelay: RETRY_BASE_DELAY };
|
|
118
120
|
}
|
|
119
121
|
|
|
120
122
|
function initWebSocket(url) {
|
|
121
123
|
const conn = connections.get(url);
|
|
122
124
|
if (!conn) return;
|
|
123
125
|
|
|
124
|
-
conn.socket
|
|
126
|
+
if (conn.socket) {
|
|
127
|
+
try {
|
|
128
|
+
conn.socket.onopen =
|
|
129
|
+
conn.socket.onmessage =
|
|
130
|
+
conn.socket.onclose =
|
|
131
|
+
conn.socket.onerror =
|
|
132
|
+
null;
|
|
133
|
+
conn.socket.close();
|
|
134
|
+
} catch (e) {}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const socket = new WebSocket(url);
|
|
138
|
+
conn.socket = socket;
|
|
125
139
|
|
|
126
140
|
conn.socket.onopen = function () {
|
|
141
|
+
if (conn.socket !== socket) return;
|
|
142
|
+
conn.retryDelay = RETRY_BASE_DELAY;
|
|
127
143
|
const seen = new Set();
|
|
128
144
|
for (const { channelIdentifier } of conn.clients.values()) {
|
|
129
145
|
if (!seen.has(channelIdentifier)) {
|
|
130
146
|
seen.add(channelIdentifier);
|
|
131
|
-
sendSubscribe(
|
|
147
|
+
sendSubscribe(socket, channelIdentifier);
|
|
132
148
|
}
|
|
133
149
|
}
|
|
134
150
|
};
|
|
135
151
|
|
|
136
152
|
conn.socket.onmessage = function (event) {
|
|
153
|
+
if (conn.socket !== socket) return;
|
|
137
154
|
const messageData = (event.data && JSON.parse(event.data)) || {};
|
|
138
155
|
|
|
139
156
|
if (messageData.type === "confirm_subscription") {
|
|
@@ -154,15 +171,18 @@ function initWebSocket(url) {
|
|
|
154
171
|
});
|
|
155
172
|
};
|
|
156
173
|
|
|
157
|
-
|
|
174
|
+
socket.onclose = function () {
|
|
175
|
+
if (conn.socket !== socket) return;
|
|
158
176
|
broadcastTo(conn, { type: "disconnected" });
|
|
177
|
+
const delay = conn.retryDelay;
|
|
178
|
+
conn.retryDelay = Math.min(conn.retryDelay * 2, RETRY_MAX_DELAY);
|
|
159
179
|
setTimeout(function () {
|
|
160
|
-
if (connections.has(url)) initWebSocket(url);
|
|
161
|
-
},
|
|
180
|
+
if (connections.has(url) && conn.socket === socket) initWebSocket(url);
|
|
181
|
+
}, delay);
|
|
162
182
|
};
|
|
163
183
|
|
|
164
|
-
|
|
165
|
-
|
|
184
|
+
socket.onerror = function (error) {
|
|
185
|
+
socket.close();
|
|
166
186
|
};
|
|
167
187
|
}
|
|
168
188
|
|
data/doc/CHANGELOG
CHANGED
|
@@ -4,6 +4,11 @@ Redmine UP gem - general functions for plugins (tags, vote, viewing, currency)
|
|
|
4
4
|
Copyright (C) 2011-2026 Kirill Bezrukov (RedmineUP)
|
|
5
5
|
https://www.redmineup.com/
|
|
6
6
|
|
|
7
|
+
== 2026-07-23 v1.1.12
|
|
8
|
+
|
|
9
|
+
* Fixed race condition and added exponential backoff to shared worker websocket reconnect logic
|
|
10
|
+
* Added `Redmineup::TestHelper#load_plugin_fixtures` for loading plugin test fixtures
|
|
11
|
+
|
|
7
12
|
== 2026-06-26 v1.1.11
|
|
8
13
|
|
|
9
14
|
* Added shared workers for websocket connection
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Redmineup
|
|
2
|
+
module TestHelper
|
|
3
|
+
module ClassMethods
|
|
4
|
+
def load_plugin_fixtures(plugin_name, *names)
|
|
5
|
+
fixtures_dir = File.join(Redmine::Plugin.find(plugin_name).directory, 'test', 'fixtures')
|
|
6
|
+
ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, names)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
ActiveSupport::TestCase.extend Redmineup::TestHelper::ClassMethods
|
data/lib/redmineup/version.rb
CHANGED
data/lib/redmineup.rb
CHANGED
|
@@ -45,6 +45,7 @@ require 'redmineup/helpers/external_assets_helper'
|
|
|
45
45
|
require 'redmineup/helpers/form_tag_helper'
|
|
46
46
|
require 'redmineup/helpers/calendars_helper'
|
|
47
47
|
require 'redmineup/helpers/datetime_helper'
|
|
48
|
+
require 'redmineup/helpers/test_helper'
|
|
48
49
|
require 'redmineup/assets_manager'
|
|
49
50
|
|
|
50
51
|
require 'redmineup/patches/liquid_patch'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: redmineup
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.12
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- RedmineUP
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-07-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -174,6 +174,7 @@ files:
|
|
|
174
174
|
- lib/redmineup/helpers/external_assets_helper.rb
|
|
175
175
|
- lib/redmineup/helpers/form_tag_helper.rb
|
|
176
176
|
- lib/redmineup/helpers/tags_helper.rb
|
|
177
|
+
- lib/redmineup/helpers/test_helper.rb
|
|
177
178
|
- lib/redmineup/helpers/vote_helper.rb
|
|
178
179
|
- lib/redmineup/hooks/views_layouts_hook.rb
|
|
179
180
|
- lib/redmineup/liquid/drops/attachment_drop.rb
|