ably 1.1.0 → 1.1.1

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.
@@ -63,20 +63,22 @@ describe Ably::Realtime::Push::Admin, :event_machine do
63
63
  end
64
64
 
65
65
  context 'invalid recipient' do
66
+ let(:default_options) { { key: api_key, environment: environment, protocol: protocol, log_level: :fatal } }
67
+
66
68
  it 'raises an error after receiving a 40x realtime response' do
67
- skip 'validation on raw push is not enabled in realtime'
68
69
  subject.publish({ invalid_recipient_details: 'foo.bar' }, basic_notification_payload).errback do |error|
69
- expect(error.message).to match(/Invalid recipient/)
70
+ expect(error.message).to match(/recipient must contain/)
70
71
  stop_reactor
71
72
  end
72
73
  end
73
74
  end
74
75
 
75
76
  context 'invalid push data' do
77
+ let(:default_options) { { key: api_key, environment: environment, protocol: protocol, log_level: :fatal } }
78
+
76
79
  it 'raises an error after receiving a 40x realtime response' do
77
- skip 'validation on raw push is not enabled in realtime'
78
80
  subject.publish(basic_recipient, { invalid_property_only: true }).errback do |error|
79
- expect(error.message).to match(/Invalid push notification data/)
81
+ expect(error.message).to match(/Unexpected field/)
80
82
  stop_reactor
81
83
  end
82
84
  end
@@ -275,6 +275,43 @@ describe Ably::Rest::Channel do
275
275
  end
276
276
  end
277
277
  end
278
+
279
+ context 'with a frozen message event name' do
280
+ let(:event_name) { random_str.freeze }
281
+
282
+ it 'succeeds and publishes with an implicit client_id' do
283
+ channel.publish([name: event_name])
284
+ channel.publish(event_name)
285
+
286
+ if !(RUBY_VERSION.match(/^1\./) || RUBY_VERSION.match(/^2\.[012]/))
287
+ channel.publish(+'foo-bar') # new style freeze, see https://github.com/ably/ably-ruby/issues/132
288
+ else
289
+ channel.publish('foo-bar'.freeze) # new + style not supported until Ruby 2.3
290
+ end
291
+
292
+ channel.history do |messages|
293
+ expect(messages.length).to eql(3)
294
+ expect(messages.first.name).to eql(event_name)
295
+ expect(messages[1].name).to eql(event_name)
296
+ expect(messages.last.name).to eql('foo-bar')
297
+ end
298
+ end
299
+ end
300
+
301
+ context 'with a frozen payload' do
302
+ let(:payload) { { foo: random_str.freeze }.freeze }
303
+
304
+ it 'succeeds and publishes with an implicit client_id' do
305
+ channel.publish([data: payload])
306
+ channel.publish(nil, payload)
307
+
308
+ channel.history do |messages|
309
+ expect(messages.length).to eql(2)
310
+ expect(messages.first.data).to eql(payload)
311
+ expect(messages.last.data).to eql(payload)
312
+ end
313
+ end
314
+ end
278
315
  end
279
316
 
280
317
  describe '#history' do
@@ -60,5 +60,11 @@ describe Ably::Rest::Channels do
60
60
  let(:channel_with_options) { client.channels[channel_name, options] }
61
61
  it_behaves_like 'a channel'
62
62
  end
63
+
64
+ describe 'using a frozen channel name' do
65
+ let(:channel) { client.channels[channel_name.freeze] }
66
+ let(:channel_with_options) { client.channels[channel_name.freeze, options] }
67
+ it_behaves_like 'a channel'
68
+ end
63
69
  end
64
70
  end
@@ -120,8 +120,6 @@ describe Ably::Rest::Channel, 'messages' do
120
120
  let(:message) { Ably::Models::Message.new(id: id, data: data) }
121
121
 
122
122
  specify 'three REST publishes result in only one message being published' do
123
- pending 'idempotency rolled out to global cluster'
124
-
125
123
  3.times { channel.publish [message] }
126
124
  expect(channel.history.items.length).to eql(1)
