deepstream 0.0.7 → 0.1.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/README.md +18 -0
- data/deepstream.gemspec +1 -1
- data/lib/deepstream.rb +63 -12
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 632a0a598af5470fecf2dfd284a90c76782b571c
|
4
|
+
data.tar.gz: 53bb708f9e43437ad7c6611af1eaa3b2d921d8e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12d4cba483bfdd37b58e91b7d2c14a0a868739882228a09e46ddf5a7e6e6329cc80569596e761dce374cf9c9001b3791cb7097f89c7e4a79b7f98029814e680b
|
7
|
+
data.tar.gz: 0fa39b8d028d15bfbe869cd8b3fb4a813ce8cbdb62f1ba4e7a6757a1482197627c60ab0492b5d0535e0b8546c07ae5e1ee29f599fa6b06963fc9119ee934ce5f
|
data/README.md
CHANGED
@@ -28,6 +28,9 @@ end
|
|
28
28
|
# Get a record
|
29
29
|
foo = ds.get('foo')
|
30
30
|
|
31
|
+
# Get a record with a namespace (automaticly add to a list)
|
32
|
+
foo = ds.get_record('foo', list: 'bar') # record can also be accessed by ds.get('bar/foo')
|
33
|
+
|
31
34
|
# Update record
|
32
35
|
foo.bar = 'bar'
|
33
36
|
# or
|
@@ -35,3 +38,18 @@ foo.set('bar', 'bar')
|
|
35
38
|
|
36
39
|
# Set the whole record
|
37
40
|
foo.set(foo: 'foo', bar: 1, )
|
41
|
+
|
42
|
+
# Get a list
|
43
|
+
foo = ds.get_list('bar')
|
44
|
+
|
45
|
+
# Add to list
|
46
|
+
foo.add('foo')
|
47
|
+
|
48
|
+
# Remove from list
|
49
|
+
foo.remove('foo')
|
50
|
+
|
51
|
+
# Show record names on the list
|
52
|
+
foo.keys()
|
53
|
+
|
54
|
+
# Access records on the list
|
55
|
+
foo.all()
|
data/deepstream.gemspec
CHANGED
data/lib/deepstream.rb
CHANGED
@@ -11,17 +11,13 @@
|
|
11
11
|
# See the License for the specific language governing permissions and
|
12
12
|
# limitations under the License.
|
13
13
|
|
14
|
-
|
15
14
|
require 'socket'
|
16
15
|
require 'json'
|
17
16
|
require 'timeout'
|
18
17
|
|
19
|
-
|
20
18
|
module Deepstream end
|
21
19
|
|
22
|
-
|
23
20
|
class Deepstream::Record
|
24
|
-
|
25
21
|
def initialize(client, name, data, version)
|
26
22
|
@client, @name, @data, @version = client, name, data, version
|
27
23
|
end
|
@@ -46,15 +42,44 @@ class Deepstream::Record
|
|
46
42
|
end
|
47
43
|
|
48
44
|
def method_missing(name, *args)
|
49
|
-
|
50
|
-
|
45
|
+
unless @data.is_a?(Array)
|
46
|
+
set(name, *args) if name[-1] == '='
|
47
|
+
@data.send(name, *args)
|
48
|
+
end
|
51
49
|
end
|
52
|
-
|
53
50
|
end
|
54
51
|
|
52
|
+
class Deepstream::List < Deepstream::Record
|
53
|
+
def add(record_name)
|
54
|
+
if @data.is_a?(Array)
|
55
|
+
@data.push record_name unless @data.include? record_name
|
56
|
+
else
|
57
|
+
@data = [record_name]
|
58
|
+
end
|
59
|
+
@client._write('R', 'U', @name, (@version += 1), JSON.dump(@data))
|
60
|
+
@data
|
61
|
+
end
|
62
|
+
|
63
|
+
def remove(record_name)
|
64
|
+
@data.delete_if { |x| x == record_name }
|
65
|
+
@client._write('R', 'U', @name, (@version += 1), JSON.dump(@data))
|
66
|
+
@data
|
67
|
+
end
|
55
68
|
|
56
|
-
|
69
|
+
def all
|
70
|
+
@data.map { |x| @client.get(x) }
|
71
|
+
end
|
72
|
+
|
73
|
+
def keys
|
74
|
+
@data
|
75
|
+
end
|
57
76
|
|
77
|
+
def set(*args)
|
78
|
+
fail 'cannot use set on a list'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class Deepstream::Client
|
58
83
|
def initialize(address, port = 6021)
|
59
84
|
@address, @port, @unread_msg, @event_callbacks, @records = address, port, nil, {}, {}
|
60
85
|
end
|
@@ -69,11 +94,37 @@ class Deepstream::Client
|
|
69
94
|
end
|
70
95
|
|
71
96
|
def get(record_name)
|
72
|
-
|
73
|
-
|
97
|
+
get_record(record_name)
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_record(record_name, list: nil)
|
101
|
+
name = list ? "#{list}/#{record_name}" : record_name
|
102
|
+
@records[name] ||= (
|
103
|
+
_write_and_read('R', 'CR', name)
|
74
104
|
msg = _read
|
75
|
-
Deepstream::Record.new(self,
|
105
|
+
Deepstream::Record.new(self, name, _parse_data(msg[4]), msg[3].to_i)
|
76
106
|
)
|
107
|
+
if list
|
108
|
+
@records[list] ||= get_list(list)
|
109
|
+
@records[list].add(name)
|
110
|
+
end
|
111
|
+
@records[name]
|
112
|
+
end
|
113
|
+
|
114
|
+
def get_list(list_name)
|
115
|
+
@records[list_name] ||= (
|
116
|
+
_write_and_read('R', 'CR', list_name)
|
117
|
+
msg = _read
|
118
|
+
Deepstream::List.new(self, list_name, _parse_data(msg[4]), msg[3].to_i)
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
def delete(record_name)
|
123
|
+
if matching = record_name.match(/(?<namespace>\w+)\/(?<record>.+)/)
|
124
|
+
tmp = get_list(matching[:namespace])
|
125
|
+
tmp.remove(record_name)
|
126
|
+
end
|
127
|
+
_write('R', 'D', record_name)
|
77
128
|
end
|
78
129
|
|
79
130
|
def _open_socket
|
@@ -144,7 +195,7 @@ class Deepstream::Client
|
|
144
195
|
when 'T' then true
|
145
196
|
when 'F' then false
|
146
197
|
when 'L' then nil
|
198
|
+
else JSON.parse(payload, object_class: OpenStruct)
|
147
199
|
end
|
148
200
|
end
|
149
|
-
|
150
201
|
end
|
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.0
|
4
|
+
version: 0.1.0
|
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: 2016-
|
11
|
+
date: 2016-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Basic ruby client for the deepstream.io server
|
14
14
|
email:
|
@@ -48,3 +48,4 @@ signing_key:
|
|
48
48
|
specification_version: 4
|
49
49
|
summary: deepstream.io ruby client
|
50
50
|
test_files: []
|
51
|
+
has_rdoc:
|