deepstream 0.2.7 → 0.2.8
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 +56 -37
- data/deepstream.gemspec +1 -1
- data/lib/deepstream/list.rb +13 -2
- data/lib/deepstream/record.rb +11 -2
- data/lib/deepstream/record_handler.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae5c4c24417b9fee9b35deee733cb98bc8402caf
|
4
|
+
data.tar.gz: 4e0f4378e8b7e1c0c05ab07c4b9ff3bf22d31bfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2a9d799f057eeeaa687cfbdc1ca5b190aa4b3951a2ab58fff3377b1daa39a35bc1c3baf1232aeeb1a574ecb77a7d96c4af210a285b49a6a9659134242c96271
|
7
|
+
data.tar.gz: ff29a8e5642e88ad74685a7f1fd60007e52204c50dcd8bdc38dc33006977b1254402cc456f7094bf80f8d3df52be73934c8f0b61e2f63343930f729862f501a7
|
data/README.md
CHANGED
@@ -1,65 +1,84 @@
|
|
1
1
|
# deepstream-ruby
|
2
|
+
|
2
3
|
deepstream.io ruby client
|
3
4
|
|
4
|
-
|
5
|
+
[](http://badge.fury.io/rb/deepstream)
|
6
|
+
[](https://github.com/Currency-One/deepstream-ruby/blob/master/LICENSE)
|
7
|
+
|
8
|
+
## Installation
|
5
9
|
|
6
10
|
```
|
7
11
|
gem install deepstream
|
8
12
|
```
|
9
13
|
|
10
|
-
|
14
|
+
## Usage
|
15
|
+
|
16
|
+
### Client initialization
|
11
17
|
```ruby
|
12
|
-
ds = Deepstream::Client.new('localhost'
|
13
|
-
autologin: false,
|
14
|
-
verbose: true,
|
15
|
-
credentials: { username: 'John', password: 'Doe' })
|
18
|
+
ds = Deepstream::Client.new('localhost')
|
16
19
|
# or
|
17
20
|
ds = Deepstream::Client.new('ws://localhost:6020')
|
18
21
|
# or
|
19
|
-
ds = Deepstream::Client.new('ws://localhost:6020/deepstream'
|
20
|
-
|
22
|
+
ds = Deepstream::Client.new('ws://localhost:6020/deepstream',
|
23
|
+
ack_timeout: nil, # ACK timeout; if nil, then the client never checks ACK timeout errors
|
24
|
+
autologin: false, # authorise the client when a Websocket connection is initialized; you don't need to call login() then
|
25
|
+
credentials: { username: 'John', password: 'Doe' }, # credentials used to authorise the client
|
26
|
+
heartbeat_interval: nil # when two server heartbeats are missed the client considers the connection to be lost
|
27
|
+
max_reconnect_attempts: nil,
|
28
|
+
max_reconnect_interval: 30, # seconds
|
29
|
+
reconnect_interval: 1, # seconds, the final interval is a lower number from (reconnect_interval * failed_attempts, max_reconnect_interval)
|
30
|
+
emit_timeout: 0, # if 0, then events that failed to be emitted are thrown away
|
31
|
+
# if nil, then events are stored in a buffer, waiting for reconnection
|
32
|
+
# if another number, then events are stored in a buffer and sent if the client reconnects in emit_timeout seconds
|
33
|
+
verbose: false, # show verbose information about connection, incoming and outgoing messages etc.
|
34
|
+
debug: false # use for testing only; if true, any exception will terminate the client
|
35
|
+
)
|
21
36
|
# log in to the server
|
22
37
|
ds.login
|
23
38
|
# you can use new credentials too
|
24
39
|
ds.login(username: 'John', password: 'betterDoe')
|
25
|
-
|
26
40
|
# check if the websocket connection is opened
|
27
41
|
ds.connected?
|
28
|
-
|
29
42
|
# check if the client is logged in
|
30
43
|
ds.logged_in?
|
31
|
-
|
32
|
-
|
33
|
-
|
44
|
+
```
|
45
|
+
### Events
|
46
|
+
```ruby
|
47
|
+
# emit an event
|
48
|
+
ds.emit('my_event')
|
34
49
|
# or
|
35
|
-
ds.emit
|
36
|
-
|
37
|
-
#
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
50
|
+
ds.emit('my_event', foo: 'bar', bar: 'foo')
|
51
|
+
# or
|
52
|
+
ds.emit('my_event', foo: 'bar', bar: 'foo', timeout: 10) # emit with a custom timeout
|
53
|
+
# subscribe to events
|
54
|
+
ds.on('my_event') { |data| puts data }
|
55
|
+
```
|
56
|
+
### Records
|
57
|
+
```ruby
|
58
|
+
# get a record
|
59
|
+
# list is an optional argument; when given, the client adds the record to a list with given name
|
60
|
+
foo = ds.get('foo', list: 'bar')
|
61
|
+
# or
|
62
|
+
foo = ds.get_record('foo', list: 'bar')
|
44
63
|
# Update a record
|
45
|
-
foo.set('bar', 'bar')
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
#
|
54
|
-
foo.
|
55
|
-
|
64
|
+
foo.set('bar', 'bar') # update 'bar' attribute
|
65
|
+
# or
|
66
|
+
foo.bar = 'bar'
|
67
|
+
# or set the whole record data at once
|
68
|
+
foo.set(bar: 'bar', baz: 'baz')
|
69
|
+
```
|
70
|
+
### Lists
|
71
|
+
```ruby
|
72
|
+
# get a list
|
73
|
+
foo = ds.get_list('foo')
|
74
|
+
# add to the list
|
75
|
+
foo.add('bar')
|
56
76
|
# Remove from list
|
57
77
|
foo.remove('foo')
|
58
|
-
|
59
|
-
# Show record names on the list
|
78
|
+
# show record names in the list
|
60
79
|
foo.data
|
61
80
|
# or
|
62
81
|
foo.keys
|
63
|
-
|
64
|
-
# Access records on the list
|
82
|
+
# get records from the list
|
65
83
|
foo.all
|
84
|
+
```
|
data/deepstream.gemspec
CHANGED
data/lib/deepstream/list.rb
CHANGED
@@ -8,7 +8,12 @@ module Deepstream
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def add(record_name)
|
11
|
-
|
11
|
+
unless @data.include?(record_name)
|
12
|
+
@data << record_name
|
13
|
+
set
|
14
|
+
end
|
15
|
+
rescue => e
|
16
|
+
@client.on_exception(e)
|
12
17
|
end
|
13
18
|
|
14
19
|
def read(version, data)
|
@@ -21,7 +26,7 @@ module Deepstream
|
|
21
26
|
end
|
22
27
|
|
23
28
|
def remove(record_name)
|
24
|
-
set
|
29
|
+
set if @data.delete(record_name)
|
25
30
|
end
|
26
31
|
|
27
32
|
def keys
|
@@ -31,5 +36,11 @@ module Deepstream
|
|
31
36
|
def all
|
32
37
|
@data.map { |record_name| @client.get(record_name) }
|
33
38
|
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def set
|
43
|
+
@client.send_message(TOPIC::RECORD, ACTION::UPDATE, @name, (@version += 1), @data.to_json) if @version
|
44
|
+
end
|
34
45
|
end
|
35
46
|
end
|
data/lib/deepstream/record.rb
CHANGED
@@ -28,6 +28,7 @@ module Deepstream
|
|
28
28
|
|
29
29
|
def set(*args)
|
30
30
|
if args.one?
|
31
|
+
raise(ArgumentError, "Record data must be a hash") unless args.first.is_a?(Hash)
|
31
32
|
@data = args.first
|
32
33
|
@client.send_message(TOPIC::RECORD, ACTION::UPDATE, @name, (@version += 1), @data.to_json) if @version
|
33
34
|
elsif args.size == 2
|
@@ -35,6 +36,8 @@ module Deepstream
|
|
35
36
|
set_path(@data, path, value)
|
36
37
|
@client.send_message(TOPIC::RECORD, ACTION::PATCH, @name, (@version += 1), path, Helpers.to_deepstream_type(value)) if @version
|
37
38
|
end
|
39
|
+
rescue => e
|
40
|
+
@client.on_exception(e)
|
38
41
|
end
|
39
42
|
|
40
43
|
def read(version, data)
|
@@ -44,22 +47,28 @@ module Deepstream
|
|
44
47
|
def patch(version, path, value)
|
45
48
|
@version = version.to_i
|
46
49
|
set_path(@data, path, Helpers.to_type(value))
|
50
|
+
rescue => e
|
51
|
+
@client.on_exception(e)
|
47
52
|
end
|
48
53
|
|
49
54
|
def update(version, data)
|
50
55
|
@version = version.to_i
|
51
56
|
@data = JSON.parse(data)
|
57
|
+
rescue => e
|
58
|
+
@client.on_exception(e)
|
52
59
|
end
|
53
60
|
|
54
61
|
def method_missing(name, *args)
|
55
|
-
|
62
|
+
name = name.to_s
|
63
|
+
return @data.fetch(name, nil) if args.empty?
|
64
|
+
return set(name[0..-2], *args) if name.end_with?('=') && !args.empty?
|
56
65
|
raise(NoMethodError, name)
|
57
66
|
end
|
58
67
|
|
59
68
|
private
|
60
69
|
|
61
70
|
def set_path(data, path, value)
|
62
|
-
key, subkey = path.split('.', 2)
|
71
|
+
key, subkey = path.to_s.split('.', 2)
|
63
72
|
if data.is_a?(Hash)
|
64
73
|
subkey ? set_path(data.fetch(key), subkey, value) : data[key] = value
|
65
74
|
elsif data.is_a?(Array)
|
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: 0.2.
|
4
|
+
version: 0.2.8
|
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: 2017-02-
|
11
|
+
date: 2017-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: celluloid-websocket-client
|