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 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: