ably 1.0.1 → 1.0.2

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: 35c9faf01a4c322800ddac5c48bfad4579f7d7bf
4
- data.tar.gz: 12cd62339ee45d68f0bf70db9322b31cb66f30d5
3
+ metadata.gz: f84e069f72578aa8f1dd02fb6925da8a03cb702a
4
+ data.tar.gz: 0d96682769ebf4ed7b9d0d9fc84603e2a99101fe
5
5
  SHA512:
6
- metadata.gz: 14e90c00a29dee9053e239dc957cdcfcd95e80f359a9fdbd8180f602d4ec05c61bffd2884180d3ab1d2c4a66ac249616b95318a81df26116908865b46aa93a60
7
- data.tar.gz: 4b127fbf6086141d08cc50dc00a1c3cbc32a8b282ecc5bef5a8116c7d481c78c9b05eca4cdc25e50854190ba833c770044bf6810aa492240fa060be7e1bc853f
6
+ metadata.gz: 139bc0db9fc45e8814c352d8e046666eebb3123c46898256ca3f6c47cf9d66ad86d2dbf76a63ffbf3fdaad0b0f23c3b46c4062e4b5811892481295748826510b
7
+ data.tar.gz: e4f947a9eb775db94fb413522b935120b5f3ee9d4b6df965ba1c82c676034d5fe653e1120a52c45ae45713c522bed5d582b79cc24e541f69e857cab0c8874284
@@ -7,6 +7,7 @@ rvm:
7
7
  - 1.9.3
8
8
  - 2.0.0
9
9
  - 2.2.0
10
+ - 2.4.1
10
11
  script: bundle exec rspec
11
12
  notifications:
12
13
  slack:
@@ -1,11 +1,26 @@
1
1
  # Change Log
2
2
 