127
125
  expect(channel.history.items[0].id).to eql(id)
@@ -130,8 +128,6 @@ describe Ably::Rest::Channel, 'messages' do
130
128
 
131
129
  context 'with #publish arguments only' do
132
130
  it 'three REST publishes result in only one message being published' do
133
- pending 'idempotency rolled out to global cluster'
134
-
135
131
  3.times { channel.publish 'event', data, id: id }
136
132
  expect(channel.history.items.length).to eql(1)
137
133
  end
@@ -143,8 +139,6 @@ describe Ably::Rest::Channel, 'messages' do
143
139
  end
144
140
 
145
141
  specify 'for multiple messages in one publish operation (#RSL1k3)' do
146
- pending 'idempotency rolled out to global cluster'
147
-
148
142
  message_arr = 3.times.map { Ably::Models::Message.new(id: id, data: data) }
149
143
  expect { channel.publish message_arr }.to raise_error do |error|
150
144
  expect(error.code).to eql(40031) # Invalid publish request (invalid client-specified id), see https://github.com/ably/ably-common/pull/30
@@ -152,12 +146,10 @@ describe Ably::Rest::Channel, 'messages' do
152
146
  end
153
147
 
154
148
  specify 'for multiple messages in one publish operation with IDs following the required format described in RSL1k1 (#RSL1k3)' do
155
- pending 'idempotency rolled out to global cluster'
156
-
157
149
  message_arr = 3.times.map { |index| Ably::Models::Message.new(id: "#{id}:#{index}", data: data) }
158
150
  channel.publish message_arr
159
- expect(channel.history.items[0].id).to eql("{id}:0")
160
- expect(channel.history.items[2].id).to eql("{id}:2")
151
+ expect(channel.history.items[2].id).to eql("#{id}:0")
152
+ expect(channel.history.items[0].id).to eql("#{id}:2")
161
153
  expect(channel.history.items.length).to eql(3)
162
154
  end
163
155
  end
@@ -174,7 +166,7 @@ describe Ably::Rest::Channel, 'messages' do
174
166
  end
175
167
 
176
168
  context 'when idempotent publishing is enabled in the client library ClientOptions (#TO3n)' do
177
- let(:client_options) { default_client_options.merge(idempotent_rest_publishing: true, log_level: :error) }
169
+ let(:client_options) { default_client_options.merge(idempotent_rest_publishing: true, log_level: :error, fallback_hosts: ["#{environment}-realtime.ably.io"]) }
178
170
 
179
171
  context 'when there is a network failure triggering an automatic retry (#RSL1k4)' do
180
172
  def mock_for_two_publish_failures
@@ -195,8 +187,6 @@ describe Ably::Rest::Channel, 'messages' do
195
187
  before { mock_for_two_publish_failures }
196
188
 
197
189
  specify 'two REST publish retries result in only one message being published' do
198
- pending 'idempotency rolled out to global cluster'
199
-
200
190
  channel.publish [message]
201
191
  expect(channel.history.items.length).to eql(1)
202
192
  expect(@failed_http_posts).to eql(2)
@@ -207,8 +197,6 @@ describe Ably::Rest::Channel, 'messages' do
207
197
  before { mock_for_two_publish_failures }
208
198
 
209
199
  specify 'two REST publish retries result in only one message being published' do
210
- pending 'idempotency rolled out to global cluster'
211
-
212
200
  channel.publish 'event', data
213
201
  expect(channel.history.items.length).to eql(1)
214
202
  expect(@failed_http_posts).to eql(2)
@@ -221,8 +209,6 @@ describe Ably::Rest::Channel, 'messages' do
221
209
  before { mock_for_two_publish_failures }
222
210
 
223
211
  specify 'two REST publish retries result in only one message being published' do
224
- pending 'idempotency rolled out to global cluster'
225
-
226
212
  channel.publish 'event', data, id: id
227
213
  expect(channel.history.items.length).to eql(1)
228
214
  expect(channel.history.items[0].id).to eql(id)
@@ -231,11 +217,9 @@ describe Ably::Rest::Channel, 'messages' do
231
217
  end
