ably-rest 1.1.2 → 1.2.2
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 +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +1 -1
- data/MAINTAINERS.md +1 -0
- data/README.md +4 -2
- data/ably-rest.gemspec +15 -18
- data/lib/ably-rest.rb +2 -0
- data/lib/submodules/ably-ruby/.github/workflows/check.yml +50 -0
- data/lib/submodules/ably-ruby/CHANGELOG.md +200 -0
- data/lib/submodules/ably-ruby/COPYRIGHT +1 -0
- data/lib/submodules/ably-ruby/LICENSE +172 -11
- data/lib/submodules/ably-ruby/MAINTAINERS.md +1 -0
- data/lib/submodules/ably-ruby/README.md +24 -22
- data/lib/submodules/ably-ruby/SPEC.md +1020 -929
- data/lib/submodules/ably-ruby/UPDATING.md +30 -0
- data/lib/submodules/ably-ruby/ably.gemspec +16 -23
- data/lib/submodules/ably-ruby/lib/ably/agent.rb +3 -0
- data/lib/submodules/ably-ruby/lib/ably/auth.rb +20 -10
- data/lib/submodules/ably-ruby/lib/ably/exceptions.rb +8 -2
- data/lib/submodules/ably-ruby/lib/ably/logger.rb +4 -4
- data/lib/submodules/ably-ruby/lib/ably/models/channel_details.rb +59 -0
- data/lib/submodules/ably-ruby/lib/ably/models/channel_metrics.rb +84 -0
- data/lib/submodules/ably-ruby/lib/ably/models/channel_occupancy.rb +43 -0
- data/lib/submodules/ably-ruby/lib/ably/models/channel_options.rb +97 -0
- data/lib/submodules/ably-ruby/lib/ably/models/channel_status.rb +53 -0
- data/lib/submodules/ably-ruby/lib/ably/models/connection_details.rb +8 -0
- data/lib/submodules/ably-ruby/lib/ably/models/delta_extras.rb +29 -0
- data/lib/submodules/ably-ruby/lib/ably/models/device_details.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/models/error_info.rb +6 -2
- data/lib/submodules/ably-ruby/lib/ably/models/idiomatic_ruby_wrapper.rb +4 -0
- data/lib/submodules/ably-ruby/lib/ably/models/message.rb +28 -3
- data/lib/submodules/ably-ruby/lib/ably/models/presence_message.rb +14 -0
- data/lib/submodules/ably-ruby/lib/ably/models/protocol_message.rb +31 -14
- data/lib/submodules/ably-ruby/lib/ably/models/token_details.rb +7 -2
- data/lib/submodules/ably-ruby/lib/ably/models/token_request.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/modules/ably.rb +11 -1
- data/lib/submodules/ably-ruby/lib/ably/modules/channels_collection.rb +22 -2
- data/lib/submodules/ably-ruby/lib/ably/modules/conversions.rb +34 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/auth.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_manager.rb +19 -7
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_properties.rb +24 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_state_machine.rb +10 -1
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/publisher.rb +6 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel.rb +56 -28
- data/lib/submodules/ably-ruby/lib/ably/realtime/channels.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/realtime/client/incoming_message_dispatcher.rb +14 -6
- data/lib/submodules/ably-ruby/lib/ably/realtime/client.rb +9 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection/connection_manager.rb +13 -4
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection/connection_state_machine.rb +4 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection/websocket_transport.rb +67 -1
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection.rb +6 -5
- data/lib/submodules/ably-ruby/lib/ably/realtime/presence.rb +0 -14
- data/lib/submodules/ably-ruby/lib/ably/rest/channel.rb +44 -29
- data/lib/submodules/ably-ruby/lib/ably/rest/client.rb +60 -29
- data/lib/submodules/ably-ruby/lib/ably/rest/middleware/encoder.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/rest/middleware/exceptions.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/rest/middleware/external_exceptions.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/rest/middleware/fail_if_unsupported_mime_type.rb +5 -2
- data/lib/submodules/ably-ruby/lib/ably/rest/middleware/logger.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_json.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/util/crypto.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/version.rb +2 -14
- data/lib/submodules/ably-ruby/lib/ably.rb +1 -0
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/auth_spec.rb +4 -4
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_history_spec.rb +25 -0
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb +476 -21
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/channels_spec.rb +59 -7
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/client_spec.rb +72 -16
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_failures_spec.rb +85 -13
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_spec.rb +301 -34
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/message_spec.rb +77 -0
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_history_spec.rb +3 -59
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_spec.rb +84 -158
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/push_admin_spec.rb +3 -19
- data/lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb +24 -75
- data/lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb +8 -4
- data/lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb +141 -10
- data/lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb +23 -6
- data/lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb +146 -47
- data/lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb +61 -3
- data/lib/submodules/ably-ruby/spec/acceptance/rest/push_admin_spec.rb +3 -19
- data/lib/submodules/ably-ruby/spec/lib/unit/models/channel_options_spec.rb +52 -0
- data/lib/submodules/ably-ruby/spec/run_parallel_tests +2 -7
- data/lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb +131 -8
- data/lib/submodules/ably-ruby/spec/shared/model_behaviour.rb +1 -1
- data/lib/submodules/ably-ruby/spec/spec_helper.rb +12 -2
- data/lib/submodules/ably-ruby/spec/support/serialization_helper.rb +21 -0
- data/lib/submodules/ably-ruby/spec/support/test_app.rb +3 -3
- data/lib/submodules/ably-ruby/spec/unit/logger_spec.rb +6 -14
- data/lib/submodules/ably-ruby/spec/unit/models/channel_details_spec.rb +30 -0
- data/lib/submodules/ably-ruby/spec/unit/models/channel_metrics_spec.rb +42 -0
- data/lib/submodules/ably-ruby/spec/unit/models/channel_occupancy_spec.rb +17 -0
- data/lib/submodules/ably-ruby/spec/unit/models/channel_status_spec.rb +36 -0
- data/lib/submodules/ably-ruby/spec/unit/models/delta_extras_spec.rb +14 -0
- data/lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb +17 -1
- data/lib/submodules/ably-ruby/spec/unit/models/message_spec.rb +97 -0
- data/lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb +49 -0
- data/lib/submodules/ably-ruby/spec/unit/models/protocol_message_spec.rb +125 -27
- data/lib/submodules/ably-ruby/spec/unit/models/token_details_spec.rb +14 -0
- data/lib/submodules/ably-ruby/spec/unit/realtime/channel_spec.rb +3 -2
- data/lib/submodules/ably-ruby/spec/unit/realtime/channels_spec.rb +53 -15
- data/lib/submodules/ably-ruby/spec/unit/realtime/client_spec.rb +19 -6
- data/lib/submodules/ably-ruby/spec/unit/realtime/incoming_message_dispatcher_spec.rb +38 -0
- data/lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb +44 -1
- data/lib/submodules/ably-ruby/spec/unit/rest/channels_spec.rb +81 -14
- data/lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb +47 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/unit/client_spec.rb +30 -0
- metadata +88 -25
- data/lib/submodules/ably-ruby/.travis.yml +0 -19
|
@@ -5,7 +5,7 @@ module Ably
|
|
|
5
5
|
module Rest
|
|
6
6
|
module Middleware
|
|
7
7
|
# Encode the body of the message according to the mime type
|
|
8
|
-
class Encoder <
|
|
8
|
+
class Encoder < Faraday::Middleware
|
|
9
9
|
CONTENT_TYPE = 'Content-Type'.freeze unless defined? CONTENT_TYPE
|
|
10
10
|
|
|
11
11
|
def call(env)
|
|
@@ -6,7 +6,7 @@ module Ably
|
|
|
6
6
|
module Middleware
|
|
7
7
|
# HTTP exceptions raised by Ably due to an error status code
|
|
8
8
|
# Ably returns JSON/Msgpack error codes and messages so include this if possible in the exception messages
|
|
9
|
-
class Exceptions < Faraday::
|
|
9
|
+
class Exceptions < Faraday::Middleware
|
|
10
10
|
def on_complete(env)
|
|
11
11
|
if env.status >= 400
|
|
12
12
|
error_status_code = env.status
|
|
@@ -5,7 +5,7 @@ module Ably
|
|
|
5
5
|
module Middleware
|
|
6
6
|
# HTTP exceptions raised due to a status code error on a 3rd party site
|
|
7
7
|
# Used by auth calls
|
|
8
|
-
class ExternalExceptions < Faraday::
|
|
8
|
+
class ExternalExceptions < Faraday::Middleware
|
|
9
9
|
def on_complete(env)
|
|
10
10
|
if env.status >= 400
|
|
11
11
|
error_status_code = env.status
|
|
@@ -4,10 +4,13 @@ require 'json'
|
|
|
4
4
|
module Ably
|
|
5
5
|
module Rest
|
|
6
6
|
module Middleware
|
|
7
|
-
class FailIfUnsupportedMimeType < Faraday::
|
|
7
|
+
class FailIfUnsupportedMimeType < Faraday::Middleware
|
|
8
8
|
def on_complete(env)
|
|
9
9
|
unless env.response_headers['Ably-Middleware-Parsed'] == true
|
|
10
|
-
|
|
10
|
+
# Ignore empty body with success status code for no body response
|
|
11
|
+
return if env.body.to_s.empty? && env.status == 204
|
|
12
|
+
|
|
13
|
+
unless (500..599).include?(env.status)
|
|
11
14
|
raise Ably::Exceptions::InvalidResponseBody,
|
|
12
15
|
"Content Type #{env.response_headers['Content-Type']} is not supported by this client library"
|
|
13
16
|
end
|
|
@@ -4,7 +4,7 @@ require 'json'
|
|
|
4
4
|
module Ably
|
|
5
5
|
module Rest
|
|
6
6
|
module Middleware
|
|
7
|
-
class ParseJson < Faraday::
|
|
7
|
+
class ParseJson < Faraday::Middleware
|
|
8
8
|
def on_complete(env)
|
|
9
9
|
if env.response_headers['Content-Type'] == 'application/json'
|
|
10
10
|
env.body = parse(env.body) unless env.response_headers['Ably-Middleware-Parsed'] == true
|
|
@@ -4,7 +4,7 @@ require 'msgpack'
|
|
|
4
4
|
module Ably
|
|
5
5
|
module Rest
|
|
6
6
|
module Middleware
|
|
7
|
-
class ParseMessagePack < Faraday::
|
|
7
|
+
class ParseMessagePack < Faraday::Middleware
|
|
8
8
|
def on_complete(env)
|
|
9
9
|
if env.response_headers['Content-Type'] == 'application/x-msgpack'
|
|
10
10
|
env.body = parse(env.body) unless env.response_headers['Ably-Middleware-Parsed'] == true
|
|
@@ -30,7 +30,7 @@ module Ably::Util
|
|
|
30
30
|
# crypto.decrypt(decrypted) # => 'secret text'
|
|
31
31
|
#
|
|
32
32
|
def initialize(params)
|
|
33
|
-
@fixed_iv = params
|
|
33
|
+
@fixed_iv = params[:fixed_iv]
|
|
34
34
|
@cipher_params = Ably::Models::CipherParams(params)
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
module Ably
|
|
2
|
-
VERSION = '1.
|
|
3
|
-
PROTOCOL_VERSION = '1.
|
|
4
|
-
|
|
5
|
-
# Allow a variant to be configured for all instances of this client library
|
|
6
|
-
# such as ruby-rest-[VERSION]
|
|
7
|
-
|
|
8
|
-
# @api private
|
|
9
|
-
def self.lib_variant=(variant)
|
|
10
|
-
@lib_variant = variant
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.lib_variant
|
|
14
|
-
@lib_variant
|
|
15
|
-
end
|
|
2
|
+
VERSION = '1.2.2'
|
|
3
|
+
PROTOCOL_VERSION = '1.2'
|
|
16
4
|
|
|
17
5
|
# @api private
|
|
18
6
|
def self.major_minor_version_numeric
|
|
@@ -1058,7 +1058,7 @@ describe Ably::Realtime::Auth, :event_machine do
|
|
|
1058
1058
|
|
|
1059
1059
|
it 'disconnected includes and invalid signature message' do
|
|
1060
1060
|
client.connection.once(:disconnected) do |state_change|
|
|
1061
|
-
expect(state_change.reason.message.match(/
|
|
1061
|
+
expect(state_change.reason.message.match(/signature verification failed/i)).to_not be_nil
|
|
1062
1062
|
expect(state_change.reason.code).to eql(40144)
|
|
1063
1063
|
stop_reactor
|
|
1064
1064
|
end
|
|
@@ -1111,7 +1111,7 @@ describe Ably::Realtime::Auth, :event_machine do
|
|
|
1111
1111
|
|
|
1112
1112
|
it 'authentication fails and reason for disconnection is invalid signature' do
|
|
1113
1113
|
client.connection.once(:disconnected) do |state_change|
|
|
1114
|
-
expect(state_change.reason.message.match(/
|
|
1114
|
+
expect(state_change.reason.message.match(/signature verification failed/i)).to_not be_nil
|
|
1115
1115
|
expect(state_change.reason.code).to eql(40144)
|
|
1116
1116
|
stop_reactor
|
|
1117
1117
|
end
|
|
@@ -1143,7 +1143,7 @@ describe Ably::Realtime::Auth, :event_machine do
|
|
|
1143
1143
|
|
|
1144
1144
|
it 'fails with an invalid signature error' do
|
|
1145
1145
|
client.connection.once(:disconnected) do |state_change|
|
|
1146
|
-
expect(state_change.reason.message.match(/
|
|
1146
|
+
expect(state_change.reason.message.match(/signature verification failed/i)).to_not be_nil
|
|
1147
1147
|
expect(state_change.reason.code).to eql(40144)
|
|
1148
1148
|
stop_reactor
|
|
1149
1149
|
end
|
|
@@ -1237,7 +1237,7 @@ describe Ably::Realtime::Auth, :event_machine do
|
|
|
1237
1237
|
let(:basic_capability) { JSON.dump(channel_name => ['subscribe'], channel_with_publish_permissions => ['publish']) }
|
|
1238
1238
|
let(:auth_callback) do
|
|
1239
1239
|
lambda do |token_params|
|
|
1240
|
-
Faraday.get("#{auth_url}?keyName=#{key_name}&keySecret=#{key_secret}&capability=#{URI.escape(basic_capability)}").body
|
|
1240
|
+
Faraday.get("#{auth_url}?keyName=#{key_name}&keySecret=#{key_secret}&capability=#{URI::Parser.new.escape(basic_capability)}").body
|
|
1241
1241
|
end
|
|
1242
1242
|
end
|
|
1243
1243
|
let(:client_options) { default_options.merge(auth_callback: auth_callback, log_level: :error) }
|
|
@@ -183,6 +183,31 @@ describe Ably::Realtime::Channel, '#history', :event_machine do
|
|
|
183
183
|
end
|
|
184
184
|
end
|
|
185
185
|
|
|
186
|
+
context 'when channel receives update event after an attachment' do
|
|
187
|
+
before do
|
|
188
|
+
channel.on(:attached) do
|
|
189
|
+
channel.publish(event, message_after_attach) do
|
|
190
|
+
subsequent_serial = channel.properties.attach_serial.dup.tap { |serial| serial[-1] = '1' }
|
|
191
|
+
attached_message = Ably::Models::ProtocolMessage.new(action: 11, channel: channel_name, flags: 0, channel_serial: subsequent_serial)
|
|
192
|
+
client.connection.__incoming_protocol_msgbus__.publish :protocol_message, attached_message
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it 'updates attach_serial' do
|
|
198
|
+
rest_channel.publish event, message_before_attach
|
|
199
|
+
|
|
200
|
+
channel.on(:update) do
|
|
201
|
+
channel.history(until_attach: true) do |messages|
|
|
202
|
+
expect(messages.items.count).to eql(2)
|
|
203
|
+
stop_reactor
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
channel.attach
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
186
211
|
context 'and two pages of messages' do
|
|
187
212
|
it 'retrieves two pages of messages before channel was attached' do
|
|
188
213
|
10.times { rest_channel.publish event, message_before_attach }
|