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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f6975e76a29c90cfe509fdd92a3ed1634dcbac8
4
- data.tar.gz: fb5474e18dc9df6c579b8603ec448407dafa91b8
3
+ metadata.gz: 632a0a598af5470fecf2dfd284a90c76782b571c
4
+ data.tar.gz: 53bb708f9e43437ad7c6611af1eaa3b2d921d8e0
5
5
  SHA512:
6
- metadata.gz: bd6803ebfbb8ccc08db88038614cfa4dfa2c43221023413af161ec492ac22250ca22e900fae409a07661e29ee31f4d4e37d6c4ef91ee012c549c06180bc96854
7
- data.tar.gz: 087945a092fda24bbbc89298fdfa3c2cb914cceb7e7438d11fcabd4522afba6eeb6e483193b2c399deef6aa2363261c2e922afbeb8f481d6473716d34f297bec
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
@@ -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 = "0.0.7"
7
+ spec.version = "0.1.0"
8
8
  spec.authors = ["Currency-One S.A."]
9
9
  spec.email = ["piotr.szczudlak@currency-one.com"]
10
10
 
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
- set(name, *args) if name[-1] == '='
50
- @data.send(name, *args)
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
- class Deepstream::Client
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
- @records[record_name] ||= (
73
- _write_and_read('R', 'CR', record_name)
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, record_name, _parse_data(msg[4]), msg[3].to_i)
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.7
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-01-27 00:00:00.000000000 Z
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: