ably 0.7.2 → 0.7.4

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.
Files changed (65) hide show
  1. data/LICENSE.txt +1 -1
  2. data/README.md +107 -24
  3. data/SPEC.md +531 -398
  4. data/lib/ably/auth.rb +23 -15
  5. data/lib/ably/exceptions.rb +9 -0
  6. data/lib/ably/models/message.rb +17 -9
  7. data/lib/ably/models/paginated_resource.rb +12 -8
  8. data/lib/ably/models/presence_message.rb +18 -10
  9. data/lib/ably/models/protocol_message.rb +15 -4
  10. data/lib/ably/modules/async_wrapper.rb +4 -3
  11. data/lib/ably/modules/event_emitter.rb +31 -2
  12. data/lib/ably/modules/message_emitter.rb +77 -0
  13. data/lib/ably/modules/safe_deferrable.rb +71 -0
  14. data/lib/ably/modules/safe_yield.rb +41 -0
  15. data/lib/ably/modules/state_emitter.rb +28 -8
  16. data/lib/ably/realtime.rb +0 -5
  17. data/lib/ably/realtime/channel.rb +24 -29
  18. data/lib/ably/realtime/channel/channel_manager.rb +54 -11
  19. data/lib/ably/realtime/channel/channel_state_machine.rb +21 -6
  20. data/lib/ably/realtime/client.rb +7 -2
  21. data/lib/ably/realtime/client/incoming_message_dispatcher.rb +29 -26
  22. data/lib/ably/realtime/client/outgoing_message_dispatcher.rb +4 -4
  23. data/lib/ably/realtime/connection.rb +41 -9
  24. data/lib/ably/realtime/connection/connection_manager.rb +72 -24
  25. data/lib/ably/realtime/connection/connection_state_machine.rb +26 -4
  26. data/lib/ably/realtime/connection/websocket_transport.rb +19 -6
  27. data/lib/ably/realtime/presence.rb +74 -208
  28. data/lib/ably/realtime/presence/members_map.rb +264 -0
  29. data/lib/ably/realtime/presence/presence_manager.rb +59 -0
  30. data/lib/ably/realtime/presence/presence_state_machine.rb +64 -0
  31. data/lib/ably/rest/channel.rb +1 -1
  32. data/lib/ably/rest/client.rb +6 -2
  33. data/lib/ably/rest/presence.rb +1 -1
  34. data/lib/ably/util/pub_sub.rb +3 -1
  35. data/lib/ably/util/safe_deferrable.rb +18 -0
  36. data/lib/ably/version.rb +1 -1
  37. data/spec/acceptance/realtime/channel_history_spec.rb +2 -2
  38. data/spec/acceptance/realtime/channel_spec.rb +28 -6
  39. data/spec/acceptance/realtime/connection_failures_spec.rb +116 -46
  40. data/spec/acceptance/realtime/connection_spec.rb +55 -10
  41. data/spec/acceptance/realtime/message_spec.rb +32 -0
  42. data/spec/acceptance/realtime/presence_spec.rb +456 -96
  43. data/spec/acceptance/realtime/stats_spec.rb +2 -2
  44. data/spec/acceptance/realtime/time_spec.rb +2 -2
  45. data/spec/acceptance/rest/auth_spec.rb +75 -7
  46. data/spec/shared/client_initializer_behaviour.rb +8 -0
  47. data/spec/shared/safe_deferrable_behaviour.rb +71 -0
  48. data/spec/support/api_helper.rb +1 -1
  49. data/spec/support/event_machine_helper.rb +1 -1
  50. data/spec/support/test_app.rb +13 -7
  51. data/spec/unit/models/message_spec.rb +15 -14
  52. data/spec/unit/models/paginated_resource_spec.rb +4 -4
  53. data/spec/unit/models/presence_message_spec.rb +17 -17
  54. data/spec/unit/models/stat_spec.rb +4 -4
  55. data/spec/unit/modules/async_wrapper_spec.rb +28 -9
  56. data/spec/unit/modules/event_emitter_spec.rb +50 -0
  57. data/spec/unit/modules/state_emitter_spec.rb +76 -2
  58. data/spec/unit/realtime/channel_spec.rb +51 -20
  59. data/spec/unit/realtime/channels_spec.rb +3 -3
  60. data/spec/unit/realtime/connection_spec.rb +30 -0
  61. data/spec/unit/realtime/presence_spec.rb +52 -26
  62. data/spec/unit/realtime/safe_deferrable_spec.rb +12 -0
  63. metadata +85 -39
  64. checksums.yaml +0 -7
  65. data/.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', on: true) }
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 detatches and then releases the channel resoures' do
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(:presence_action) { Ably::Models::PresenceMessage::ACTION.Enter }
51
- let(:message) do
52
- instance_double('Ably::Models::PresenceMessage', action: presence_action, connection_id: random_str, decode: true, member_key: random_str)
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
- before do
57
- subject.sync_completed
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 presence state actions' do
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, message)
68
+ subject.__incoming_msgbus__.publish(:presence, enter_message)
63
69
  expect(message_history[:received]).to eql(1)
64
70
  end
65
71
 
66
- specify 'to specific presence state actions' do
67
- subject.subscribe(presence_action) { |message| message_history[:received] += 1 }
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, message)
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
- context '#unsubscribe' do
75
- before do
76
- subject.sync_completed
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(presence_action, &callback)
103
+ subject.subscribe(enter_action, &callback)
84
104
  end
85
105
 
86
- specify 'to all presence state actions' do
106
+ specify 'with no action specified unsubscribes that block from all events' do
87
107
  subject.unsubscribe &callback
88
- subject.__incoming_msgbus__.publish(:presence, message)
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 'to specific presence state actions' do
93
- subject.unsubscribe presence_action, &callback
94
- subject.__incoming_msgbus__.publish(:presence, message)
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 'to specific non-matching presence state actions' do
124
+ specify 'with a non-matching action argument has no effect' do
99
125
  subject.unsubscribe :leave, &callback
100
- subject.__incoming_msgbus__.publish(:presence, message)
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 callbacks by not providing a callback' do
105
- subject.unsubscribe presence_action
106
- subject.__incoming_msgbus__.publish(:presence, message)
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
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ably
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.4
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Lewis Marshall
@@ -9,202 +10,230 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2015-02-10 00:00:00.000000000 Z
13
+ date: 2015-03-09 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: eventmachine
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
- - - "~>"
20
+ - - ~>
19
21
  - !ruby/object:Gem::Version
20
22
  version: '1.0'
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
- - - "~>"
28
+ - - ~>
26
29
  - !ruby/object:Gem::Version
27
30
  version: '1.0'
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: em-http-request
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
- - - "~>"
36
+ - - ~>
33
37
  - !ruby/object:Gem::Version
34
38
  version: '1.1'
35
39
  type: :runtime
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
- - - "~>"
44
+ - - ~>
40
45
  - !ruby/object:Gem::Version
41
46
  version: '1.1'
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: statesman
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
- - - "~>"
52
+ - - ~>
47
53
  - !ruby/object:Gem::Version
48
54
  version: 1.0.0
49
55
  type: :runtime
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
- - - "~>"
60
+ - - ~>
54
61
  - !ruby/object:Gem::Version
55
62
  version: 1.0.0
56
63
  - !ruby/object:Gem::Dependency
57
64
  name: faraday
58
65
  requirement: !ruby/object:Gem::Requirement
66
+ none: false
59
67
  requirements:
60
- - - "~>"
68
+ - - ~>
61
69
  - !ruby/object:Gem::Version
62
70
  version: '0.9'
63
71
  type: :runtime
64
72
  prerelease: false
65
73
  version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
66
75
  requirements:
67
- - - "~>"
76
+ - - ~>
68
77
  - !ruby/object:Gem::Version
69
78
  version: '0.9'
70
79
  - !ruby/object:Gem::Dependency
71
80
  name: json
72
81
  requirement: !ruby/object:Gem::Requirement
82
+ none: false
73
83
  requirements:
74
- - - ">="
84
+ - - ! '>='
75
85
  - !ruby/object:Gem::Version
76
86
  version: '0'
77
87
  type: :runtime
78
88
  prerelease: false
79
89
  version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
80
91
  requirements:
81
- - - ">="
92
+ - - ! '>='
82
93
  - !ruby/object:Gem::Version
83
94
  version: '0'
84
95
  - !ruby/object:Gem::Dependency
85
96
  name: websocket-driver
86
97
  requirement: !ruby/object:Gem::Requirement
98
+ none: false
87
99
  requirements:
88
- - - "~>"
100
+ - - ~>
89
101
  - !ruby/object:Gem::Version
90
102
  version: '0.3'
91
103
  type: :runtime
92
104
  prerelease: false
93
105
  version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
94
107
  requirements:
95
- - - "~>"
108
+ - - ~>
96
109
  - !ruby/object:Gem::Version
97
110
  version: '0.3'
98
111
  - !ruby/object:Gem::Dependency
99
112
  name: msgpack-ably
100
113
  requirement: !ruby/object:Gem::Requirement
114
+ none: false
101
115
  requirements:
102
- - - "~>"
116
+ - - ~>
103
117
  - !ruby/object:Gem::Version
104
118
  version: 0.5.10
105
119
  type: :runtime
106
120
  prerelease: false
107
121
  version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
108
123
  requirements:
109
- - - "~>"
124
+ - - ~>
110
125
  - !ruby/object:Gem::Version
111
126
  version: 0.5.10
112
127
  - !ruby/object:Gem::Dependency
113
128
  name: bundler
114
129
  requirement: !ruby/object:Gem::Requirement
130
+ none: false
115
131
  requirements:
116
- - - "~>"
132
+ - - ~>
117
133
  - !ruby/object:Gem::Version
118
134
  version: '1.3'
119
135
  type: :development
120
136
  prerelease: false
121
137
  version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
122
139
  requirements:
123
- - - "~>"
140
+ - - ~>
124
141
  - !ruby/object:Gem::Version
125
142
  version: '1.3'
126
143
  - !ruby/object:Gem::Dependency
127
144
  name: rake
128
145
  requirement: !ruby/object:Gem::Requirement
146
+ none: false
129
147
  requirements:
130
- - - ">="
148
+ - - ! '>='
131
149
  - !ruby/object:Gem::Version
132
150
  version: '0'
133
151
  type: :development
134
152
  prerelease: false
135
153
  version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
136
155
  requirements:
137
- - - ">="
156
+ - - ! '>='
138
157
  - !ruby/object:Gem::Version
139
158
  version: '0'
140
159
  - !ruby/object:Gem::Dependency
141
160
  name: redcarpet
142
161
  requirement: !ruby/object:Gem::Requirement
162
+ none: false
143
163
  requirements:
144
- - - ">="
164
+ - - ! '>='
145
165
  - !ruby/object:Gem::Version
146
166
  version: '0'
147
167
  type: :development
148
168
  prerelease: false
149
169
  version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
150
171
  requirements:
151
- - - ">="
172
+ - - ! '>='
152
173
  - !ruby/object:Gem::Version
153
174
  version: '0'
154
175
  - !ruby/object:Gem::Dependency
155
176
  name: rspec
156
177
  requirement: !ruby/object:Gem::Requirement
178
+ none: false
157
179
  requirements:
158
- - - "~>"
180
+ - - ~>
159
181
  - !ruby/object:Gem::Version
160
182
  version: 3.1.0
161
183
  type: :development
162
184
  prerelease: false
163
185
  version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
164
187
  requirements:
165
- - - "~>"
188
+ - - ~>
166
189
  - !ruby/object:Gem::Version
167
190
  version: 3.1.0
168
191
  - !ruby/object:Gem::Dependency
169
192
  name: rspec-retry
170
193
  requirement: !ruby/object:Gem::Requirement
194
+ none: false
171
195
  requirements:
172
- - - ">="
196
+ - - ! '>='
173
197
  - !ruby/object:Gem::Version
174
198
  version: '0'
175
199
  type: :development
176
200
  prerelease: false
177
201
  version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
178
203
  requirements:
179
- - - ">="
204
+ - - ! '>='
180
205
  - !ruby/object:Gem::Version
181
206
  version: '0'
182
207
  - !ruby/object:Gem::Dependency
183
208
  name: yard
184
209
  requirement: !ruby/object:Gem::Requirement
210
+ none: false
185
211
  requirements:
186
- - - ">="
212
+ - - ! '>='
187
213
  - !ruby/object:Gem::Version
188
214
  version: '0'
189
215
  type: :development
190
216
  prerelease: false
191
217
  version_requirements: !ruby/object:Gem::Requirement
218
+ none: false
192
219
  requirements:
193
- - - ">="
220
+ - - ! '>='
194
221
  - !ruby/object:Gem::Version
195
222
  version: '0'
196
223
  - !ruby/object:Gem::Dependency
197
224
  name: webmock
198
225
  requirement: !ruby/object:Gem::Requirement
226
+ none: false
199
227
  requirements:
200
- - - ">="
228
+ - - ! '>='
201
229
  - !ruby/object:Gem::Version
202
230
  version: '0'
203
231
  type: :development
204
232
  prerelease: false
205
233
  version_requirements: !ruby/object:Gem::Requirement
234
+ none: false
206
235
  requirements:
207
- - - ">="
236
+ - - ! '>='
208
237
  - !ruby/object:Gem::Version
209
238
  version: '0'
210
239
  description: A Ruby client library for ably.io, the real-time messaging service
@@ -215,10 +244,9 @@ executables: []
215
244
  extensions: []
216
245
  extra_rdoc_files: []
217
246
  files:
218
- - ".gitignore"
219
- - ".rspec"
220
- - ".ruby-version.old"
221
- - ".travis.yml"
247
+ - .gitignore
248
+ - .rspec
249
+ - .travis.yml
222
250
  - Gemfile
223
251
  - LICENSE.txt
224
252
  - README.md
@@ -252,8 +280,11 @@ files:
252
280
  - lib/ably/modules/event_emitter.rb
253
281
  - lib/ably/modules/event_machine_helpers.rb
254
282
  - lib/ably/modules/http_helpers.rb
283
+ - lib/ably/modules/message_emitter.rb
255
284
  - lib/ably/modules/message_pack.rb