232
218
 
233
219
  specify 'for multiple messages in one publish operation' do
234
- pending 'idempotency rolled out to global cluster'
235
-
236
220
  message_arr = 3.times.map { Ably::Models::Message.new(data: data) }
237
221
  3.times { channel.publish message_arr }
238
- expect(channel.history.items.length).to eql(message_arr.length)
222
+ expect(channel.history.items.length).to eql(message_arr.length * 3)
239
223
  end
240
224
  end
241
225
 
@@ -248,13 +232,11 @@ describe Ably::Rest::Channel, 'messages' do
248
232
 
249
233
  context 'when publishing a batch of messages' do
250
234
  specify 'the ID is populated with a single random ID and sequence of serials from this lib (#RSL1k1)' do
251
- pending 'idempotency rolled out to global cluster'
252
-
253
235
  message = { name: 'event' }
254
236
  channel.publish [message, message, message]
255
- expect(channel.history.items[0].length).to eql(3)
256
- expect(channel.history.items[0].id).to match(/^[A-Za-z0-9\+\/]+:0$/)
257
- expect(channel.history.items[2].id).to match(/^[A-Za-z0-9\+\/]+:2$/)
237
+ expect(channel.history.items.length).to eql(3)
238
+ expect(channel.history.items[0].id).to match(/^[A-Za-z0-9\+\/]+:2$/)
239
+ expect(channel.history.items[2].id).to match(/^[A-Za-z0-9\+\/]+:0$/)
258
240
  base_64_id = channel.history.items[0].id.split(':')[0]
259
241
  expect(Base64.decode64(base_64_id).length).to eql(9)
260
242
  end
@@ -4,7 +4,7 @@ def console(message)
4
4
  puts "\033[31m[#{Time.now.strftime('%H:%M:%S.%L')}]\033[0m \033[33m#{message}\033[0m"
5
5
  end
6
6
 
7
- unless RUBY_VERSION.match(/^1/)
7
+ unless RUBY_VERSION.match(/^1\./)
8
8
  require 'coveralls'
9
9
  Coveralls.wear!
10
10
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
  require 'shared/protocol_msgbus_behaviour'
3
3
 
4
4
  describe Ably::Realtime::Connection do
5
- let(:client) { instance_double('Ably::Realtime::Client', logger: double('logger').as_null_object) }
5
+ let(:client) { instance_double('Ably::Realtime::Client', logger: double('logger').as_null_object, recover: nil) }
6
6
 
7
7
  subject do
8
8
  Ably::Realtime::Connection.new(client, {}).tap do |connection|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ably
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lewis Marshall
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-02-06 00:00:00.000000000 Z
12
+ date: 2019-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
@@ -137,20 +137,6 @@ dependencies:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
139
  version: 2.0.0
140
- - !ruby/object:Gem::Dependency
141
- name: bundler
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - "~>"
145
- - !ruby/object:Gem::Version
146
- version: '1.3'
147
- type: :development
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - "~>"
152
- - !ruby/object:Gem::Version
153
- version: '1.3'
154
140
  - !ruby/object:Gem::Dependency
155
141
  name: rake
156
142
  requirement: !ruby/object:Gem::Requirement
@@ -235,6 +221,20 @@ dependencies:
235
221
  - - "~>"
236
222
  - !ruby/object:Gem::Version
237
223
  version: '1.0'
224
+ - !ruby/object:Gem::Dependency
225
+ name: bundler
226
+ requirement: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: 1.3.0
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: 1.3.0
238
238
  - !ruby/object:Gem::Dependency
239
239
  name: webmock
240
240
  requirement: !ruby/object:Gem::Requirement
@@ -527,7 +527,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
527
527
  - !ruby/object:Gem::Version
528
528
  version: '0'
529
529
  requirements: []
530
- rubygems_version: 3.0.2
530
+ rubygems_version: 3.0.3
531
531
  signing_key:
532
532
  specification_version: 4
533
533
  summary: A Ruby client library for ably.io realtime messaging implemented using EventMachine