ably 1.0.4 → 1.0.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 +5 -5
- data/.travis.yml +2 -0
- data/CHANGELOG.md +31 -2
- data/LICENSE +2 -2
- data/README.md +17 -7
- data/ably.gemspec +1 -1
- data/lib/ably/exceptions.rb +3 -1
- data/lib/ably/rest/client.rb +22 -3
- data/lib/ably/rest/middleware/exceptions.rb +2 -2
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/rest/auth_spec.rb +1 -1
- data/spec/acceptance/rest/channel_spec.rb +7 -1
- data/spec/acceptance/rest/client_spec.rb +95 -0
- data/spec/unit/rest/client_spec.rb +7 -0
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a05adf2fb91ff543ae2797812dce8bc9c3119cc5ebf9c4a4468a177f07e2587c
|
|
4
|
+
data.tar.gz: 97c229e631a871cdba553220677629bff959be160db9a864b8c5b712e26480d1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e3a2dc86d92459e6fe03721df934e819e504a39a6be899a42d3ea00b251e8dd8f465552e481451a024903ee199370a932addfdbda1962f441379fc5cb718ea73
|
|
7
|
+
data.tar.gz: db1ca5e7ae13cb490f469d72a58ee7ca8f1377a834e200ade85045f0b341f411aaed966a4c7d2d85de9dd7cd55084a8369ff39505e76508ce744549723b305a8
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,21 +1,50 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
-
## [v1.0.
|
|
3
|
+
## [v1.0.5](https://github.com/ably/ably-ruby/tree/v1.0.5)
|
|
4
4
|
|
|
5
|
+
[Full Changelog](https://github.com/ably/ably-ruby/compare/v1.0.4...v1.0.5)
|
|
6
|
+
|
|
7
|
+
**Implemented enhancements:**
|
|
8
|
+
|
|
9
|
+
- Add supported platforms to README file [\#128](https://github.com/ably/ably-ruby/issues/128)
|
|
10
|
+
- Add Ruby 2.1 and 2.3 to Travis tests [\#130](https://github.com/ably/ably-ruby/pull/130) ([funkyboy](https://github.com/funkyboy))
|
|
11
|
+
|
|
12
|
+
**Closed issues:**
|
|
13
|
+
|
|
14
|
+
- Cannot get realtime to work [\#127](https://github.com/ably/ably-ruby/issues/127)
|
|
15
|
+
|
|
16
|
+
**Merged pull requests:**
|
|
17
|
+
|
|
18
|
+
- Improve pagination history test [\#138](https://github.com/ably/ably-ruby/pull/138) ([funkyboy](https://github.com/funkyboy))
|
|
19
|
+
- Fix failing auth test [\#135](https://github.com/ably/ably-ruby/pull/135) ([funkyboy](https://github.com/funkyboy))
|
|
20
|
+
- Add submodule instructions to Contributing section [\#134](https://github.com/ably/ably-ruby/pull/134) ([funkyboy](https://github.com/funkyboy))
|
|
21
|
+
- Add request\_id option to client [\#133](https://github.com/ably/ably-ruby/pull/133) ([funkyboy](https://github.com/funkyboy))
|
|
22
|
+
- Update README with supported platforms [\#131](https://github.com/ably/ably-ruby/pull/131) ([funkyboy](https://github.com/funkyboy))
|
|
23
|
+
|
|
24
|
+
## [v1.0.4](https://github.com/ably/ably-ruby/tree/v1.0.4) (2017-05-31)
|
|
25
|
+
[Full Changelog](https://github.com/ably/ably-ruby/compare/v1.0.3...v1.0.4)
|
|
26
|
+
|
|
27
|
+
## [v1.0.3](https://github.com/ably/ably-ruby/tree/v1.0.3) (2017-05-31)
|
|
28
|
+
[Full Changelog](https://github.com/ably/ably-ruby/compare/v1.0.2...v1.0.3)
|
|
29
|
+
|
|
30
|
+
## [v1.0.2](https://github.com/ably/ably-ruby/tree/v1.0.2) (2017-05-16)
|
|
5
31
|
[Full Changelog](https://github.com/ably/ably-ruby/compare/v1.0.1...v1.0.2)
|
|
6
32
|
|
|
7
33
|
**Fixed bugs:**
|
|
8
34
|
|
|
9
35
|
- 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)
|
|
11
36
|
|
|
12
37
|
**Merged pull requests:**
|
|
13
38
|
|
|
14
39
|
- Fallback fixes [\#120](https://github.com/ably/ably-ruby/pull/120) ([mattheworiordan](https://github.com/mattheworiordan))
|
|
40
|
+
- Channel name encoding error for REST requests [\#119](https://github.com/ably/ably-ruby/pull/119) ([mattheworiordan](https://github.com/mattheworiordan))
|
|
15
41
|
|
|
16
42
|
## [v1.0.1](https://github.com/ably/ably-ruby/tree/v1.0.1) (2017-05-11)
|
|
17
43
|
[Full Changelog](https://github.com/ably/ably-ruby/compare/v1.0.0...v1.0.1)
|
|
18
44
|
|
|
45
|
+
## [v1.1.0-beta.push.1](https://github.com/ably/ably-ruby/tree/v1.1.0-beta.push.1) (2017-04-25)
|
|
46
|
+
[Full Changelog](https://github.com/ably/ably-ruby/compare/v1.0.0...v1.1.0-beta.push.1)
|
|
47
|
+
|
|
19
48
|
## [v1.0.0](https://github.com/ably/ably-ruby/tree/v1.0.0) (2017-03-07)
|
|
20
49
|
[Full Changelog](https://github.com/ably/ably-ruby/compare/v0.8.15...v1.0.0)
|
|
21
50
|
|
data/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Copyright (c)
|
|
1
|
+
Copyright (c) 2015-2017 Ably
|
|
2
2
|
|
|
3
|
-
Copyright
|
|
3
|
+
Copyright 2015-2017 Ably Real-time Ltd
|
|
4
4
|
|
|
5
5
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
you may not use this file except in compliance with the License.
|
data/README.md
CHANGED
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
A Ruby client library for [ably.io](https://www.ably.io), the realtime messaging service.
|
|
7
7
|
|
|
8
|
+
## Supported platforms
|
|
9
|
+
|
|
10
|
+
This SDK supports Ruby 1.9.3+.
|
|
11
|
+
|
|
12
|
+
We regression-test the SDK against a selection of Ruby versions (which we update over time, but usually consists of mainstream and widely used versions). Please refer to [.travis.yml](./.travis.yml) for the set of versions that currently undergo CI testing.
|
|
13
|
+
|
|
14
|
+
If you find any compatibility issues, please [do raise an issue](https://github.com/ably/ably-ruby/issues/new) in this repository or [contact Ably customer support](https://support.ably.io/) for advice.
|
|
15
|
+
|
|
8
16
|
## Documentation
|
|
9
17
|
|
|
10
18
|
Visit https://www.ably.io/documentation for a complete API reference and more examples.
|
|
@@ -296,21 +304,23 @@ To see what has changed in recent versions of Bundler, see the [CHANGELOG](CHANG
|
|
|
296
304
|
## Contributing
|
|
297
305
|
|
|
298
306
|
1. Fork it
|
|
299
|
-
2.
|
|
300
|
-
3.
|
|
301
|
-
4.
|
|
302
|
-
|
|
303
|
-
|
|
307
|
+
2. When pulling to local, make sure to also pull the `ably-common` repo (`git submodule init && git submodule update`)
|
|
308
|
+
3. Create your feature branch (`git checkout -b my-new-feature`)
|
|
309
|
+
4. Commit your changes (`git commit -am 'Add some feature'`)
|
|
310
|
+
5. Ensure you have added suitable tests and the test suite is passing(`bundle exec rspec`)
|
|
311
|
+
6. Push to the branch (`git push origin my-new-feature`)
|
|
312
|
+
7. Create a new Pull Request
|
|
304
313
|
|
|
305
|
-
## Release
|
|
314
|
+
## Release process
|
|
306
315
|
|
|
307
316
|
This library uses [semantic versioning](http://semver.org/). For each release, the following needs to be done:
|
|
308
317
|
|
|
309
318
|
* Update the version number in [version.rb](./lib/ably/version.rb) and commit the change.
|
|
310
319
|
* Run [`github_changelog_generator`](https://github.com/skywinder/Github-Changelog-Generator) to automate the update of the [CHANGELOG](./CHANGELOG.md). Once the `CHANGELOG` update has completed, manually change the `Unreleased` heading and link with the current version number such as `v1.0.0`. Also ensure that the `Full Changelog` link points to the new version tag instead of the `HEAD`. Commit this change.
|
|
311
320
|
* Add a tag and push to origin such as `git tag v1.0.0 && git push origin v1.0.0`
|
|
321
|
+
* Visit [https://github.com/ably/ably-ruby/tags](https://github.com/ably/ably-ruby/tags) and `Add release notes` for the release including links to the changelog entry.
|
|
312
322
|
* Run `rake release` to publish the gem to [Rubygems](http://www.rubydoc.info/gems/ably)
|
|
313
323
|
|
|
314
324
|
## License
|
|
315
325
|
|
|
316
|
-
Copyright (c)
|
|
326
|
+
Copyright (c) 2017 Ably Real-time Ltd, Licensed under the Apache License, Version 2.0. Refer to [LICENSE](LICENSE) for the license terms.
|
data/ably.gemspec
CHANGED
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
|
11
11
|
spec.description = %q{A Ruby client library for ably.io realtime messaging}
|
|
12
12
|
spec.summary = %q{A Ruby client library for ably.io realtime messaging implemented using EventMachine}
|
|
13
13
|
spec.homepage = 'http://github.com/ably/ably-ruby'
|
|
14
|
-
spec.license = 'Apache
|
|
14
|
+
spec.license = 'Apache-2.0'
|
|
15
15
|
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
data/lib/ably/exceptions.rb
CHANGED
|
@@ -13,7 +13,7 @@ module Ably
|
|
|
13
13
|
# @!attribute [r] code
|
|
14
14
|
# @return [String] Ably specific error code
|
|
15
15
|
class BaseAblyException < StandardError
|
|
16
|
-
attr_reader :status, :code
|
|
16
|
+
attr_reader :status, :code, :request_id
|
|
17
17
|
|
|
18
18
|
def initialize(message, status = nil, code = nil, base_exception = nil, options = {})
|
|
19
19
|
super message
|
|
@@ -25,6 +25,7 @@ module Ably
|
|
|
25
25
|
@code = code
|
|
26
26
|
@code ||= base_exception.code if base_exception && base_exception.respond_to?(:code)
|
|
27
27
|
@code ||= options[:fallback_code]
|
|
28
|
+
@request_id ||= options[:request_id]
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
def to_s
|
|
@@ -34,6 +35,7 @@ module Ably
|
|
|
34
35
|
additional_info << "code: #{code}" if code
|
|
35
36
|
additional_info << "http status: #{status}" if status
|
|
36
37
|
additional_info << "base exception: #{@base_exception.class}" if @base_exception
|
|
38
|
+
additional_info << "request_id: #{request_id}" if request_id
|
|
37
39
|
message << "(#{additional_info.join(', ')})"
|
|
38
40
|
end
|
|
39
41
|
message.join(' ')
|
data/lib/ably/rest/client.rb
CHANGED
|
@@ -83,6 +83,10 @@ module Ably
|
|
|
83
83
|
# if empty or nil then fallback host functionality is disabled
|
|
84
84
|
attr_reader :fallback_hosts
|
|
85
85
|
|
|
86
|
+
# Whethere the {Client} has to add a random identifier to the path of a request
|
|
87
|
+
# @return [Boolean]
|
|
88
|
+
attr_reader :add_request_ids
|
|
89
|
+
|
|
86
90
|
# Creates a {Ably::Rest::Client Rest Client} and configures the {Ably::Auth} object for the connection.
|
|
87
91
|
#
|
|
88
92
|
# @param [Hash,String] options an options Hash used to configure the client and the authentication, or String with an API key or Token ID
|
|
@@ -146,6 +150,7 @@ module Ably
|
|
|
146
150
|
@custom_host = options.delete(:rest_host)
|
|
147
151
|
@custom_port = options.delete(:port)
|
|
148
152
|
@custom_tls_port = options.delete(:tls_port)
|
|
153
|
+
@add_request_ids = options.delete(:add_request_ids)
|
|
149
154
|
|
|
150
155
|
if options[:fallback_hosts_use_default] && options[:fallback_jhosts]
|
|
151
156
|
raise ArgumentError, "fallback_hosts_use_default cannot be set to trye when fallback_jhosts is also provided"
|
|
@@ -434,11 +439,25 @@ module Ably
|
|
|
434
439
|
max_retry_duration = http_defaults.fetch(:max_retry_duration)
|
|
435
440
|
requested_at = Time.now
|
|
436
441
|
retry_count = 0
|
|
442
|
+
request_id = nil
|
|
443
|
+
if add_request_ids
|
|
444
|
+
params = if params.nil?
|
|
445
|
+
{}
|
|
446
|
+
else
|
|
447
|
+
params.dup
|
|
448
|
+
end
|
|
449
|
+
request_id = SecureRandom.urlsafe_base64(10)
|
|
450
|
+
params[:request_id] = request_id
|
|
451
|
+
end
|
|
437
452
|
|
|
438
453
|
begin
|
|
439
454
|
use_fallback = can_fallback_to_alternate_ably_host? && retry_count > 0
|
|
440
455
|
|
|
441
456
|
connection(use_fallback: use_fallback).send(method, path, params) do |request|
|
|
457
|
+
if add_request_ids
|
|
458
|
+
request.options.context = {} if request.options.context.nil?
|
|
459
|
+
request.options.context[:request_id] = request_id
|
|
460
|
+
end
|
|
442
461
|
unless options[:send_auth_header] == false
|
|
443
462
|
request.headers[:authorization] = auth.auth_header
|
|
444
463
|
if options[:headers]
|
|
@@ -456,12 +475,12 @@ module Ably
|
|
|
456
475
|
logger.warn { "Ably::Rest::Client - Retry #{retry_count} for #{method} #{path} #{params} as initial attempt failed: #{error}" }
|
|
457
476
|
retry
|
|
458
477
|
end
|
|
459
|
-
|
|
460
478
|
case error
|
|
461
479
|
when Faraday::TimeoutError
|
|
462
|
-
raise Ably::Exceptions::ConnectionTimeout.new(error.message, nil, 80014, error)
|
|
480
|
+
raise Ably::Exceptions::ConnectionTimeout.new(error.message, nil, 80014, error, { request_id: request_id })
|
|
463
481
|
when Faraday::ClientError
|
|
464
|
-
|
|
482
|
+
# request_id is also available in the request context
|
|
483
|
+
raise Ably::Exceptions::ConnectionError.new(error.message, nil, 80000, error, { request_id: request_id })
|
|
465
484
|
else
|
|
466
485
|
raise error
|
|
467
486
|
end
|
|
@@ -27,8 +27,8 @@ module Ably
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
message = 'Unknown server error' if message.to_s.strip == ''
|
|
30
|
-
|
|
31
|
-
exception_args = [message, error_status_code, error_code]
|
|
30
|
+
request_id = env.request.context[:request_id] if env.request.context
|
|
31
|
+
exception_args = [message, error_status_code, error_code, nil, { request_id: request_id }]
|
|
32
32
|
|
|
33
33
|
if env.status >= 500
|
|
34
34
|
raise Ably::Exceptions::ServerError.new(*exception_args)
|
data/lib/ably/version.rb
CHANGED
|
@@ -1083,7 +1083,7 @@ describe Ably::Auth do
|
|
|
1083
1083
|
expect { auth.request_token(timestamp: Time.now - 180) }.to raise_error do |error|
|
|
1084
1084
|
expect(error).to be_a(Ably::Exceptions::UnauthorizedRequest)
|
|
1085
1085
|
expect(error.status).to eql(401)
|
|
1086
|
-
expect(error.code).to eql(
|
|
1086
|
+
expect(error.code).to eql(40104)
|
|
1087
1087
|
end
|
|
1088
1088
|
end
|
|
1089
1089
|
|
|
@@ -343,7 +343,13 @@ describe Ably::Rest::Channel do
|
|
|
343
343
|
|
|
344
344
|
# Page 3
|
|
345
345
|
expect(page_3.items.size).to eql(1)
|
|
346
|
-
|
|
346
|
+
# This test should be deterministic but it's not.
|
|
347
|
+
# Sometimes the backend, to avoid too much work, returns a `next` link that contains empty reults.
|
|
348
|
+
if page_3.next
|
|
349
|
+
expect(page_3.next.items.length).to eql(0)
|
|
350
|
+
else
|
|
351
|
+
expect(page_3).to be_last
|
|
352
|
+
end
|
|
347
353
|
end
|
|
348
354
|
|
|
349
355
|
context 'direction' do
|
|
@@ -959,5 +959,100 @@ describe Ably::Rest::Client do
|
|
|
959
959
|
end
|
|
960
960
|
end
|
|
961
961
|
end
|
|
962
|
+
|
|
963
|
+
context 'request_id generation' do
|
|
964
|
+
context 'Timeout error' do
|
|
965
|
+
context 'with request_id', :webmock do
|
|
966
|
+
let(:custom_logger) do
|
|
967
|
+
Class.new do
|
|
968
|
+
def initialize
|
|
969
|
+
@messages = []
|
|
970
|
+
end
|
|
971
|
+
|
|
972
|
+
[:fatal, :error, :warn, :info, :debug].each do |severity|
|
|
973
|
+
define_method severity do |message, &block|
|
|
974
|
+
message_val = [message]
|
|
975
|
+
message_val << block.call if block
|
|
976
|
+
|
|
977
|
+
@messages << [severity, message_val.compact.join(' ')]
|
|
978
|
+
end
|
|
979
|
+
end
|
|
980
|
+
|
|
981
|
+
def logs
|
|
982
|
+
@messages
|
|
983
|
+
end
|
|
984
|
+
|
|
985
|
+
def level
|
|
986
|
+
1
|
|
987
|
+
end
|
|
988
|
+
|
|
989
|
+
def level=(new_level)
|
|
990
|
+
end
|
|
991
|
+
end
|
|
992
|
+
end
|
|
993
|
+
let(:custom_logger_object) { custom_logger.new }
|
|
994
|
+
let(:client_options) { default_options.merge(key: api_key, logger: custom_logger_object, add_request_ids: true) }
|
|
995
|
+
before do
|
|
996
|
+
@request_id = nil
|
|
997
|
+
stub_request(:get, Addressable::Template.new("#{client.endpoint}/time{?request_id}")).with do |request|
|
|
998
|
+
@request_id = request.uri.query_values['request_id']
|
|
999
|
+
end.to_return do
|
|
1000
|
+
raise Faraday::TimeoutError.new('timeout error message')
|
|
1001
|
+
end
|
|
1002
|
+
end
|
|
1003
|
+
it 'has an error with the same request_id of the request' do
|
|
1004
|
+
expect{ client.time }.to raise_error(Ably::Exceptions::ConnectionTimeout, /#{@request_id}/)
|
|
1005
|
+
expect(custom_logger_object.logs.find { |severity, message| message.match(/#{@request_id}/i)} ).to_not be_nil
|
|
1006
|
+
end
|
|
1007
|
+
end
|
|
1008
|
+
|
|
1009
|
+
context 'when specifying fallback hosts', :webmock do
|
|
1010
|
+
let(:client_options) { { key: api_key, fallback_hosts_use_default: true, add_request_ids: true } }
|
|
1011
|
+
let(:requests) { [] }
|
|
1012
|
+
before do
|
|
1013
|
+
@request_id = nil
|
|
1014
|
+
hosts = Ably::FALLBACK_HOSTS + ['rest.ably.io']
|
|
1015
|
+
hosts.each do |host|
|
|
1016
|
+
stub_request(:get, Addressable::Template.new("https://#{host.downcase}/time{?request_id}")).with do |request|
|
|
1017
|
+
@request_id = request.uri.query_values['request_id']
|
|
1018
|
+
requests << @request_id
|
|
1019
|
+
end.to_return do
|
|
1020
|
+
raise Faraday::TimeoutError.new('timeout error message')
|
|
1021
|
+
end
|
|
1022
|
+
end
|
|
1023
|
+
end
|
|
1024
|
+
it 'request_id is the same across retries' do
|
|
1025
|
+
expect{ client.time }.to raise_error(Ably::Exceptions::ConnectionTimeout, /#{@request_id}/)
|
|
1026
|
+
expect(requests.uniq.count).to eql(1)
|
|
1027
|
+
expect(requests.uniq.first).to eql(@request_id)
|
|
1028
|
+
end
|
|
1029
|
+
end
|
|
1030
|
+
|
|
1031
|
+
context 'without request_id' do
|
|
1032
|
+
let(:client_options) { default_options.merge(key: api_key, http_request_timeout: 0) }
|
|
1033
|
+
it 'does not include request_id in ConnectionTimeout error' do
|
|
1034
|
+
begin
|
|
1035
|
+
client.stats
|
|
1036
|
+
rescue Ably::Exceptions::ConnectionTimeout => err
|
|
1037
|
+
expect(err.request_id).to eql(nil)
|
|
1038
|
+
end
|
|
1039
|
+
end
|
|
1040
|
+
end
|
|
1041
|
+
end
|
|
1042
|
+
|
|
1043
|
+
context 'UnauthorizedRequest nonce error' do
|
|
1044
|
+
let(:token_params) { { nonce: "samenonce_#{protocol}", timestamp: Time.now.to_i } }
|
|
1045
|
+
it 'includes request_id in UnauthorizedRequest error due to replayed nonce' do
|
|
1046
|
+
client1 = Ably::Rest::Client.new(default_options.merge(key: api_key))
|
|
1047
|
+
client2 = Ably::Rest::Client.new(default_options.merge(key: api_key, add_request_ids: true))
|
|
1048
|
+
expect { client1.auth.request_token(token_params) }.not_to raise_error
|
|
1049
|
+
begin
|
|
1050
|
+
client2.auth.request_token(token_params)
|
|
1051
|
+
rescue Ably::Exceptions::UnauthorizedRequest => err
|
|
1052
|
+
expect(err.request_id).to_not eql(nil)
|
|
1053
|
+
end
|
|
1054
|
+
end
|
|
1055
|
+
end
|
|
1056
|
+
end
|
|
962
1057
|
end
|
|
963
1058
|
end
|
|
@@ -50,4 +50,11 @@ describe Ably::Rest::Client do
|
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
|
+
|
|
54
|
+
context 'request_id generation' do
|
|
55
|
+
let(:client_options) { { key: 'appid.keyuid:keysecret', add_request_ids: true } }
|
|
56
|
+
it 'includes request_id in URL' do
|
|
57
|
+
expect(subject.add_request_ids).to eql(true)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
53
60
|
end
|
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.
|
|
4
|
+
version: 1.0.5
|
|
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:
|
|
12
|
+
date: 2018-04-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: eventmachine
|
|
@@ -440,7 +440,7 @@ files:
|
|
|
440
440
|
- spec/unit/util/pub_sub_spec.rb
|
|
441
441
|
homepage: http://github.com/ably/ably-ruby
|
|
442
442
|
licenses:
|
|
443
|
-
- Apache
|
|
443
|
+
- Apache-2.0
|
|
444
444
|
metadata: {}
|
|
445
445
|
post_install_message:
|
|
446
446
|
rdoc_options: []
|
|
@@ -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.
|
|
461
|
+
rubygems_version: 2.7.6
|
|
462
462
|
signing_key:
|
|
463
463
|
specification_version: 4
|
|
464
464
|
summary: A Ruby client library for ably.io realtime messaging implemented using EventMachine
|