loco-rails 4.1.1 → 5.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 +4 -4
- data/app/channels/loco/notification_center_channel.rb +17 -41
- data/app/controllers/loco/notification_center_controller.rb +6 -31
- data/app/jobs/loco/sender_job.rb +1 -1
- data/app/models/loco/notification.rb +31 -30
- data/app/services/loco/notification/fetcher.rb +12 -25
- data/lib/generators/loco/file_injector/templates/connection.rb +1 -0
- data/lib/loco-rails.rb +4 -1
- data/lib/loco/broadcaster.rb +34 -82
- data/lib/loco/emitter.rb +11 -6
- data/lib/loco/hub.rb +33 -40
- data/lib/loco/permissions_presenter.rb +27 -0
- data/lib/loco/sender.rb +42 -25
- data/lib/loco/version.rb +1 -1
- data/lib/loco/ws_connection_checker.rb +16 -0
- data/lib/loco/ws_connection_finder.rb +30 -0
- data/lib/loco/ws_connection_identifier.rb +15 -0
- data/lib/loco/ws_connection_manager.rb +20 -74
- data/lib/loco/ws_connection_storage.rb +57 -17
- metadata +52 -42
- data/app/jobs/loco/uuid_job.rb +0 -51
- data/lib/loco/ws_connected_resources_manager.rb +0 -64
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loco-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zbigniew Humeniuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: loco-rails-core
|
@@ -44,76 +44,70 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.1.
|
47
|
+
version: 3.1.16
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.1.
|
54
|
+
version: 3.1.16
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: capybara
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
61
|
+
version: 3.33.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
68
|
+
version: 3.33.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: database_cleaner
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
75
|
+
version: 1.8.5
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
82
|
+
version: 1.8.5
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: jbuilder
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 2.10.
|
89
|
+
version: 2.10.1
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 2.10.
|
96
|
+
version: 2.10.1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: listen
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 3.1.5
|
104
|
-
- - "<"
|
101
|
+
- - "~>"
|
105
102
|
- !ruby/object:Gem::Version
|
106
|
-
version:
|
103
|
+
version: 3.2.1
|
107
104
|
type: :development
|
108
105
|
prerelease: false
|
109
106
|
version_requirements: !ruby/object:Gem::Requirement
|
110
107
|
requirements:
|
111
|
-
- - "
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: 3.1.5
|
114
|
-
- - "<"
|
108
|
+
- - "~>"
|
115
109
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
110
|
+
version: 3.2.1
|
117
111
|
- !ruby/object:Gem::Dependency
|
118
112
|
name: mysql2
|
119
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,28 +128,56 @@ dependencies:
|
|
134
128
|
requirements:
|
135
129
|
- - "~>"
|
136
130
|
- !ruby/object:Gem::Version
|
137
|
-
version:
|
131
|
+
version: 4.3.6
|
138
132
|
type: :development
|
139
133
|
prerelease: false
|
140
134
|
version_requirements: !ruby/object:Gem::Requirement
|
141
135
|
requirements:
|
142
136
|
- - "~>"
|
143
137
|
- !ruby/object:Gem::Version
|
144
|
-
version:
|
138
|
+
version: 4.3.6
|
145
139
|
- !ruby/object:Gem::Dependency
|
146
140
|
name: redis
|
147
141
|
requirement: !ruby/object:Gem::Requirement
|
148
142
|
requirements:
|
149
143
|
- - "~>"
|
150
144
|
- !ruby/object:Gem::Version
|
151
|
-
version: 4.
|
145
|
+
version: 4.2.2
|
152
146
|
type: :development
|
153
147
|
prerelease: false
|
154
148
|
version_requirements: !ruby/object:Gem::Requirement
|
155
149
|
requirements:
|
156
150
|
- - "~>"
|
157
151
|
- !ruby/object:Gem::Version
|
158
|
-
version: 4.
|
152
|
+
version: 4.2.2
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rspec-expectations
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 3.9.2
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 3.9.2
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rspec-mocks
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 3.9.1
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 3.9.1
|
159
181
|
- !ruby/object:Gem::Dependency
|
160
182
|
name: rubocop
|
161
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,34 +220,20 @@ dependencies:
|
|
198
220
|
- - "~>"
|
199
221
|
- !ruby/object:Gem::Version
|
200
222
|
version: '3.142'
|
201
|
-
- !ruby/object:Gem::Dependency
|
202
|
-
name: source_maps_fixer
|
203
|
-
requirement: !ruby/object:Gem::Requirement
|
204
|
-
requirements:
|
205
|
-
- - ">="
|
206
|
-
- !ruby/object:Gem::Version
|
207
|
-
version: '0'
|
208
|
-
type: :development
|
209
|
-
prerelease: false
|
210
|
-
version_requirements: !ruby/object:Gem::Requirement
|
211
|
-
requirements:
|
212
|
-
- - ">="
|
213
|
-
- !ruby/object:Gem::Version
|
214
|
-
version: '0'
|
215
223
|
- !ruby/object:Gem::Dependency
|
216
224
|
name: will_paginate
|
217
225
|
requirement: !ruby/object:Gem::Requirement
|
218
226
|
requirements:
|
219
227
|
- - "~>"
|
220
228
|
- !ruby/object:Gem::Version
|
221
|
-
version: 3.
|
229
|
+
version: 3.3.0
|
222
230
|
type: :development
|
223
231
|
prerelease: false
|
224
232
|
version_requirements: !ruby/object:Gem::Requirement
|
225
233
|
requirements:
|
226
234
|
- - "~>"
|
227
235
|
- !ruby/object:Gem::Version
|
228
|
-
version: 3.
|
236
|
+
version: 3.3.0
|
229
237
|
description: Rails is awesome, but modern web needs Loco-motive.
|
230
238
|
email:
|
231
239
|
- hello@artofcode.co
|
@@ -239,7 +247,6 @@ files:
|
|
239
247
|
- app/controllers/loco/application_controller.rb
|
240
248
|
- app/controllers/loco/notification_center_controller.rb
|
241
249
|
- app/jobs/loco/sender_job.rb
|
242
|
-
- app/jobs/loco/uuid_job.rb
|
243
250
|
- app/models/loco/notification.rb
|
244
251
|
- app/services/loco/notification/fetcher.rb
|
245
252
|
- config/routes.rb
|
@@ -263,9 +270,12 @@ files:
|
|
263
270
|
- lib/loco/engine.rb
|
264
271
|
- lib/loco/helpers.rb
|
265
272
|
- lib/loco/hub.rb
|
273
|
+
- lib/loco/permissions_presenter.rb
|
266
274
|
- lib/loco/sender.rb
|
267
275
|
- lib/loco/version.rb
|
268
|
-
- lib/loco/
|
276
|
+
- lib/loco/ws_connection_checker.rb
|
277
|
+
- lib/loco/ws_connection_finder.rb
|
278
|
+
- lib/loco/ws_connection_identifier.rb
|
269
279
|
- lib/loco/ws_connection_manager.rb
|
270
280
|
- lib/loco/ws_connection_storage.rb
|
271
281
|
homepage: http://locoframework.org
|
data/app/jobs/loco/uuid_job.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Loco
|
4
|
-
class UuidJob < ActiveJob::Base
|
5
|
-
queue_as :loco
|
6
|
-
|
7
|
-
def perform(serialized_resource, uuid, action)
|
8
|
-
ws_conn_manager = init_ws_conn_manager serialized_resource
|
9
|
-
return unless ws_conn_manager
|
10
|
-
|
11
|
-
case action
|
12
|
-
when 'add'
|
13
|
-
add ws_conn_manager, uuid
|
14
|
-
when 'del'
|
15
|
-
del ws_conn_manager, uuid
|
16
|
-
when 'update'
|
17
|
-
update ws_conn_manager, uuid
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
protected
|
22
|
-
|
23
|
-
def add(ws_conn_manager, uuid)
|
24
|
-
ws_conn_manager.add uuid
|
25
|
-
WsConnectedResourcesManager.add ws_conn_manager.identifier
|
26
|
-
end
|
27
|
-
|
28
|
-
def del(ws_conn_manager, uuid)
|
29
|
-
ws_conn_manager.del uuid
|
30
|
-
return if ws_conn_manager.connected_uuids.any?
|
31
|
-
|
32
|
-
WsConnectedResourcesManager.del ws_conn_manager.identifier
|
33
|
-
end
|
34
|
-
|
35
|
-
def update(ws_conn_manager, uuid)
|
36
|
-
ws_conn_manager.update uuid
|
37
|
-
WsConnectedResourcesManager.add ws_conn_manager.identifier
|
38
|
-
end
|
39
|
-
|
40
|
-
def deserialize_resource(hash)
|
41
|
-
hash['class'].constantize.find_by id: hash['id']
|
42
|
-
end
|
43
|
-
|
44
|
-
def init_ws_conn_manager(serialized_resource)
|
45
|
-
resource = deserialize_resource serialized_resource
|
46
|
-
return unless resource
|
47
|
-
|
48
|
-
WsConnectionManager.new resource
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Loco
|
4
|
-
class WsConnectedResourcesManager
|
5
|
-
def initialize(resources)
|
6
|
-
@resources = resources
|
7
|
-
@connected_resources = nil
|
8
|
-
end
|
9
|
-
|
10
|
-
class << self
|
11
|
-
def identifiers
|
12
|
-
val = WsConnectionStorage.current.get key
|
13
|
-
return [] if val.blank?
|
14
|
-
|
15
|
-
JSON.parse val
|
16
|
-
end
|
17
|
-
|
18
|
-
def add(identifier)
|
19
|
-
ids = identifiers
|
20
|
-
return if ids.include? identifier
|
21
|
-
|
22
|
-
ids << identifier
|
23
|
-
WsConnectionStorage.current.set key, ids.to_json
|
24
|
-
end
|
25
|
-
|
26
|
-
def del(identifier)
|
27
|
-
ids = identifiers
|
28
|
-
return unless ids.include? identifier
|
29
|
-
|
30
|
-
ids.delete identifier
|
31
|
-
WsConnectionStorage.current.set key, ids.to_json
|
32
|
-
end
|
33
|
-
|
34
|
-
def key
|
35
|
-
'loco:conn_ids'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def connected_resources
|
40
|
-
return @connected_resources if @connected_resources
|
41
|
-
|
42
|
-
@resources.each do |resource|
|
43
|
-
next if WsConnectionManager.new(resource).connected_uuids.empty?
|
44
|
-
|
45
|
-
add resource
|
46
|
-
end
|
47
|
-
@connected_resources || []
|
48
|
-
end
|
49
|
-
|
50
|
-
def connected?(resource)
|
51
|
-
connected_resources.map do |res|
|
52
|
-
WsConnectionManager.new(res).identifier
|
53
|
-
end.include? WsConnectionManager.new(resource).identifier
|
54
|
-
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def add(resource)
|
59
|
-
@connected_resources ||= []
|
60
|
-
@connected_resources << resource
|
61
|
-
@connected_resources.uniq!
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|