256
285
  - lib/ably/modules/model_common.rb
286
+ - lib/ably/modules/safe_deferrable.rb
287
+ - lib/ably/modules/safe_yield.rb
257
288
  - lib/ably/modules/state_emitter.rb
258
289
  - lib/ably/modules/state_machine.rb
259
290
  - lib/ably/modules/statesman_monkey_patch.rb
@@ -272,6 +303,9 @@ files:
272
303
  - lib/ably/realtime/connection/websocket_transport.rb
273
304
  - lib/ably/realtime/models/nil_channel.rb
274
305
  - lib/ably/realtime/presence.rb
306
+ - lib/ably/realtime/presence/members_map.rb
307
+ - lib/ably/realtime/presence/presence_manager.rb
308
+ - lib/ably/realtime/presence/presence_state_machine.rb
275
309
  - lib/ably/rest.rb
276
310
  - lib/ably/rest/channel.rb
277
311
  - lib/ably/rest/channels.rb
@@ -286,6 +320,7 @@ files:
286
320
  - lib/ably/rest/presence.rb
287
321
  - lib/ably/util/crypto.rb
288
322
  - lib/ably/util/pub_sub.rb
323
+ - lib/ably/util/safe_deferrable.rb
289
324
  - lib/ably/version.rb
290
325
  - spec/acceptance/realtime/channel_history_spec.rb
291
326
  - spec/acceptance/realtime/channel_spec.rb
@@ -313,6 +348,7 @@ files:
313
348
  - spec/shared/client_initializer_behaviour.rb
314
349
  - spec/shared/model_behaviour.rb
315
350
  - spec/shared/protocol_msgbus_behaviour.rb
351
+ - spec/shared/safe_deferrable_behaviour.rb
316
352
  - spec/spec_helper.rb
317
353
  - spec/support/api_helper.rb
318
354
  - spec/support/event_machine_helper.rb
@@ -348,6 +384,7 @@ files:
348
384
  - spec/unit/realtime/incoming_message_dispatcher_spec.rb
349
385
  - spec/unit/realtime/presence_spec.rb
350
386
  - spec/unit/realtime/realtime_spec.rb
387
+ - spec/unit/realtime/safe_deferrable_spec.rb
351
388
  - spec/unit/realtime/websocket_transport_spec.rb
352
389
  - spec/unit/rest/channel_spec.rb
353
390
  - spec/unit/rest/channels_spec.rb
@@ -358,26 +395,33 @@ files:
358
395
  homepage: http://github.com/ably/ably-ruby
359
396
  licenses:
360
397
  - MIT
361
- metadata: {}
362
398
  post_install_message:
363
399
  rdoc_options: []
364
400
  require_paths:
365
401
  - lib
366
402
  required_ruby_version: !ruby/object:Gem::Requirement
403
+ none: false
367
404
  requirements:
368
- - - ">="
405
+ - - ! '>='
369
406
  - !ruby/object:Gem::Version
370
407
  version: '0'
408
+ segments:
409
+ - 0
410
+ hash: 3024375831519817759
371
411
  required_rubygems_version: !ruby/object:Gem::Requirement
412
+ none: false
372
413
  requirements:
373
- - - ">="
414
+ - - ! '>='
374
415
  - !ruby/object:Gem::Version
375
416
  version: '0'
417
+ segments:
418
+ - 0
419
+ hash: 3024375831519817759
376
420
  requirements: []
377
421
  rubyforge_project:
378
- rubygems_version: 2.2.2
422
+ rubygems_version: 1.8.23.2
379
423
  signing_key:
380
- specification_version: 4
424
+ specification_version: 3
381
425
  summary: A Ruby client library for ably.io, the real-time messaging service
382
426
  test_files:
383
427
  - spec/acceptance/realtime/channel_history_spec.rb
@@ -406,6 +450,7 @@ test_files:
406
450
  - spec/shared/client_initializer_behaviour.rb
407
451
  - spec/shared/model_behaviour.rb
408
452
  - spec/shared/protocol_msgbus_behaviour.rb
453
+ - spec/shared/safe_deferrable_behaviour.rb
409
454
  - spec/spec_helper.rb
410
455
  - spec/support/api_helper.rb
411
456
  - spec/support/event_machine_helper.rb
@@ -441,6 +486,7 @@ test_files:
441
486
  - spec/unit/realtime/incoming_message_dispatcher_spec.rb
442
487
  - spec/unit/realtime/presence_spec.rb
443
488
  - spec/unit/realtime/realtime_spec.rb
489
+ - spec/unit/realtime/safe_deferrable_spec.rb
444
490
  - spec/unit/realtime/websocket_transport_spec.rb
445
491
  - spec/unit/rest/channel_spec.rb
446
492
  - spec/unit/rest/channels_spec.rb