ably-rest 1.0.5 → 1.1.3
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 +6 -3
- data/CHANGELOG.md +1 -1
- data/LICENSE +1 -1
- data/README.md +26 -7
- data/SPEC.md +2003 -1605
- data/ably-rest.gemspec +4 -2
- data/lib/submodules/ably-ruby/.editorconfig +14 -0
- data/lib/submodules/ably-ruby/.travis.yml +10 -8
- data/lib/submodules/ably-ruby/CHANGELOG.md +97 -1
- data/lib/submodules/ably-ruby/LICENSE +1 -3
- data/lib/submodules/ably-ruby/README.md +12 -7
- data/lib/submodules/ably-ruby/Rakefile +32 -0
- data/lib/submodules/ably-ruby/SPEC.md +1277 -835
- data/lib/submodules/ably-ruby/ably.gemspec +17 -11
- data/lib/submodules/ably-ruby/lib/ably/auth.rb +34 -8
- data/lib/submodules/ably-ruby/lib/ably/exceptions.rb +10 -4
- data/lib/submodules/ably-ruby/lib/ably/logger.rb +8 -2
- data/lib/submodules/ably-ruby/lib/ably/models/channel_state_change.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/models/connection_state_change.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/models/device_details.rb +87 -0
- data/lib/submodules/ably-ruby/lib/ably/models/device_push_details.rb +86 -0
- data/lib/submodules/ably-ruby/lib/ably/models/error_info.rb +23 -2
- data/lib/submodules/ably-ruby/lib/ably/models/idiomatic_ruby_wrapper.rb +12 -12
- data/lib/submodules/ably-ruby/lib/ably/models/message.rb +6 -4
- data/lib/submodules/ably-ruby/lib/ably/models/presence_message.rb +6 -4
- data/lib/submodules/ably-ruby/lib/ably/models/protocol_message.rb +32 -2
- data/lib/submodules/ably-ruby/lib/ably/models/push_channel_subscription.rb +89 -0
- data/lib/submodules/ably-ruby/lib/ably/modules/async_wrapper.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/modules/conversions.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/modules/encodeable.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/modules/event_emitter.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/modules/exception_codes.rb +128 -0
- data/lib/submodules/ably-ruby/lib/ably/modules/model_common.rb +15 -2
- data/lib/submodules/ably-ruby/lib/ably/modules/safe_deferrable.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/modules/safe_yield.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/modules/state_emitter.rb +5 -5
- data/lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/realtime.rb +1 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/auth.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel.rb +27 -105
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_manager.rb +4 -8
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_state_machine.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/publisher.rb +74 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/channel/push_channel.rb +62 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/client.rb +91 -3
- data/lib/submodules/ably-ruby/lib/ably/realtime/client/incoming_message_dispatcher.rb +9 -4
- data/lib/submodules/ably-ruby/lib/ably/realtime/client/outgoing_message_dispatcher.rb +1 -1
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection.rb +45 -26
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection/connection_manager.rb +25 -9
- data/lib/submodules/ably-ruby/lib/ably/realtime/connection/websocket_transport.rb +2 -2
- data/lib/submodules/ably-ruby/lib/ably/realtime/presence.rb +7 -7
- data/lib/submodules/ably-ruby/lib/ably/realtime/presence/members_map.rb +9 -9
- data/lib/submodules/ably-ruby/lib/ably/realtime/push.rb +40 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/push/admin.rb +61 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/push/channel_subscriptions.rb +108 -0
- data/lib/submodules/ably-ruby/lib/ably/realtime/push/device_registrations.rb +105 -0
- data/lib/submodules/ably-ruby/lib/ably/rest.rb +1 -0
- data/lib/submodules/ably-ruby/lib/ably/rest/channel.rb +54 -18
- data/lib/submodules/ably-ruby/lib/ably/rest/channel/push_channel.rb +62 -0
- data/lib/submodules/ably-ruby/lib/ably/rest/client.rb +171 -41
- data/lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb +17 -1
- data/lib/submodules/ably-ruby/lib/ably/rest/presence.rb +1 -0
- data/lib/submodules/ably-ruby/lib/ably/rest/push.rb +42 -0
- data/lib/submodules/ably-ruby/lib/ably/rest/push/admin.rb +54 -0
- data/lib/submodules/ably-ruby/lib/ably/rest/push/channel_subscriptions.rb +121 -0
- data/lib/submodules/ably-ruby/lib/ably/rest/push/device_registrations.rb +103 -0
- data/lib/submodules/ably-ruby/lib/ably/version.rb +7 -2
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/auth_spec.rb +253 -49
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_history_spec.rb +33 -21
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb +180 -62
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/client_spec.rb +155 -2
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_failures_spec.rb +293 -13
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_spec.rb +142 -39
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/message_spec.rb +38 -36
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_history_spec.rb +12 -3
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_spec.rb +207 -173
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/push_admin_spec.rb +736 -0
- data/lib/submodules/ably-ruby/spec/acceptance/realtime/push_spec.rb +27 -0
- data/lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb +62 -51
- data/lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb +2 -2
- data/lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb +79 -4
- data/lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb +6 -0
- data/lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb +318 -74
- data/lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb +158 -6
- data/lib/submodules/ably-ruby/spec/acceptance/rest/push_admin_spec.rb +952 -0
- data/lib/submodules/ably-ruby/spec/acceptance/rest/push_spec.rb +25 -0
- data/lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb +1 -1
- data/lib/submodules/ably-ruby/spec/run_parallel_tests +33 -0
- data/lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb +1 -9
- data/lib/submodules/ably-ruby/spec/spec_helper.rb +3 -1
- data/lib/submodules/ably-ruby/spec/support/debug_failure_helper.rb +9 -5
- data/lib/submodules/ably-ruby/spec/support/event_emitter_helper.rb +31 -0
- data/lib/submodules/ably-ruby/spec/support/event_machine_helper.rb +1 -1
- data/lib/submodules/ably-ruby/spec/support/test_app.rb +2 -2
- data/lib/submodules/ably-ruby/spec/support/test_logger_helper.rb +42 -0
- data/lib/submodules/ably-ruby/spec/unit/logger_spec.rb +11 -12
- data/lib/submodules/ably-ruby/spec/unit/models/device_details_spec.rb +102 -0
- data/lib/submodules/ably-ruby/spec/unit/models/device_push_details_spec.rb +101 -0
- data/lib/submodules/ably-ruby/spec/unit/models/error_info_spec.rb +51 -3
- data/lib/submodules/ably-ruby/spec/unit/models/message_spec.rb +17 -2
- data/lib/submodules/ably-ruby/spec/unit/models/presence_message_spec.rb +1 -1
- data/lib/submodules/ably-ruby/spec/unit/models/push_channel_subscription_spec.rb +86 -0
- data/lib/submodules/ably-ruby/spec/unit/modules/async_wrapper_spec.rb +2 -2
- data/lib/submodules/ably-ruby/spec/unit/modules/enum_spec.rb +1 -1
- data/lib/submodules/ably-ruby/spec/unit/modules/event_emitter_spec.rb +3 -3
- data/lib/submodules/ably-ruby/spec/unit/modules/state_emitter_spec.rb +10 -10
- data/lib/submodules/ably-ruby/spec/unit/realtime/channel_spec.rb +1 -1
- data/lib/submodules/ably-ruby/spec/unit/realtime/client_spec.rb +13 -1
- data/lib/submodules/ably-ruby/spec/unit/realtime/connection_spec.rb +2 -2
- data/lib/submodules/ably-ruby/spec/unit/realtime/presence_spec.rb +1 -1
- data/lib/submodules/ably-ruby/spec/unit/realtime/push_channel_spec.rb +36 -0
- data/lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb +30 -1
- data/lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb +30 -0
- data/lib/submodules/ably-ruby/spec/unit/rest/push_channel_spec.rb +36 -0
- data/lib/submodules/ably-ruby/spec/unit/util/pub_sub_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -0
- metadata +51 -10
@@ -144,11 +144,11 @@ module Ably::Models
|
|
144
144
|
@attributes
|
145
145
|
end
|
146
146
|
|
147
|
-
# Takes the underlying Hash object and returns it in as a JSON ready Hash object using
|
147
|
+
# Takes the underlying Hash object and returns it in as a JSON ready Hash object using camelCase for compability with the Ably service.
|
148
148
|
# Note name clashes are ignored and will result in loss of one or more values
|
149
149
|
# @example
|
150
150
|
# wrapper = IdiomaticRubyWrapper({ 'mixedCase': true, mixed_case: false, 'snake_case': 1 })
|
151
|
-
# wrapper.as_json
|
151
|
+
# wrapper.as_json => { 'mixedCase': true, 'snakeCase': 1 }
|
152
152
|
def as_json(*args)
|
153
153
|
attributes.each_with_object({}) do |key_val, new_hash|
|
154
154
|
key = key_val[0]
|
@@ -161,7 +161,7 @@ module Ably::Models
|
|
161
161
|
end
|
162
162
|
|
163
163
|
# Converts the current wrapped mixedCase object to JSON
|
164
|
-
# using
|
164
|
+
# using snakedCase syntax as expected by the Realtime API
|
165
165
|
def to_json(*args)
|
166
166
|
as_json(args).to_json
|
167
167
|
end
|
@@ -170,7 +170,7 @@ module Ably::Models
|
|
170
170
|
# Note name clashes are ignored and will result in loss of one or more values
|
171
171
|
# @example
|
172
172
|
# wrapper = IdiomaticRubyWrapper({ 'mixedCase': true, mixed_case: false, 'snake_case': 1 })
|
173
|
-
# wrapper.to_hash
|
173
|
+
# wrapper.to_hash => { mixed_case: true, snake_case: 1 }
|
174
174
|
def to_hash(*args)
|
175
175
|
each_with_object({}) do |key_val, object|
|
176
176
|
key, val = key_val
|
@@ -210,14 +210,14 @@ module Ably::Models
|
|
210
210
|
# key is not found in mixedCase.
|
211
211
|
def source_key_for(symbolized_key)
|
212
212
|
format_preferences = [
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
213
|
+
lambda { |key_sym| convert_to_mixed_case(key_sym) },
|
214
|
+
lambda { |key_sym| key_sym.to_sym },
|
215
|
+
lambda { |key_sym| key_sym.to_s },
|
216
|
+
lambda { |key_sym| convert_to_mixed_case(key_sym).to_sym },
|
217
|
+
lambda { |key_sym| convert_to_lower_case(key_sym) },
|
218
|
+
lambda { |key_sym| convert_to_lower_case(key_sym).to_sym },
|
219
|
+
lambda { |key_sym| convert_to_mixed_case(key_sym, force_camel: true) },
|
220
|
+
lambda { |key_sym| convert_to_mixed_case(key_sym, force_camel: true).to_sym }
|
221
221
|
]
|
222
222
|
|
223
223
|
preferred_format = format_preferences.detect do |format|
|
@@ -62,9 +62,11 @@ module Ably::Models
|
|
62
62
|
|
63
63
|
set_attributes_object attributes
|
64
64
|
|
65
|
-
ensure_utf_8
|
66
|
-
ensure_utf_8
|
67
|
-
ensure_utf_8
|
65
|
+
self.attributes[:name] = ensure_utf_8(:name, name, allow_nil: true) if name
|
66
|
+
self.attributes[:client_id] = ensure_utf_8(:client_id, client_id, allow_nil: true) if client_id
|
67
|
+
self.attributes[:encoding] = ensure_utf_8(:encoding, encoding, allow_nil: true) if encoding
|
68
|
+
|
69
|
+
self.attributes.freeze
|
68
70
|
end
|
69
71
|
|
70
72
|
%w( name client_id encoding ).each do |attribute|
|
@@ -145,7 +147,7 @@ module Ably::Models
|
|
145
147
|
end
|
146
148
|
|
147
149
|
def set_attributes_object(new_attributes)
|
148
|
-
@attributes = IdiomaticRubyWrapper(new_attributes.clone
|
150
|
+
@attributes = IdiomaticRubyWrapper(new_attributes.clone, stop_at: [:data, :extras])
|
149
151
|
end
|
150
152
|
|
151
153
|
def logger
|
@@ -69,9 +69,11 @@ module Ably::Models
|
|
69
69
|
|
70
70
|
set_attributes_object attributes
|
71
71
|
|
72
|
-
ensure_utf_8
|
73
|
-
ensure_utf_8
|
74
|
-
ensure_utf_8
|
72
|
+
self.attributes[:client_id] = ensure_utf_8(:client_id, client_id, allow_nil: true) if client_id
|
73
|
+
self.attributes[:connection_id] = ensure_utf_8(:connection_id, connection_id, allow_nil: true) if connection_id
|
74
|
+
self.attributes[:encoding] = ensure_utf_8(:encoding, encoding, allow_nil: true) if encoding
|
75
|
+
|
76
|
+
self.attributes.freeze
|
75
77
|
end
|
76
78
|
|
77
79
|
%w( client_id data encoding ).each do |attribute|
|
@@ -167,7 +169,7 @@ module Ably::Models
|
|
167
169
|
end
|
168
170
|
|
169
171
|
def set_attributes_object(new_attributes)
|
170
|
-
@attributes = IdiomaticRubyWrapper(new_attributes.clone
|
172
|
+
@attributes = IdiomaticRubyWrapper(new_attributes.clone, stop_at: [:data])
|
171
173
|
end
|
172
174
|
|
173
175
|
def logger
|
@@ -198,12 +198,42 @@ module Ably::Models
|
|
198
198
|
|
199
199
|
# @api private
|
200
200
|
def has_backlog_flag?
|
201
|
-
flags & 2 == 2
|
201
|
+
flags & 2 == 2 # 2^1
|
202
202
|
end
|
203
203
|
|
204
204
|
# @api private
|
205
205
|
def has_channel_resumed_flag?
|
206
|
-
flags & 4 == 4
|
206
|
+
flags & 4 == 4 # 2^2
|
207
|
+
end
|
208
|
+
|
209
|
+
# @api private
|
210
|
+
def has_local_presence_flag?
|
211
|
+
flags & 8 == 8 # 2^3
|
212
|
+
end
|
213
|
+
|
214
|
+
# @api private
|
215
|
+
def has_transient_flag?
|
216
|
+
flags & 16 == 16 # 2^4
|
217
|
+
end
|
218
|
+
|
219
|
+
# @api private
|
220
|
+
def has_attach_presence_flag?
|
221
|
+
flags & 65536 == 65536 # 2^16
|
222
|
+
end
|
223
|
+
|
224
|
+
# @api private
|
225
|
+
def has_attach_publish_flag?
|
226
|
+
flags & 131072 == 131072 # 2^17
|
227
|
+
end
|
228
|
+
|
229
|
+
# @api private
|
230
|
+
def has_attach_subscribe_flag?
|
231
|
+
flags & 262144 == 262144 # 2^18
|
232
|
+
end
|
233
|
+
|
234
|
+
# @api private
|
235
|
+
def has_attach_presence_subscribe_flag?
|
236
|
+
flags & 524288 == 524288 # 2^19
|
207
237
|
end
|
208
238
|
|
209
239
|
def connection_details
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Ably::Modules
|
2
|
+
module Conversions
|
3
|
+
private
|
4
|
+
# Convert push_channel_subscription argument to a {Ably::Models::PushChannelSubscription} object
|
5
|
+
#
|
6
|
+
# @param push_channel_subscription [Ably::Models::PushChannelSubscription,Hash,nil] A device details object
|
7
|
+
#
|
8
|
+
# @return [Ably::Models::PushChannelSubscription]
|
9
|
+
def PushChannelSubscription(push_channel_subscription)
|
10
|
+
case push_channel_subscription
|
11
|
+
when Ably::Models::PushChannelSubscription
|
12
|
+
push_channel_subscription
|
13
|
+
else
|
14
|
+
Ably::Models::PushChannelSubscription.new(push_channel_subscription)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Ably::Models
|
21
|
+
# An object representing a devices details, used currently for push notifications
|
22
|
+
#
|
23
|
+
# @!attribute [r] channel
|
24
|
+
# @return [String] The realtime pub/sub channel this subscription is registered to
|
25
|
+
# @!attribute [r] client_id
|
26
|
+
# @return [String] Client ID that is assigned to one or more registered push devices
|
27
|
+
# @!attribute [r] device_id
|
28
|
+
# @return [String] Unique device identifier assigned to the push device
|
29
|
+
#
|
30
|
+
class PushChannelSubscription < Ably::Exceptions::BaseAblyException
|
31
|
+
include Ably::Modules::ModelCommon
|
32
|
+
|
33
|
+
# @param hash_object [Hash,nil] Device detail attributes
|
34
|
+
#a
|
35
|
+
def initialize(hash_object = {})
|
36
|
+
@raw_hash_object = hash_object || {}
|
37
|
+
@hash_object = IdiomaticRubyWrapper(hash_object)
|
38
|
+
|
39
|
+
if !attributes[:client_id] && !attributes[:device_id]
|
40
|
+
raise ArgumentError, 'Either client_id or device_id must be provided'
|
41
|
+
end
|
42
|
+
if attributes[:client_id] && attributes[:device_id]
|
43
|
+
raise ArgumentError, 'client_id and device_id cannot both be provided, they are mutually exclusive'
|
44
|
+
end
|
45
|
+
if !attributes[:channel]
|
46
|
+
raise ArgumentError, 'channel is required'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Constructor for channel subscription by device ID
|
51
|
+
#
|
52
|
+
# @param channel [String] the realtime pub/sub channel this subscription is registered to
|
53
|
+
# @param device_id [String] Unique device identifier assigned to the push device
|
54
|
+
#
|
55
|
+
# @return [PushChannelSubscription]
|
56
|
+
#
|
57
|
+
def self.for_device(channel, device_id)
|
58
|
+
PushChannelSubscription.new(channel: channel, device_id: device_id)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Constructor for channel subscription by client ID
|
62
|
+
#
|
63
|
+
# @param channel [String] the realtime pub/sub channel this subscription is registered to
|
64
|
+
# @param client_id [String] Client ID that is assigned to one or more registered push devices
|
65
|
+
#
|
66
|
+
# @return [PushChannelSubscription]
|
67
|
+
#
|
68
|
+
def self.for_client_id(channel, client_id)
|
69
|
+
PushChannelSubscription.new(channel: channel, client_id: client_id)
|
70
|
+
end
|
71
|
+
|
72
|
+
%w(channel client_id device_id).each do |attribute|
|
73
|
+
define_method attribute do
|
74
|
+
attributes[attribute.to_sym]
|
75
|
+
end
|
76
|
+
|
77
|
+
define_method "#{attribute}=" do |val|
|
78
|
+
unless val.nil? || val.kind_of?(String)
|
79
|
+
raise ArgumentError, "#{attribute} must be nil or a string value"
|
80
|
+
end
|
81
|
+
attributes[attribute.to_sym] = val
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def attributes
|
86
|
+
@hash_object
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -44,7 +44,7 @@ module Ably::Modules
|
|
44
44
|
Ably::Util::SafeDeferrable.new(logger).tap do |deferrable|
|
45
45
|
deferrable.callback(&success_callback) if success_callback
|
46
46
|
|
47
|
-
operation_with_exception_handling =
|
47
|
+
operation_with_exception_handling = lambda do
|
48
48
|
begin
|
49
49
|
yield
|
50
50
|
rescue StandardError => err
|
@@ -57,7 +57,7 @@ module Ably::Modules
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
complete_callback =
|
60
|
+
complete_callback = lambda do |result|
|
61
61
|
deferrable.succeed result
|
62
62
|
end
|
63
63
|
|
@@ -96,7 +96,7 @@ module Ably::Modules
|
|
96
96
|
unless options[:allow_nil] && string_value.nil?
|
97
97
|
raise ArgumentError, "#{field_name} must be a String" unless string_value.kind_of?(String)
|
98
98
|
end
|
99
|
-
string_value.encode
|
99
|
+
string_value.encode(Encoding::UTF_8) if string_value
|
100
100
|
rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError => e
|
101
101
|
raise ArgumentError, "#{field_name} could not be converted to UTF-8: #{e.message}"
|
102
102
|
end
|
@@ -113,7 +113,7 @@ module Ably::Modules
|
|
113
113
|
payload.kind_of?(Array) ||
|
114
114
|
payload.nil?
|
115
115
|
|
116
|
-
raise Ably::Exceptions::UnsupportedDataType.new('Invalid data payload', 400,
|
116
|
+
raise Ably::Exceptions::UnsupportedDataType.new('Invalid data payload', 400, Ably::Exceptions::Codes::INVALID_MESSAGE_DATA_OR_ENCODING)
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
@@ -27,7 +27,7 @@ module Ably::Modules
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# Return an Array of Message or Presence objects from the encoded Array of JSON-like objects, using the optional channel options
|
30
|
-
# @param
|
30
|
+
# @param message_object_array [Array<Hash>] Array of JSON-like objects with encoded messages
|
31
31
|
# @param channel_options [Hash] Channel options, currently reserved for Encryption options
|
32
32
|
# @return [Array<Message,Presence>]
|
33
33
|
def from_encoded_array(message_object_array, channel_options = {})
|
@@ -95,7 +95,7 @@ module Ably::Modules
|
|
95
95
|
|
96
96
|
previous_encoding = message_attributes[:encoding]
|
97
97
|
encoders.each do |encoder|
|
98
|
-
encoder.
|
98
|
+
encoder.public_send method, message_attributes, channel_options
|
99
99
|
end
|
100
100
|
end until previous_encoding == message_attributes[:encoding]
|
101
101
|
|
@@ -31,7 +31,7 @@ module Ably
|
|
31
31
|
# @option options [Proc] :coerce_into A lambda/Proc that is used to coerce the event names for all events. This is useful to ensure the event names conform to a naming or type convention.
|
32
32
|
#
|
33
33
|
# @example
|
34
|
-
# configure_event_emitter coerce_into:
|
34
|
+
# configure_event_emitter coerce_into: lambda { |event| event.to_sym }
|
35
35
|
#
|
36
36
|
def configure_event_emitter(options = {})
|
37
37
|
@event_emitter_coerce_proc = options[:coerce_into]
|
@@ -158,7 +158,7 @@ module Ably
|
|
158
158
|
# #emit automatically deletes any blocks that return true thus allowing a block to be run once
|
159
159
|
def proc_for_block(block, options = {})
|
160
160
|
{
|
161
|
-
emit_proc:
|
161
|
+
emit_proc: lambda do |*args|
|
162
162
|
block.call(*args)
|
163
163
|
true if options[:delete_once_run]
|
164
164
|
end,
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# This file is generated by running `rake :generate_error_codes`
|
2
|
+
# Do not manually modify this file
|
3
|
+
# Generated at: 2018-09-18 18:28:58 UTC
|
4
|
+
#
|
5
|
+
module Ably
|
6
|
+
module Exceptions
|
7
|
+
module Codes
|
8
|
+
NO_ERROR = 10000
|
9
|
+
BAD_REQUEST = 40000
|
10
|
+
INVALID_REQUEST_BODY = 40001
|
11
|
+
INVALID_PARAMETER_NAME = 40002
|
12
|
+
INVALID_PARAMETER_VALUE = 40003
|
13
|
+
INVALID_HEADER = 40004
|
14
|
+
INVALID_CREDENTIAL = 40005
|
15
|
+
INVALID_CONNECTION_ID = 40006
|
16
|
+
INVALID_MESSAGE_ID = 40007
|
17
|
+
INVALID_CONTENT_LENGTH = 40008
|
18
|
+
MAXIMUM_MESSAGE_LENGTH_EXCEEDED = 40009
|
19
|
+
INVALID_CHANNEL_NAME = 40010
|
20
|
+
STALE_RING_STATE = 40011
|
21
|
+
INVALID_CLIENT_ID = 40012
|
22
|
+
INVALID_MESSAGE_DATA_OR_ENCODING = 40013
|
23
|
+
RESOURCE_DISPOSED = 40014
|
24
|
+
INVALID_DEVICE_ID = 40015
|
25
|
+
BATCH_ERROR = 40020
|
26
|
+
INVALID_PUBLISH_REQUEST_UNSPECIFIED = 40030
|
27
|
+
INVALID_PUBLISH_REQUEST_INVALID_CLIENTSPECIFIED_ID = 40031
|
28
|
+
UNAUTHORIZED = 40100
|
29
|
+
INVALID_CREDENTIALS = 40101
|
30
|
+
INCOMPATIBLE_CREDENTIALS = 40102
|
31
|
+
INVALID_USE_OF_BASIC_AUTH_OVER_NONTLS_TRANSPORT = 40103
|
32
|
+
TIMESTAMP_NOT_CURRENT = 40104
|
33
|
+
NONCE_VALUE_REPLAYED = 40105
|
34
|
+
UNABLE_TO_OBTAIN_CREDENTIALS_FROM_GIVEN_PARAMETERS = 40106
|
35
|
+
ACCOUNT_DISABLED = 40110
|
36
|
+
ACCOUNT_RESTRICTED_CONNECTION_LIMITS_EXCEEDED = 40111
|
37
|
+
ACCOUNT_BLOCKED_MESSAGE_LIMITS_EXCEEDED = 40112
|
38
|
+
ACCOUNT_BLOCKED = 40113
|
39
|
+
ACCOUNT_RESTRICTED_CHANNEL_LIMITS_EXCEEDED = 40114
|
40
|
+
APPLICATION_DISABLED = 40120
|
41
|
+
KEY_ERROR_UNSPECIFIED = 40130
|
42
|
+
KEY_REVOKED = 40131
|
43
|
+
KEY_EXPIRED = 40132
|
44
|
+
KEY_DISABLED = 40133
|
45
|
+
TOKEN_ERROR_UNSPECIFIED = 40140
|
46
|
+
TOKEN_REVOKED = 40141
|
47
|
+
TOKEN_EXPIRED = 40142
|
48
|
+
TOKEN_UNRECOGNISED = 40143
|
49
|
+
INVALID_JWT_FORMAT = 40144
|
50
|
+
INVALID_TOKEN_FORMAT = 40145
|
51
|
+
CONNECTION_BLOCKED_LIMITS_EXCEEDED = 40150
|
52
|
+
OPERATION_NOT_PERMITTED_WITH_PROVIDED_CAPABILITY = 40160
|
53
|
+
ERROR_FROM_CLIENT_TOKEN_CALLBACK = 40170
|
54
|
+
FORBIDDEN = 40300
|
55
|
+
ACCOUNT_DOES_NOT_PERMIT_TLS_CONNECTION = 40310
|
56
|
+
OPERATION_REQUIRES_TLS_CONNECTION = 40311
|
57
|
+
APPLICATION_REQUIRES_AUTHENTICATION = 40320
|
58
|
+
UNABLE_TO_ACTIVATE_ACCOUNT_DUE_TO_PLACEMENT_CONSTRAINT_UNSPECIFIED = 40330
|
59
|
+
UNABLE_TO_ACTIVATE_ACCOUNT_DUE_TO_PLACEMENT_CONSTRAINT_INCOMPATIBLE_ENVIRONMENT = 40331
|
60
|
+
UNABLE_TO_ACTIVATE_ACCOUNT_DUE_TO_PLACEMENT_CONSTRAINT_INCOMPATIBLE_SITE = 40332
|
61
|
+
NOT_FOUND = 40400
|
62
|
+
METHOD_NOT_ALLOWED = 40500
|
63
|
+
RATE_LIMIT_EXCEEDED_NONFATAL_REQUEST_REJECTED_UNSPECIFIED = 42910
|
64
|
+
MAX_PERCONNECTION_PUBLISH_RATE_LIMIT_EXCEEDED_NONFATAL_UNABLE_TO_PUBLISH_MESSAGE = 42911
|
65
|
+
RATE_LIMIT_EXCEEDED_FATAL = 42920
|
66
|
+
MAX_PERCONNECTION_PUBLISH_RATE_LIMIT_EXCEEDED_FATAL_CLOSING_CONNECTION = 42921
|
67
|
+
INTERNAL_ERROR = 50000
|
68
|
+
INTERNAL_CHANNEL_ERROR = 50001
|
69
|
+
INTERNAL_CONNECTION_ERROR = 50002
|
70
|
+
TIMEOUT_ERROR = 50003
|
71
|
+
REQUEST_FAILED_DUE_TO_OVERLOADED_INSTANCE = 50004
|
72
|
+
REACTOR_OPERATION_FAILED = 70000
|
73
|
+
REACTOR_OPERATION_FAILED_POST_OPERATION_FAILED = 70001
|
74
|
+
REACTOR_OPERATION_FAILED_POST_OPERATION_RETURNED_UNEXPECTED_CODE = 70002
|
75
|
+
REACTOR_OPERATION_FAILED_MAXIMUM_NUMBER_OF_CONCURRENT_INFLIGHT_REQUESTS_EXCEEDED = 70003
|
76
|
+
EXCHANGE_ERROR_UNSPECIFIED = 71000
|
77
|
+
FORCED_REATTACHMENT_DUE_TO_PERMISSIONS_CHANGE = 71001
|
78
|
+
EXCHANGE_PUBLISHER_ERROR_UNSPECIFIED = 71100
|
79
|
+
NO_SUCH_PUBLISHER = 71101
|
80
|
+
PUBLISHER_NOT_ENABLED_AS_AN_EXCHANGE_PUBLISHER = 71102
|
81
|
+
EXCHANGE_PRODUCT_ERROR_UNSPECIFIED = 71200
|
82
|
+
NO_SUCH_PRODUCT = 71201
|
83
|
+
PRODUCT_DISABLED = 71202
|
84
|
+
NO_SUCH_CHANNEL_IN_THIS_PRODUCT = 71203
|
85
|
+
EXCHANGE_SUBSCRIPTION_ERROR_UNSPECIFIED = 71300
|
86
|
+
SUBSCRIPTION_DISABLED = 71301
|
87
|
+
REQUESTER_HAS_NO_SUBSCRIPTION_TO_THIS_PRODUCT = 71302
|
88
|
+
CONNECTION_FAILED = 80000
|
89
|
+
CONNECTION_FAILED_NO_COMPATIBLE_TRANSPORT = 80001
|
90
|
+
CONNECTION_SUSPENDED = 80002
|
91
|
+
DISCONNECTED = 80003
|
92
|
+
ALREADY_CONNECTED = 80004
|
93
|
+
INVALID_CONNECTION_ID_REMOTE_NOT_FOUND = 80005
|
94
|
+
UNABLE_TO_RECOVER_CONNECTION_MESSAGES_EXPIRED = 80006
|
95
|
+
UNABLE_TO_RECOVER_CONNECTION_MESSAGE_LIMIT_EXCEEDED = 80007
|
96
|
+
UNABLE_TO_RECOVER_CONNECTION_CONNECTION_EXPIRED = 80008
|
97
|
+
CONNECTION_NOT_ESTABLISHED_NO_TRANSPORT_HANDLE = 80009
|
98
|
+
INVALID_OPERATION_INVALID_TRANSPORT_HANDLE = 80010
|
99
|
+
UNABLE_TO_RECOVER_CONNECTION_INCOMPATIBLE_AUTH_PARAMS = 80011
|
100
|
+
UNABLE_TO_RECOVER_CONNECTION_INVALID_OR_UNSPECIFIED_CONNECTION_SERIAL = 80012
|
101
|
+
PROTOCOL_ERROR = 80013
|
102
|
+
CONNECTION_TIMED_OUT = 80014
|
103
|
+
INCOMPATIBLE_CONNECTION_PARAMETERS = 80015
|
104
|
+
OPERATION_ON_SUPERSEDED_TRANSPORT = 80016
|
105
|
+
CONNECTION_CLOSED = 80017
|
106
|
+
INVALID_CONNECTION_ID_INVALID_FORMAT = 80018
|
107
|
+
CLIENT_CONFIGURED_AUTHENTICATION_PROVIDER_REQUEST_FAILED = 80019
|
108
|
+
CONTINUITY_LOSS_DUE_TO_MAXIMUM_SUBSCRIBE_MESSAGE_RATE_EXCEEDED = 80020
|
109
|
+
CLIENT_RESTRICTION_NOT_SATISFIED = 80030
|
110
|
+
CHANNEL_OPERATION_FAILED = 90000
|
111
|
+
CHANNEL_OPERATION_FAILED_INVALID_CHANNEL_STATE = 90001
|
112
|
+
CHANNEL_OPERATION_FAILED_EPOCH_EXPIRED_OR_NEVER_EXISTED = 90002
|
113
|
+
UNABLE_TO_RECOVER_CHANNEL_MESSAGES_EXPIRED = 90003
|
114
|
+
UNABLE_TO_RECOVER_CHANNEL_MESSAGE_LIMIT_EXCEEDED = 90004
|
115
|
+
UNABLE_TO_RECOVER_CHANNEL_NO_MATCHING_EPOCH = 90005
|
116
|
+
UNABLE_TO_RECOVER_CHANNEL_UNBOUNDED_REQUEST = 90006
|
117
|
+
CHANNEL_OPERATION_FAILED_NO_RESPONSE_FROM_SERVER = 90007
|
118
|
+
MAXIMUM_NUMBER_OF_CHANNELS_PER_CONNECTION_EXCEEDED = 90010
|
119
|
+
UNABLE_TO_ENTER_PRESENCE_CHANNEL_NO_CLIENTID = 91000
|
120
|
+
UNABLE_TO_ENTER_PRESENCE_CHANNEL_INVALID_CHANNEL_STATE = 91001
|
121
|
+
UNABLE_TO_LEAVE_PRESENCE_CHANNEL_THAT_IS_NOT_ENTERED = 91002
|
122
|
+
UNABLE_TO_ENTER_PRESENCE_CHANNEL_MAXIMUM_MEMBER_LIMIT_EXCEEDED = 91003
|
123
|
+
UNABLE_TO_AUTOMATICALLY_REENTER_PRESENCE_CHANNEL = 91004
|
124
|
+
PRESENCE_STATE_IS_OUT_OF_SYNC = 91005
|
125
|
+
MEMBER_IMPLICITLY_LEFT_PRESENCE_CHANNEL_CONNECTION_CLOSED = 91100
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -42,10 +42,23 @@ module Ably::Modules
|
|
42
42
|
attributes.hash
|
43
43
|
end
|
44
44
|
|
45
|
+
def to_s
|
46
|
+
representation = attributes.map do |key, val|
|
47
|
+
if val.nil?
|
48
|
+
nil
|
49
|
+
else
|
50
|
+
val_str = val.to_s
|
51
|
+
val_str = "#{val_str[0...80]}..." if val_str.length > 80
|
52
|
+
"#{key}=#{val_str}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
"<#{self.class.name}: #{representation.compact.join(', ')}>"
|
56
|
+
end
|
57
|
+
|
45
58
|
module ClassMethods
|
46
59
|
# Return a new instance of this object using the provided JSON-like object or JSON string
|
47
|
-
# @param [Hash, String]
|
48
|
-
# @return a new instance
|
60
|
+
# @param json_like_object [Hash, String] JSON-like object or JSON string
|
61
|
+
# @return a new instance to this object
|
49
62
|
def from_json(json_like_object)
|
50
63
|
if json_like_object.kind_of?(String)
|
51
64
|
new(JSON.parse(json_like_object))
|