deepstream 1.0.4 → 1.0.9
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/README.md +3 -0
- data/deepstream.gemspec +6 -6
- data/lib/deepstream/async_patch.rb +2 -14
- data/lib/deepstream/client.rb +4 -3
- data/lib/deepstream/exceptions.rb +1 -0
- data/lib/deepstream/helpers.rb +2 -1
- data/lib/deepstream/list.rb +50 -1
- data/lib/deepstream/record.rb +21 -2
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce0d374d6501431341af6d92bc81dac4d69625ff7f1798589d219ac8fdd1a2b9
|
4
|
+
data.tar.gz: 155d1a92062f7fdb6e1743634e1faab24bfcf9ddc4b437989068e1d8fc75c285
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd265a7de16feb50657b0d764a4105b8db11b200d558811d57a8acd0d83c619a007aa98a79246bae1bdda59e55a1bc5c65a9276901fa5751a4be22cb8de95a7f
|
7
|
+
data.tar.gz: 0a980e1dda5288e1b66655951ebd4ef02eb6dfae4496677f02ff2958a29b26b05e77ce09b4a78ac71e92933169088069fb1b601015b38fcc34f90aa588b0f168
|
data/README.md
CHANGED
data/deepstream.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "deepstream"
|
7
|
-
spec.version = "1.0.
|
7
|
+
spec.version = "1.0.9"
|
8
8
|
spec.authors = ["Currency-One S.A."]
|
9
9
|
spec.email = ["ruby@currency-one.com"]
|
10
10
|
|
@@ -17,12 +17,12 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.bindir = "exe"
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
|
-
spec.required_ruby_version = '>= 2.
|
20
|
+
spec.required_ruby_version = '>= 2.5.0'
|
21
21
|
spec.license = "Apache-2.0"
|
22
|
-
spec.add_runtime_dependency 'async', '~> 1.
|
23
|
-
spec.add_runtime_dependency 'async-io', '~> 1.
|
24
|
-
spec.add_runtime_dependency 'async-http', '~> 0.
|
25
|
-
spec.add_runtime_dependency 'async-websocket', '~> 0.
|
22
|
+
spec.add_runtime_dependency 'async', '~> 1.28.9'
|
23
|
+
spec.add_runtime_dependency 'async-io', '~> 1.30.2'
|
24
|
+
spec.add_runtime_dependency 'async-http', '~> 0.54.1'
|
25
|
+
spec.add_runtime_dependency 'async-websocket', '~> 0.17.0'
|
26
26
|
spec.add_development_dependency 'cucumber'
|
27
27
|
spec.add_development_dependency 'reel'
|
28
28
|
spec.add_development_dependency 'pry'
|
@@ -3,22 +3,10 @@ module Async
|
|
3
3
|
class Client < ::Protocol::HTTP::Middleware
|
4
4
|
include ::Protocol::WebSocket::Headers
|
5
5
|
|
6
|
-
def self.open(endpoint, *args, &block)
|
7
|
-
client = self.new(HTTP::Client.new(endpoint, *args), mask: true)
|
8
|
-
|
9
|
-
return client unless block_given?
|
10
|
-
|
11
|
-
begin
|
12
|
-
yield client
|
13
|
-
ensure
|
14
|
-
client.close
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
6
|
def self.connect(endpoint, *args, **options, &block)
|
19
7
|
self.open(endpoint, *args) do |client|
|
20
|
-
connection = client.connect(endpoint.path, **options)
|
21
|
-
|
8
|
+
connection = client.connect(endpoint.authority, endpoint.path, **options)
|
9
|
+
|
22
10
|
return connection unless block_given?
|
23
11
|
|
24
12
|
begin
|
data/lib/deepstream/client.rb
CHANGED
@@ -34,8 +34,9 @@ module Deepstream
|
|
34
34
|
@challenge_denied, @@deliberate_close = false
|
35
35
|
@state = CONNECTION_STATE::CLOSED
|
36
36
|
@verbose = @options[:verbose]
|
37
|
+
@reinitialize_master = @options[:reinitialize_master]
|
37
38
|
@log = Async.logger
|
38
|
-
@
|
39
|
+
@connected_before = false
|
39
40
|
connect
|
40
41
|
end
|
41
42
|
|
@@ -156,7 +157,7 @@ module Deepstream
|
|
156
157
|
def on_connection_ack
|
157
158
|
@state = CONNECTION_STATE::AUTHENTICATING
|
158
159
|
@message_buffer.delete_if { |msg| msg.action == ACTION::PATCH }
|
159
|
-
@record_handler.reinitialize
|
160
|
+
@record_handler.reinitialize if @connected_before
|
160
161
|
login
|
161
162
|
end
|
162
163
|
|
@@ -166,7 +167,7 @@ module Deepstream
|
|
166
167
|
end
|
167
168
|
|
168
169
|
def on_login
|
169
|
-
@
|
170
|
+
@connected_before = true
|
170
171
|
@state = CONNECTION_STATE::OPEN
|
171
172
|
every(@options[:heartbeat_interval]) { check_heartbeat } if @options[:heartbeat_interval]
|
172
173
|
resubscribe
|
data/lib/deepstream/helpers.rb
CHANGED
data/lib/deepstream/list.rb
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
require_relative './record'
|
2
|
+
require_relative './exceptions'
|
2
3
|
|
3
4
|
module Deepstream
|
4
5
|
class List < Record
|
6
|
+
LIST_CALLBACKS = %i{added removed}
|
7
|
+
|
5
8
|
def initialize(*args)
|
6
9
|
super
|
7
10
|
@data = []
|
11
|
+
@handlers = {}
|
8
12
|
end
|
9
13
|
|
10
14
|
def add(record_name)
|
11
15
|
unless @data.include?(record_name)
|
12
16
|
@data << record_name
|
13
17
|
set
|
18
|
+
notify_listeners(:removed, record_name)
|
14
19
|
end
|
15
20
|
rescue => e
|
16
21
|
@client.on_exception(e)
|
@@ -20,13 +25,14 @@ module Deepstream
|
|
20
25
|
@version = version.to_i
|
21
26
|
data = JSON.parse(data)
|
22
27
|
if data.is_a?(Array)
|
23
|
-
@data
|
28
|
+
set_new_data (@data + data).uniq
|
24
29
|
set if @data.size > data.size
|
25
30
|
end
|
26
31
|
end
|
27
32
|
|
28
33
|
def remove(record_name)
|
29
34
|
set if @data.delete(record_name)
|
35
|
+
notify_listeners(:removed, record_name)
|
30
36
|
end
|
31
37
|
|
32
38
|
def keys
|
@@ -43,10 +49,53 @@ module Deepstream
|
|
43
49
|
@is_reinitializing = false
|
44
50
|
end
|
45
51
|
|
52
|
+
def update(version, data)
|
53
|
+
@version = version.to_i
|
54
|
+
set_new_data JSON.parse(data)
|
55
|
+
rescue => e
|
56
|
+
@client.on_exception(e)
|
57
|
+
end
|
58
|
+
|
59
|
+
def on(cb_name, &block)
|
60
|
+
unless LIST_CALLBACKS.include?(cb_name)
|
61
|
+
raise(UnknownListCallback, "Uknown callback name: #{cb_name}. Must be one of: #{LIST_CALLBACKS}")
|
62
|
+
end
|
63
|
+
(@handlers[cb_name] ||= []).push(block)
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def off(cb_name, &block)
|
68
|
+
if block_given?
|
69
|
+
@handlers[cb_name].delete block
|
70
|
+
elsif cb_name
|
71
|
+
@handlers[cb_name] = []
|
72
|
+
else
|
73
|
+
@handlers = {}
|
74
|
+
end
|
75
|
+
nil
|
76
|
+
end
|
77
|
+
|
46
78
|
private
|
47
79
|
|
48
80
|
def set
|
49
81
|
@client.send_message(TOPIC::RECORD, ACTION::UPDATE, @name, (@version += 1), @data.to_json) if @version
|
50
82
|
end
|
83
|
+
|
84
|
+
def set_new_data(new_data)
|
85
|
+
(@data - new_data).each { |uid| notify_listeners(:removed, uid) }
|
86
|
+
(new_data - @data).each { |uid| notify_listeners(:added, uid) }
|
87
|
+
@data = new_data
|
88
|
+
end
|
89
|
+
|
90
|
+
def notify_listeners(cb_name, uid)
|
91
|
+
(@handlers[cb_name] || []).each do |proc|
|
92
|
+
record = @client.get(uid)
|
93
|
+
if record.__version
|
94
|
+
proc.call(record)
|
95
|
+
else
|
96
|
+
record.when_ready(&proc)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
51
100
|
end
|
52
101
|
end
|
data/lib/deepstream/record.rb
CHANGED
@@ -4,6 +4,8 @@ require_relative './helpers'
|
|
4
4
|
|
5
5
|
module Deepstream
|
6
6
|
class Record
|
7
|
+
attr_reader :data
|
8
|
+
|
7
9
|
def initialize(client, name)
|
8
10
|
@client = client
|
9
11
|
@name = name
|
@@ -12,6 +14,15 @@ module Deepstream
|
|
12
14
|
@is_reinitializing = false
|
13
15
|
@data_cache = {}
|
14
16
|
@client.send_message(TOPIC::RECORD, ACTION::CREATEORREAD, @name)
|
17
|
+
@ready_callback = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def __version
|
21
|
+
@version
|
22
|
+
end
|
23
|
+
|
24
|
+
def __name
|
25
|
+
@name
|
15
26
|
end
|
16
27
|
|
17
28
|
def reset_version
|
@@ -29,8 +40,8 @@ module Deepstream
|
|
29
40
|
end
|
30
41
|
|
31
42
|
def end_reinitializing
|
32
|
-
reset_version
|
33
|
-
set(@data_cache)
|
43
|
+
reset_version if @client.options[:reinitialize_master]
|
44
|
+
set(@data_cache) if @client.options[:reinitialize_master]
|
34
45
|
@is_reinitializing = false
|
35
46
|
end
|
36
47
|
|
@@ -60,8 +71,16 @@ module Deepstream
|
|
60
71
|
@client.on_exception(e)
|
61
72
|
end
|
62
73
|
|
74
|
+
def when_ready(&block)
|
75
|
+
@ready_callback = block
|
76
|
+
end
|
77
|
+
|
63
78
|
def read(version, data)
|
64
79
|
update(version, data)
|
80
|
+
if @ready_callback
|
81
|
+
@ready_callback.call(self)
|
82
|
+
@ready_callback = nil
|
83
|
+
end
|
65
84
|
end
|
66
85
|
|
67
86
|
def patch(version, path, value)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deepstream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Currency-One S.A.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -16,56 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.28.9
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.28.9
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: async-io
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.30.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: 1.30.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: async-http
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.54.1
|
48
48
|
type: :runtime
|
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: 0.
|
54
|
+
version: 0.54.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: async-websocket
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.17.0
|
62
62
|
type: :runtime
|
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: 0.
|
68
|
+
version: 0.17.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: cucumber
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -175,7 +175,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
175
175
|
requirements:
|
176
176
|
- - ">="
|
177
177
|
- !ruby/object:Gem::Version
|
178
|
-
version: 2.
|
178
|
+
version: 2.5.0
|
179
179
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
180
|
requirements:
|
181
181
|
- - ">="
|