ably-rest 0.7.3 → 0.7.5
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 +8 -8
- data/.travis.yml +1 -0
- data/SPEC.md +480 -472
- data/lib/ably-rest.rb +1 -1
- data/lib/submodules/ably-ruby/LICENSE.txt +1 -1
- data/lib/submodules/ably-ruby/README.md +107 -24
- data/lib/submodules/ably-ruby/SPEC.md +531 -398
- data/lib/submodules/ably-ruby/lib/ably/auth.rb +24 -16
- data/lib/submodules/ably-ruby/lib/ably/exceptions.rb +9 -0
- data/lib/submodules/ably-ruby/lib/ably/models/message.rb +17 -9
- data/lib/submodules/ably-ruby/lib/ably/models/paginated_resource.rb +12 -8
- data/lib/submodules/ably-ruby/lib/ably/models/presence_message.rb +18 -10
- data/lib/submodules/ably-ruby/lib/ably/models/protocol_message.rb +15 -4
- data/lib/submodules/ably-ruby/lib/ably/modules/async_wrapper.rb +4 -3
- data/lib/submodules/ably-ruby/lib/ably/modules/event_emitter.rb +31 -2
- data/lib/submodules/ably-ruby/lib/ably/modules/message_emitter.rb +77 -0
- data/lib/submodules/ably-ruby/lib/ably/modules/safe_deferrable.rb +71 -0
- data/lib/submodules/ably-ruby/lib/ably/modules/safe_yield.rb +41 -0
- data/lib/submodules/ably-ruby/lib/ably/modules/state_emitter.rb +28 -8
- data/lib/submodules/ably-ruby/lib/ably/realtime.rb +0 -5
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel.rb +24 -29
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_manager.rb +54 -11
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_state_machine.rb +21 -6
- data/lib/submodules/ably-ruby/lib/ably/realtime/client.rb +7 -2
- data/lib/submodules/ably-ruby/lib/ably/realtime/client/incoming_message_dispatcher.rb +29 -26
- data/lib/submodules/ably-ruby/lib/ably/realtime/client/outgoing_message_dispatcher.rb +4 -4
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection.rb +41 -9
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection/connection_manager.rb +72 -24
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection/connection_state_machine.rb +26 -4
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection/websocket_transport.rb +19 -6
- data/lib/submodules/ably-ruby/lib/ably/realtime/presence.rb +74 -208
- data/lib/submodules/ably-ruby/lib/ably/realtime/presence/members_map.rb +264 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_manager.rb +59 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_state_machine.rb +64 -0
- data/lib/submodules/ably-ruby/lib/ably/rest/channel.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/rest/client.rb +6 -2
- data/lib/submodules/ably-ruby/lib/ably/rest/presence.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/util/pub_sub.rb +3 -1
- data/lib/submodules/ably-ruby/lib/ably/util/safe_deferrable.rb +18 -0
- data/lib/submodules/ably-ruby/lib/ably/version.rb +1 -1
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_history_spec.rb +2 -2
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb +28 -6
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_failures_spec.rb +116 -46
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_spec.rb +55 -10
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/message_spec.rb +32 -0
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_spec.rb +456 -96
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/stats_spec.rb +2 -2
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/time_spec.rb +2 -2
- data/lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb +96 -7
- data/lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb +8 -0
- data/lib/submodules/ably-ruby/spec/shared/safe_deferrable_behaviour.rb +71 -0
- data/lib/submodules/ably-ruby/spec/support/api_helper.rb +1 -1
- data/lib/submodules/ably-ruby/spec/support/event_machine_helper.rb +1 -1
- data/lib/submodules/ably-ruby/spec/support/test_app.rb +13 -7
- data/lib/submodules/ably-ruby/spec/unit/models/message_spec.rb +15 -14
- data/lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb +4 -4
- data/lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb +17 -17
- data/lib/submodules/ably-ruby/spec/unit/models/stat_spec.rb +4 -4
- data/lib/submodules/ably-ruby/spec/unit/modules/async_wrapper_spec.rb +28 -9
- data/lib/submodules/ably-ruby/spec/unit/modules/event_emitter_spec.rb +50 -0
- data/lib/submodules/ably-ruby/spec/unit/modules/state_emitter_spec.rb +76 -2
- data/lib/submodules/ably-ruby/spec/unit/realtime/channel_spec.rb +51 -20
- data/lib/submodules/ably-ruby/spec/unit/realtime/channels_spec.rb +3 -3
- data/lib/submodules/ably-ruby/spec/unit/realtime/connection_spec.rb +30 -0
- data/lib/submodules/ably-ruby/spec/unit/realtime/presence_spec.rb +52 -26
- data/lib/submodules/ably-ruby/spec/unit/realtime/safe_deferrable_spec.rb +12 -0
- data/spec/spec_helper.rb +5 -0
- metadata +12 -4
- data/lib/submodules/ably-ruby/.ruby-version.old +0 -1
@@ -2,8 +2,8 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Ably::Realtime::Channels do
|
5
|
-
let(:connection) { instance_double('Ably::Realtime::Connection',
|
6
|
-
let(:client) { instance_double('Ably::Realtime::Client', connection: connection) }
|
5
|
+
let(:connection) { instance_double('Ably::Realtime::Connection', unsafe_on: true, on_resume: true) }
|
6
|
+
let(:client) { instance_double('Ably::Realtime::Client', connection: connection, client_id: 'clientId') }
|
7
7
|
let(:channel_name) { 'unique' }
|
8
8
|
let(:options) { { 'bizarre' => 'value' } }
|
9
9
|
|
@@ -41,7 +41,7 @@ describe Ably::Realtime::Channels do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
context 'destroying channels' do
|
44
|
-
it '#release
|
44
|
+
it '#release detaches and then releases the channel resources' do
|
45
45
|
released_channel = subject.get(channel_name, options)
|
46
46
|
expect(released_channel).to receive(:detach).and_yield
|
47
47
|
subject.release(channel_name)
|
@@ -30,4 +30,34 @@ describe Ably::Realtime::Connection do
|
|
30
30
|
|
31
31
|
it_behaves_like 'an incoming protocol message bus'
|
32
32
|
it_behaves_like 'an outgoing protocol message bus'
|
33
|
+
|
34
|
+
describe 'connection resume callbacks', api_private: true do
|
35
|
+
let(:callbacks) { [] }
|
36
|
+
|
37
|
+
describe '#resumed' do
|
38
|
+
it 'triggers callbacks' do
|
39
|
+
subject.on_resume { callbacks << true }
|
40
|
+
subject.resumed
|
41
|
+
expect(callbacks.count).to eql(1)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#on_resume' do
|
46
|
+
it 'registers a callback' do
|
47
|
+
subject.on_resume { callbacks << true }
|
48
|
+
subject.resumed
|
49
|
+
expect(callbacks.count).to eql(1)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#off_resume' do
|
54
|
+
it 'registers a callback' do
|
55
|
+
subject.on_resume { callbacks << true }
|
56
|
+
additional_proc = proc { raise 'This should not be called' }
|
57
|
+
subject.off_resume &additional_proc
|
58
|
+
subject.resumed
|
59
|
+
expect(callbacks.count).to eql(1)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
33
63
|
end
|
@@ -28,7 +28,7 @@ describe Ably::Realtime::Presence do
|
|
28
28
|
Ably::Models::PresenceMessage.new({
|
29
29
|
'action' => 0,
|
30
30
|
'connection_id' => random_str,
|
31
|
-
}, instance_double('Ably::Models::ProtocolMessage'))
|
31
|
+
}, protocol_message: instance_double('Ably::Models::ProtocolMessage'))
|
32
32
|
end
|
33
33
|
let(:msgbus) { subject.__incoming_msgbus__ }
|
34
34
|
|
@@ -47,63 +47,89 @@ describe Ably::Realtime::Presence do
|
|
47
47
|
|
48
48
|
context 'subscriptions' do
|
49
49
|
let(:message_history) { Hash.new { |hash, key| hash[key] = 0 } }
|
50
|
-
let(:
|
51
|
-
let(:
|
52
|
-
instance_double('Ably::Models::PresenceMessage', action:
|
50
|
+
let(:enter_action) { Ably::Models::PresenceMessage::ACTION.Enter }
|
51
|
+
let(:enter_message) do
|
52
|
+
instance_double('Ably::Models::PresenceMessage', action: enter_action, connection_id: random_str, decode: true, member_key: random_str)
|
53
|
+
end
|
54
|
+
let(:leave_message) do
|
55
|
+
instance_double('Ably::Models::PresenceMessage', action: Ably::Models::PresenceMessage::ACTION.Leave, connection_id: random_str, decode: true, member_key: random_str)
|
56
|
+
end
|
57
|
+
let(:update_message) do
|
58
|
+
instance_double('Ably::Models::PresenceMessage', action: Ably::Models::PresenceMessage::ACTION.Update, connection_id: random_str, decode: true, member_key: random_str)
|
53
59
|
end
|
54
60
|
|
55
61
|
context '#subscribe' do
|
56
|
-
|
57
|
-
subject.
|
62
|
+
specify 'without a block raises an invalid ArgumentError' do
|
63
|
+
expect { subject.subscribe }.to raise_error ArgumentError
|
58
64
|
end
|
59
65
|
|
60
|
-
specify 'to all
|
66
|
+
specify 'with no action specified subscribes the provided block to all action' do
|
61
67
|
subject.subscribe { |message| message_history[:received] += 1}
|
62
|
-
subject.__incoming_msgbus__.publish(:presence,
|
68
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
63
69
|
expect(message_history[:received]).to eql(1)
|
64
70
|
end
|
65
71
|
|
66
|
-
specify '
|
67
|
-
subject.subscribe(
|
72
|
+
specify 'with a single action argument subscribes that block to matching actions' do
|
73
|
+
subject.subscribe(enter_action) { |message| message_history[:received] += 1 }
|
68
74
|
subject.subscribe(:leave) { |message| message_history[:received] += 1 }
|
69
|
-
subject.__incoming_msgbus__.publish(:presence,
|
75
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
70
76
|
expect(message_history[:received]).to eql(1)
|
71
77
|
end
|
72
|
-
end
|
73
78
|
|
74
|
-
|
75
|
-
|
76
|
-
subject.
|
79
|
+
specify 'with a multiple action arguments subscribes that block to all of those actions' do
|
80
|
+
subject.subscribe(:leave, enter_action) { |message| message_history[:received] += 1 }
|
81
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
82
|
+
expect(message_history[:received]).to eql(1)
|
83
|
+
subject.__incoming_msgbus__.publish(:presence, leave_message)
|
84
|
+
expect(message_history[:received]).to eql(2)
|
85
|
+
|
86
|
+
# This message should be ignored as subscribed to :leave and :enter
|
87
|
+
subject.__incoming_msgbus__.publish(:presence, update_message)
|
88
|
+
expect(message_history[:received]).to eql(2)
|
77
89
|
end
|
78
90
|
|
91
|
+
specify 'with a multiple duplicate action arguments subscribes that block to all of those unique actions once' do
|
92
|
+
subject.subscribe(enter_action, enter_action) { |message| message_history[:received] += 1 }
|
93
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
94
|
+
expect(message_history[:received]).to eql(1)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context '#unsubscribe' do
|
79
99
|
let(:callback) do
|
80
100
|
Proc.new { |message| message_history[:received] += 1 }
|
81
101
|
end
|
82
102
|
before do
|
83
|
-
subject.subscribe(
|
103
|
+
subject.subscribe(enter_action, &callback)
|
84
104
|
end
|
85
105
|
|
86
|
-
specify '
|
106
|
+
specify 'with no action specified unsubscribes that block from all events' do
|
87
107
|
subject.unsubscribe &callback
|
88
|
-
subject.__incoming_msgbus__.publish(:presence,
|
108
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
109
|
+
expect(message_history[:received]).to eql(0)
|
110
|
+
end
|
111
|
+
|
112
|
+
specify 'with a single action argument unsubscribes the provided block with the matching action' do
|
113
|
+
subject.unsubscribe enter_action, &callback
|
114
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
89
115
|
expect(message_history[:received]).to eql(0)
|
90
116
|
end
|
91
117
|
|
92
|
-
specify '
|
93
|
-
subject.unsubscribe
|
94
|
-
subject.__incoming_msgbus__.publish(:presence,
|
118
|
+
specify 'with multiple action arguments unsubscribes each of those matching actions with the provided block' do
|
119
|
+
subject.unsubscribe :update, :leave, enter_action, &callback
|
120
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
95
121
|
expect(message_history[:received]).to eql(0)
|
96
122
|
end
|
97
123
|
|
98
|
-
specify '
|
124
|
+
specify 'with a non-matching action argument has no effect' do
|
99
125
|
subject.unsubscribe :leave, &callback
|
100
|
-
subject.__incoming_msgbus__.publish(:presence,
|
126
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
101
127
|
expect(message_history[:received]).to eql(1)
|
102
128
|
end
|
103
129
|
|
104
|
-
specify 'all
|
105
|
-
subject.unsubscribe
|
106
|
-
subject.__incoming_msgbus__.publish(:presence,
|
130
|
+
specify 'with no block argument unsubscribes all blocks for the action argument' do
|
131
|
+
subject.unsubscribe enter_action
|
132
|
+
subject.__incoming_msgbus__.publish(:presence, enter_message)
|
107
133
|
expect(message_history[:received]).to eql(0)
|
108
134
|
end
|
109
135
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'shared/safe_deferrable_behaviour'
|
4
|
+
require 'ably/realtime'
|
5
|
+
|
6
|
+
[Ably::Models::ProtocolMessage, Ably::Models::Message, Ably::Models::PresenceMessage].each do |model_klass|
|
7
|
+
describe model_klass do
|
8
|
+
subject { model_klass.new(action: 1) }
|
9
|
+
|
10
|
+
it_behaves_like 'a safe Deferrable'
|
11
|
+
end
|
12
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -15,6 +15,11 @@ require 'support/private_api_formatter'
|
|
15
15
|
require 'support/protocol_helper'
|
16
16
|
require 'support/random_helper'
|
17
17
|
|
18
|
+
# Load in all shared behaviours
|
19
|
+
Dir.glob(File.expand_path("../lib/submodules/ably-ruby/spec/shared/*.rb", File.dirname(__FILE__))).each do |file|
|
20
|
+
require file
|
21
|
+
end
|
22
|
+
|
18
23
|
require 'rspec_config'
|
19
24
|
|
20
25
|
def require_tests_from(path, options = {})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ably-rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew O'Riordan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -173,7 +173,6 @@ files:
|
|
173
173
|
- lib/ably-rest/modules/eventmachine_deferrable.rb
|
174
174
|
- lib/submodules/ably-ruby/.gitignore
|
175
175
|
- lib/submodules/ably-ruby/.rspec
|
176
|
-
- lib/submodules/ably-ruby/.ruby-version.old
|
177
176
|
- lib/submodules/ably-ruby/.travis.yml
|
178
177
|
- lib/submodules/ably-ruby/Gemfile
|
179
178
|
- lib/submodules/ably-ruby/LICENSE.txt
|
@@ -208,8 +207,11 @@ files:
|
|
208
207
|
- lib/submodules/ably-ruby/lib/ably/modules/event_emitter.rb
|
209
208
|
- lib/submodules/ably-ruby/lib/ably/modules/event_machine_helpers.rb
|
210
209
|
- lib/submodules/ably-ruby/lib/ably/modules/http_helpers.rb
|
210
|
+
- lib/submodules/ably-ruby/lib/ably/modules/message_emitter.rb
|
211
211
|
- lib/submodules/ably-ruby/lib/ably/modules/message_pack.rb
|
212
212
|
- lib/submodules/ably-ruby/lib/ably/modules/model_common.rb
|
213
|
+
- lib/submodules/ably-ruby/lib/ably/modules/safe_deferrable.rb
|
214
|
+
- lib/submodules/ably-ruby/lib/ably/modules/safe_yield.rb
|
213
215
|
- lib/submodules/ably-ruby/lib/ably/modules/state_emitter.rb
|
214
216
|
- lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
|
215
217
|
- lib/submodules/ably-ruby/lib/ably/modules/statesman_monkey_patch.rb
|
@@ -228,6 +230,9 @@ files:
|
|
228
230
|
- lib/submodules/ably-ruby/lib/ably/realtime/connection/websocket_transport.rb
|
229
231
|
- lib/submodules/ably-ruby/lib/ably/realtime/models/nil_channel.rb
|
230
232
|
- lib/submodules/ably-ruby/lib/ably/realtime/presence.rb
|
233
|
+
- lib/submodules/ably-ruby/lib/ably/realtime/presence/members_map.rb
|
234
|
+
- lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_manager.rb
|
235
|
+
- lib/submodules/ably-ruby/lib/ably/realtime/presence/presence_state_machine.rb
|
231
236
|
- lib/submodules/ably-ruby/lib/ably/rest.rb
|
232
237
|
- lib/submodules/ably-ruby/lib/ably/rest/channel.rb
|
233
238
|
- lib/submodules/ably-ruby/lib/ably/rest/channels.rb
|
@@ -242,6 +247,7 @@ files:
|
|
242
247
|
- lib/submodules/ably-ruby/lib/ably/rest/presence.rb
|
243
248
|
- lib/submodules/ably-ruby/lib/ably/util/crypto.rb
|
244
249
|
- lib/submodules/ably-ruby/lib/ably/util/pub_sub.rb
|
250
|
+
- lib/submodules/ably-ruby/lib/ably/util/safe_deferrable.rb
|
245
251
|
- lib/submodules/ably-ruby/lib/ably/version.rb
|
246
252
|
- lib/submodules/ably-ruby/spec/acceptance/realtime/channel_history_spec.rb
|
247
253
|
- lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb
|
@@ -269,6 +275,7 @@ files:
|
|
269
275
|
- lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb
|
270
276
|
- lib/submodules/ably-ruby/spec/shared/model_behaviour.rb
|
271
277
|
- lib/submodules/ably-ruby/spec/shared/protocol_msgbus_behaviour.rb
|
278
|
+
- lib/submodules/ably-ruby/spec/shared/safe_deferrable_behaviour.rb
|
272
279
|
- lib/submodules/ably-ruby/spec/spec_helper.rb
|
273
280
|
- lib/submodules/ably-ruby/spec/support/api_helper.rb
|
274
281
|
- lib/submodules/ably-ruby/spec/support/event_machine_helper.rb
|
@@ -304,6 +311,7 @@ files:
|
|
304
311
|
- lib/submodules/ably-ruby/spec/unit/realtime/incoming_message_dispatcher_spec.rb
|
305
312
|
- lib/submodules/ably-ruby/spec/unit/realtime/presence_spec.rb
|
306
313
|
- lib/submodules/ably-ruby/spec/unit/realtime/realtime_spec.rb
|
314
|
+
- lib/submodules/ably-ruby/spec/unit/realtime/safe_deferrable_spec.rb
|
307
315
|
- lib/submodules/ably-ruby/spec/unit/realtime/websocket_transport_spec.rb
|
308
316
|
- lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb
|
309
317
|
- lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb
|
@@ -338,7 +346,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
338
346
|
version: '0'
|
339
347
|
requirements: []
|
340
348
|
rubyforge_project:
|
341
|
-
rubygems_version: 2.4.
|
349
|
+
rubygems_version: 2.4.6
|
342
350
|
signing_key:
|
343
351
|
specification_version: 4
|
344
352
|
summary: A Ruby REST only client library for ably.io, the real-time messaging service
|
@@ -1 +0,0 @@
|
|
1
|
-
1.9.3-p547
|