deepstream 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|