deepstream 1.0.0 → 1.0.5
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 +5 -6
- data/lib/deepstream.rb +1 -1
- data/lib/deepstream/async_patch.rb +12 -11
- data/lib/deepstream/client.rb +9 -9
- data/lib/deepstream/error_handler.rb +3 -3
- data/lib/deepstream/event_handler.rb +4 -4
- data/lib/deepstream/exceptions.rb +1 -0
- data/lib/deepstream/helpers.rb +1 -1
- data/lib/deepstream/list.rb +51 -2
- data/lib/deepstream/message.rb +1 -1
- data/lib/deepstream/record.rb +13 -2
- data/lib/deepstream/record_handler.rb +4 -4
- metadata +6 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0167226999cb5c1382b9d396aa2e8ce699fae587de39a970e9bdd64427a9e2a
|
4
|
+
data.tar.gz: 4b703477f808e422b964a0bbe0d23c7d0eef50d6bd815c109a334a59f98163e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b8c909ac4d4dc9117749a63e077d423f995ac340ca6bd843286c6dee0bc7eda4285ff69efb98a7285924ba83335832e45165ad265cecf356dbdf4f71ca44837
|
7
|
+
data.tar.gz: 642ded8ef97cc5429331accc0d86405e5938b8fe660a3dfc36bc1d2690799df882002d6bb4d4f3769cafac8bb1ca70ff6d341a7a64c31b90c31f3c5a1443dda3
|
data/README.md
CHANGED
data/deepstream.gemspec
CHANGED
@@ -4,9 +4,9 @@ $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.5"
|
8
8
|
spec.authors = ["Currency-One S.A."]
|
9
|
-
spec.email = ["
|
9
|
+
spec.email = ["ruby@currency-one.com"]
|
10
10
|
|
11
11
|
spec.summary = %q{deepstream.io ruby client}
|
12
12
|
spec.description = %q{Basic ruby client for the deepstream.io server}
|
@@ -20,10 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.required_ruby_version = '>= 2.3.0'
|
21
21
|
spec.license = "Apache-2.0"
|
22
22
|
spec.add_runtime_dependency 'async', '~> 1.25.0'
|
23
|
-
spec.add_runtime_dependency 'async
|
24
|
-
spec.add_runtime_dependency 'async
|
25
|
-
spec.add_runtime_dependency 'async
|
26
|
-
spec.add_runtime_dependency 'async/logger'
|
23
|
+
spec.add_runtime_dependency 'async-io', '~> 1.29.0'
|
24
|
+
spec.add_runtime_dependency 'async-http', '~> 0.52.1'
|
25
|
+
spec.add_runtime_dependency 'async-websocket', '~> 0.14.0'
|
27
26
|
spec.add_development_dependency 'cucumber'
|
28
27
|
spec.add_development_dependency 'reel'
|
29
28
|
spec.add_development_dependency 'pry'
|
data/lib/deepstream.rb
CHANGED
@@ -3,6 +3,18 @@ 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
|
+
|
6
18
|
def self.connect(endpoint, *args, **options, &block)
|
7
19
|
self.open(endpoint, *args) do |client|
|
8
20
|
connection = client.connect(endpoint.path, **options)
|
@@ -32,14 +44,3 @@ module Async
|
|
32
44
|
end
|
33
45
|
end
|
34
46
|
end
|
35
|
-
|
36
|
-
module Protocol
|
37
|
-
module WebSocket
|
38
|
-
class TextFrame
|
39
|
-
|
40
|
-
def unpack
|
41
|
-
encoded_readed_string = super.encode(Encoding::UTF_8)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/lib/deepstream/client.rb
CHANGED
@@ -4,14 +4,14 @@ require 'async/io/stream'
|
|
4
4
|
require 'async/http/endpoint'
|
5
5
|
require 'async/websocket/client'
|
6
6
|
require 'async/logger'
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
require_relative './constants'
|
8
|
+
require_relative './error_handler'
|
9
|
+
require_relative './event_handler'
|
10
|
+
require_relative './record_handler'
|
11
|
+
require_relative './helpers'
|
12
|
+
require_relative './message'
|
13
|
+
require_relative './exceptions'
|
14
|
+
require_relative './async_patch'
|
15
15
|
|
16
16
|
module Deepstream
|
17
17
|
class Client
|
@@ -227,7 +227,7 @@ module Deepstream
|
|
227
227
|
break if ( connection.closed? || @deliberate_close )
|
228
228
|
while !@message_buffer.empty? && (logged_in? || !@message_buffer[0].needs_authentication?)
|
229
229
|
msg = @message_buffer.shift
|
230
|
-
next if
|
230
|
+
next if msg.expired?
|
231
231
|
encoded_msg = msg.to_s.encode(Encoding::UTF_8)
|
232
232
|
@log.info "Sending msg = #{msg.inspect}" if @verbose
|
233
233
|
connection.write(encoded_msg)
|
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require_relative './ack_timeout_registry'
|
2
|
+
require_relative './constants'
|
3
|
+
require_relative './exceptions'
|
4
|
+
require_relative './helpers'
|
5
5
|
|
6
6
|
module Deepstream
|
7
7
|
class EventHandler
|
data/lib/deepstream/helpers.rb
CHANGED
@@ -46,7 +46,7 @@ module Deepstream
|
|
46
46
|
url.tap do |url|
|
47
47
|
url.prepend(SCHEME) unless url.start_with?(/ws(s|)\:\/\//)
|
48
48
|
url.concat(":#{DEFAULT_PORT}") unless url[/\:\d+/]
|
49
|
-
url.concat("/#{DEFAULT_PATH}") unless url[
|
49
|
+
url.concat("/#{DEFAULT_PATH}") unless url[/:\d+\/\S+$/]
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
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()
|
95
|
+
else
|
96
|
+
record.when_ready(&proc)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
51
100
|
end
|
52
101
|
end
|
data/lib/deepstream/message.rb
CHANGED
data/lib/deepstream/record.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'json'
|
2
|
-
|
3
|
-
|
2
|
+
require_relative './constants'
|
3
|
+
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,7 @@ 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
|
15
18
|
end
|
16
19
|
|
17
20
|
def reset_version
|
@@ -60,8 +63,16 @@ module Deepstream
|
|
60
63
|
@client.on_exception(e)
|
61
64
|
end
|
62
65
|
|
66
|
+
def when_ready(&block)
|
67
|
+
@ready_callback = block
|
68
|
+
end
|
69
|
+
|
63
70
|
def read(version, data)
|
64
71
|
update(version, data)
|
72
|
+
if @ready_callback
|
73
|
+
@ready_callback.call(self)
|
74
|
+
@ready_callback = nil
|
75
|
+
end
|
65
76
|
end
|
66
77
|
|
67
78
|
def patch(version, path, value)
|
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require_relative './constants'
|
2
|
+
require_relative './exceptions'
|
3
|
+
require_relative './list'
|
4
|
+
require_relative './record'
|
5
5
|
|
6
6
|
module Deepstream
|
7
7
|
class RecordHandler
|
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.5
|
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-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.25.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: async
|
28
|
+
name: async-io
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.29.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: async
|
42
|
+
name: async-http
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.52.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: async
|
56
|
+
name: async-websocket
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
@@ -66,20 +66,6 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.14.0
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: async/logger
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: cucumber
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,7 +138,7 @@ dependencies:
|
|
152
138
|
version: '0'
|
153
139
|
description: Basic ruby client for the deepstream.io server
|
154
140
|
email:
|
155
|
-
-
|
141
|
+
- ruby@currency-one.com
|
156
142
|
executables: []
|
157
143
|
extensions: []
|
158
144
|
extra_rdoc_files: []
|