3
- ## [v1.0.0](https://github.com/ably/ably-ruby/tree/v1.0.0) (2017-03-07)
4
- [Full Changelog](https://github.com/ably/ably-ruby/compare/v0.8.14...v1.0.0)
3
+ ## [v1.0.2](https://github.com/ably/ably-ruby/tree/v1.0.2)
4
+
5
+ [Full Changelog](https://github.com/ably/ably-ruby/compare/v1.0.1...v1.0.2)
6
+
7
+ **Fixed bugs:**
8
+
9
+ - Reconnect following disconnection is hitting a 403 error [\#117](https://github.com/ably/ably-ruby/issues/117)
10
+ - [Fallback hosts were used upon any disconnection as opposed to only when the primary host is unavailable](https://github.com/ably/ably-ruby/pull/120)
5
11
 
6
- ### v1.0 release and upgrade notes from v0.8
12
+ **Merged pull requests:**
13
+
14
+ - Fallback fixes [\#120](https://github.com/ably/ably-ruby/pull/120) ([mattheworiordan](https://github.com/mattheworiordan))
15
+
16
+ ## [v1.0.1](https://github.com/ably/ably-ruby/tree/v1.0.1) (2017-05-11)
17
+ [Full Changelog](https://github.com/ably/ably-ruby/compare/v1.0.0...v1.0.1)
18
+
19
+ ## [v1.0.0](https://github.com/ably/ably-ruby/tree/v1.0.0) (2017-03-07)
20
+ [Full Changelog](https://github.com/ably/ably-ruby/compare/v0.8.15...v1.0.0)
7
21
 
8
- - See https://github.com/ably/docs/issues/235
22
+ ## [v0.8.15](https://github.com/ably/ably-ruby/tree/v0.8.15) (2017-03-07)
23
+ [Full Changelog](https://github.com/ably/ably-ruby/compare/v0.8.14...v0.8.15)
9
24
 
10
25
  **Implemented enhancements:**
11
26
 
@@ -351,7 +351,7 @@ module Ably
351
351
  def determine_host
352
352
  raise ArgumentError, 'Block required' unless block_given?
353
353
 
354
- if can_use_fallback_hosts?
354
+ if should_use_fallback_hosts?
355
355
  internet_up? do |internet_is_up_result|
356
356
  @current_host = if internet_is_up_result
357
357
  client.fallback_endpoint.host
@@ -445,6 +445,10 @@ module Ably
445
445
  end
446
446
 
447
447
  determine_host do |host|
448
+ # Ensure the hostname matches the fallback host name
449
+ url.hostname = host
450
+ url.port = port
451
+
448
452
  begin
449
453
  logger.debug { "Connection: Opening socket connection to #{host}:#{port}/#{url.path}?#{url.query}" }
450
454
  @transport = create_transport(host, port, url) do |websocket_transport|
@@ -510,6 +514,7 @@ module Ably
510
514
 
511
515
  # @api private
512
516
  def create_transport(host, port, url, &block)
517
+ logger.debug { "Connection: EventMachine connecting to #{host}:#{port} with URL: #{url}" }
513
518
  EventMachine.connect(host, port, WebsocketTransport, self, url.to_s, &block)
514
519
  end
515
520
 
@@ -642,14 +647,22 @@ module Ably
642
647
  !!client.custom_realtime_host
643
648
  end
644
649
 
645
- def can_use_fallback_hosts?
650
+ def should_use_fallback_hosts?
646
651
  if client.fallback_hosts && !client.fallback_hosts.empty?
647
- if connecting? && previous_state
652
+ if connecting? && previous_state && !disconnected_from_connected_state?
648
653
  use_fallback_if_disconnected? || use_fallback_if_suspended?
649
654
  end
650
655
  end
651
656
  end
652
657
 
658
+ def disconnected_from_connected_state?
659
+ most_recent_state_changes = state_history.last(3).first(2) # Ignore current state
660
+
661
+ # A valid connection was disconnected
662
+ most_recent_state_changes.last.fetch(:state) == Connection::STATE.Disconnected &&
663
+ most_recent_state_changes.first.fetch(:state) == Connection::STATE.Connected
664
+ end
665
+
653
666
  def use_fallback_if_disconnected?
654
667
  second_reconnect_attempt_for(:disconnected, 1)
655
668
  end
@@ -1,5 +1,5 @@
1
1
  module Ably
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  PROTOCOL_VERSION = '1.0'
4
4
 
5
5
  # Allow a variant to be configured for all instances of this client library
@@ -1178,6 +1178,27 @@ describe Ably::Realtime::Connection, 'failures', :event_machine do
1178
1178
  stop_reactor
1179
1179
  end
1180
1180
  end
1181
+
1182
+ it 'does not use a fallback host if the connection connects on the default host and then later becomes disconnected', em_timeout: 25 do
1183
+ request = 0
1184
+
1185
+ allow(connection).to receive(:create_transport).and_wrap_original do |wrapped_proc, host, *args, &block|
1186
+ expect(host).to eql(expected_host)
1187
+ request += 1
1188
+ wrapped_proc.call(host, *args, &block)
1189
+ end
1190
+
1191
+ connection.on(:connected) do
1192
+ if request <= 2
1193
+ EventMachine.add_timer(3) do
1194
+ # Force a disconnect
1195
+ connection.transport.unbind
1196
+ end
1197
+ else
1198
+ stop_reactor
1199
+ end
1200
+ end
1201
+ end
1181
1202
  end
1182
1203
 
1183
1204
  context ':fallback_hosts array is provided' do
@@ -1286,6 +1307,29 @@ describe Ably::Realtime::Connection, 'failures', :event_machine do
1286
1307
  end
1287
1308
  end
1288
1309
  end
1310
+
1311
+ it 'uses the correct host name for the WebSocket requests to the fallback hosts' do
1312
+ request = 0
1313
+ expect(connection).to receive(:create_transport).at_least(:once) do |host, port, uri|
1314
+ if request == 0 || request == expected_retry_attempts + 1
1315
+ expect(uri.hostname).to eql(expected_host)
1316
+ else
1317
+ expect(custom_hosts + [expected_host]).to include(uri.hostname)
1318
+ fallback_hosts_used << host if @suspended > 0
1319
+ end
1320
+ request += 1
1321
+ raise EventMachine::ConnectionError
1322
+ end
1323
+
1324
+ connection.on(:suspended) do
1325
+ @suspended += 1
1326
+
1327
+ if @suspended > 4
1328
+ expect(fallback_hosts_used.uniq).to match_array(custom_hosts + [expected_host])
1329
+ stop_reactor
1330
+ end
1331
+ end
1332
+ end
1289
1333
  end
1290
1334
 
1291
1335
  context ':fallback_hosts array is provided by an empty array' do
@@ -980,6 +980,7 @@ describe Ably::Realtime::Connection, :event_machine do
980
980
 
981
981
  context 'transport-level heartbeats are supported in the websocket transport' do
982
982
  it 'provides the heartbeats argument in the websocket connection params (#RTN23b)' do
983
+ skip 'Native heartbeats not yet supported in the WS driver https://github.com/ably/ably-ruby/issues/116'
983
984
  expect(EventMachine).to receive(:connect) do |host, port, transport, object, url|
984
985
  uri = URI.parse(url)
985
986
  expect(CGI::parse(uri.query)['heartbeats'][0]).to eql('false')
@@ -1007,6 +1008,7 @@ describe Ably::Realtime::Connection, :event_machine do
1007
1008
  let(:client_options) { default_options.merge(websocket_heartbeats_disabled: true) }
1008
1009
 
1009
1010
  it 'does not provide the heartbeats argument in the websocket connection params (#RTN23b)' do
1011
+ skip 'Native heartbeats not yet supported in the WS driver https://github.com/ably/ably-ruby/issues/116'
1010
1012
  expect(EventMachine).to receive(:connect) do |host, port, transport, object, url|
1011
1013
  uri = URI.parse(url)
1012
1014
  expect(CGI::parse(uri.query)['heartbeats'][0]).to be_nil
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.0.1
4
+ version: 1.0.2
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: 2017-05-11 00:00:00.000000000 Z
12
+ date: 2017-05-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
@@ -458,7 +458,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
458
458
  version: '0'
459
459
  requirements: []
460
460
  rubyforge_project:
461
- rubygems_version: 2.4.8
461
+ rubygems_version: 2.6.8
462
462
  signing_key:
463
463
  specification_version: 4
464
464
  summary: A Ruby client library for ably.io realtime messaging implemented using EventMachine