ably 1.2.1 → 1.2.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 +4 -4
- data/.github/workflows/.rspec_parallel +3 -0
- data/.github/workflows/check.yml +24 -4
- data/.github/workflows/docs.yml +36 -0
- data/CHANGELOG.md +26 -0
- data/INTRO.md +14 -0
- data/ably.gemspec +1 -0
- data/lib/ably/auth.rb +26 -23
- data/lib/ably/models/auth_details.rb +9 -6
- data/lib/ably/models/channel_details.rb +69 -0
- data/lib/ably/models/channel_metrics.rb +107 -0
- data/lib/ably/models/channel_occupancy.rb +50 -0
- data/lib/ably/models/channel_options.rb +26 -3
- data/lib/ably/models/channel_state_change.rb +45 -15
- data/lib/ably/models/channel_status.rb +63 -0
- data/lib/ably/models/cipher_params.rb +36 -13
- data/lib/ably/models/connection_details.rb +91 -10
- data/lib/ably/models/connection_state_change.rb +54 -15
- data/lib/ably/models/delta_extras.rb +6 -7
- data/lib/ably/models/device_details.rb +60 -21
- data/lib/ably/models/device_push_details.rb +27 -19
- data/lib/ably/models/error_info.rb +59 -17
- data/lib/ably/models/http_paginated_response.rb +27 -5
- data/lib/ably/models/idiomatic_ruby_wrapper.rb +3 -2
- data/lib/ably/models/message.rb +64 -24
- data/lib/ably/models/message_encoders/base.rb +6 -0
- data/lib/ably/models/paginated_result.rb +29 -14
- data/lib/ably/models/presence_message.rb +72 -22
- data/lib/ably/models/protocol_message.rb +0 -4
- data/lib/ably/models/push_channel_subscription.rb +40 -15
- data/lib/ably/models/stats.rb +76 -40
- data/lib/ably/models/stats_types.rb +16 -40
- data/lib/ably/models/token_details.rb +34 -12
- data/lib/ably/models/token_request.rb +63 -2
- data/lib/ably/modules/async_wrapper.rb +1 -0
- data/lib/ably/modules/enum.rb +2 -0
- data/lib/ably/modules/event_emitter.rb +14 -1
- data/lib/ably/modules/model_common.rb +5 -0
- data/lib/ably/modules/state_emitter.rb +2 -0
- data/lib/ably/modules/state_machine.rb +4 -0
- data/lib/ably/realtime/channel/channel_properties.rb +9 -2
- data/lib/ably/realtime/channel/publisher.rb +2 -0
- data/lib/ably/realtime/channel/push_channel.rb +17 -10
- data/lib/ably/realtime/channel.rb +79 -42
- data/lib/ably/realtime/channels.rb +4 -3
- data/lib/ably/realtime/client/incoming_message_dispatcher.rb +6 -14
- data/lib/ably/realtime/client.rb +53 -32
- data/lib/ably/realtime/connection/connection_manager.rb +4 -0
- data/lib/ably/realtime/connection/websocket_transport.rb +4 -2
- data/lib/ably/realtime/connection.rb +94 -55
- data/lib/ably/realtime/presence.rb +61 -36
- data/lib/ably/realtime/push/admin.rb +16 -2
- data/lib/ably/realtime/push.rb +15 -3
- data/lib/ably/rest/channel/push_channel.rb +0 -3
- data/lib/ably/rest/channel.rb +33 -18
- data/lib/ably/rest/channels.rb +6 -3
- data/lib/ably/rest/client.rb +41 -35
- data/lib/ably/rest/presence.rb +27 -12
- data/lib/ably/rest/push/admin.rb +4 -0
- data/lib/ably/rest/push/device_registrations.rb +13 -2
- data/lib/ably/rest/push.rb +2 -0
- data/lib/ably/util/crypto.rb +14 -10
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/realtime/connection_spec.rb +0 -15
- data/spec/acceptance/realtime/message_spec.rb +3 -3
- data/spec/acceptance/rest/channel_spec.rb +18 -0
- data/spec/unit/models/channel_details_spec.rb +30 -0
- data/spec/unit/models/channel_metrics_spec.rb +42 -0
- data/spec/unit/models/channel_occupancy_spec.rb +17 -0
- data/spec/unit/models/channel_status_spec.rb +36 -0
- data/spec/unit/models/protocol_message_spec.rb +0 -26
- data/spec/unit/realtime/incoming_message_dispatcher_spec.rb +0 -38
- metadata +32 -3
@@ -46,9 +46,12 @@ module Ably
|
|
46
46
|
|
47
47
|
# On receiving an event matching the event_name, call the provided block
|
48
48
|
#
|
49
|
+
# @spec RTE4
|
50
|
+
#
|
49
51
|
# @param [Array<String>] event_names event name
|
50
52
|
#
|
51
53
|
# @return [void]
|
54
|
+
#
|
52
55
|
def on(*event_names, &block)
|
53
56
|
add_callback event_names, proc_for_block(block)
|
54
57
|
end
|
@@ -62,9 +65,12 @@ module Ably
|
|
62
65
|
|
63
66
|
# On receiving an event maching the event_name, call the provided block only once and remove the registered callback
|
64
67
|
#
|
68
|
+
# @spec RTE4
|
69
|
+
#
|
65
70
|
# @param [Array<String>] event_names event name
|
66
71
|
#
|
67
72
|
# @return [void]
|
73
|
+
#
|
68
74
|
def once(*event_names, &block)
|
69
75
|
add_callback event_names, proc_for_block(block, delete_once_run: true)
|
70
76
|
end
|
@@ -76,7 +82,11 @@ module Ably
|
|
76
82
|
add_callback event_names, proc_for_block(block, delete_once_run: true, unsafe: true)
|
77
83
|
end
|
78
84
|
|
79
|
-
#
|
85
|
+
# Emits an event, calling registered listeners with the given event name and any other given arguments.
|
86
|
+
# If an exception is raised in any of the listeners, the exception is caught by the EventEmitter and the exception is logged to the Ably logger.
|
87
|
+
#
|
88
|
+
# @spec RTE6
|
89
|
+
#
|
80
90
|
def emit(event_name, *args)
|
81
91
|
[callbacks_any, callbacks[callbacks_event_coerced(event_name)]].each do |callback_arr|
|
82
92
|
callback_arr.clone.
|
@@ -97,9 +107,12 @@ module Ably
|
|
97
107
|
# If a block is provided, only callbacks matching that block signature will be removed.
|
98
108
|
# If block is not provided, all callbacks matching the event_name will be removed.
|
99
109
|
#
|
110
|
+
# @spec RTE5
|
111
|
+
#
|
100
112
|
# @param [Array<String>] event_names event name
|
101
113
|
#
|
102
114
|
# @return [void]
|
115
|
+
#
|
103
116
|
def off(*event_names, &block)
|
104
117
|
off_internal(false, *event_names, &block)
|
105
118
|
end
|
@@ -15,6 +15,7 @@ module Ably::Modules
|
|
15
15
|
# Provide a normal Hash accessor to the underlying raw message object
|
16
16
|
#
|
17
17
|
# @return [Object]
|
18
|
+
#
|
18
19
|
def [](key)
|
19
20
|
attributes[key]
|
20
21
|
end
|
@@ -25,13 +26,17 @@ module Ably::Modules
|
|
25
26
|
end
|
26
27
|
|
27
28
|
# Return a JSON ready object from the underlying #attributes using Ably naming conventions for keys
|
29
|
+
#
|
28
30
|
# @return [Hash]
|
31
|
+
#
|
29
32
|
def as_json(*args)
|
30
33
|
attributes.as_json.reject { |key, val| val.nil? }
|
31
34
|
end
|
32
35
|
|
33
36
|
# Stringify the JSON representation of this object from the underlying #attributes
|
37
|
+
#
|
34
38
|
# @return [String]
|
39
|
+
#
|
35
40
|
def to_json(*args)
|
36
41
|
as_json.to_json(*args)
|
37
42
|
end
|
@@ -35,6 +35,7 @@ module Ably::Modules
|
|
35
35
|
# Current state {Ably::Modules::Enum}
|
36
36
|
#
|
37
37
|
# @return [Symbol] state
|
38
|
+
#
|
38
39
|
def state
|
39
40
|
STATE(@state)
|
40
41
|
end
|
@@ -42,6 +43,7 @@ module Ably::Modules
|
|
42
43
|
# Evaluates if check_state matches current state
|
43
44
|
#
|
44
45
|
# @return [Boolean]
|
46
|
+
#
|
45
47
|
def state?(check_state)
|
46
48
|
state == check_state
|
47
49
|
end
|
@@ -20,6 +20,7 @@ module Ably::Modules
|
|
20
20
|
# * log state change failures to {Logger}
|
21
21
|
#
|
22
22
|
# @return [void]
|
23
|
+
#
|
23
24
|
def transition_state(state, *args)
|
24
25
|
unless result = transition_to(state.to_sym, *args)
|
25
26
|
exception = exception_for_state_change_to(state)
|
@@ -29,16 +30,19 @@ module Ably::Modules
|
|
29
30
|
end
|
30
31
|
|
31
32
|
# @return [Statesman History Object]
|
33
|
+
#
|
32
34
|
def previous_transition
|
33
35
|
history[-2]
|
34
36
|
end
|
35
37
|
|
36
38
|
# @return [Symbol]
|
39
|
+
#
|
37
40
|
def previous_state
|
38
41
|
previous_transition.to_state if previous_transition
|
39
42
|
end
|
40
43
|
|
41
44
|
# @return [Ably::Exceptions::InvalidStateChange]
|
45
|
+
#
|
42
46
|
def exception_for_state_change_to(state)
|
43
47
|
error_message = "#{self.class}: Unable to transition from #{current_state} => #{state}"
|
44
48
|
Ably::Exceptions::InvalidStateChange.new(error_message, nil, Ably::Exceptions::Codes::CHANNEL_OPERATION_FAILED_INVALID_CHANNEL_STATE)
|
@@ -1,14 +1,21 @@
|
|
1
1
|
module Ably::Realtime
|
2
2
|
class Channel
|
3
|
-
#
|
3
|
+
# Describes the properties of the channel state.
|
4
4
|
class ChannelProperties
|
5
5
|
# {Ably::Realtime::Channel} this object associated with
|
6
|
+
#
|
6
7
|
# @return [Ably::Realtime::Channel]
|
8
|
+
#
|
7
9
|
attr_reader :channel
|
8
10
|
|
9
|
-
#
|
11
|
+
# Starts unset when a channel is instantiated, then updated with the channelSerial from each
|
12
|
+
# {Ably::Realtime::Channel::STATE.Attached} event that matches the channel.
|
13
|
+
# Used as the value for {Ably::Realtime::Channel#history}.
|
14
|
+
#
|
15
|
+
# @spec CP2a
|
10
16
|
#
|
11
17
|
# @return [String]
|
18
|
+
#
|
12
19
|
attr_reader :attach_serial
|
13
20
|
|
14
21
|
def initialize(channel)
|
@@ -5,7 +5,9 @@ module Ably::Realtime
|
|
5
5
|
private
|
6
6
|
|
7
7
|
# Prepare and queue messages on the connection queue immediately
|
8
|
+
#
|
8
9
|
# @return [Ably::Util::SafeDeferrable]
|
10
|
+
#
|
9
11
|
def enqueue_messages_on_connection(client, raw_messages, channel_name, channel_options = {})
|
10
12
|
messages = Array(raw_messages).map do |raw_msg|
|
11
13
|
create_message(client, raw_msg, channel_options).tap do |message|
|
@@ -1,10 +1,6 @@
|
|
1
1
|
module Ably::Realtime
|
2
2
|
class Channel
|
3
|
-
#
|
4
|
-
# Each PushChannel maps to exactly one Realtime Channel
|
5
|
-
#
|
6
|
-
# @!attribute [r] channel
|
7
|
-
# @return [Ably::Realtime::Channel] Underlying channel object
|
3
|
+
# Enables devices to subscribe to push notifications for a channel.
|
8
4
|
#
|
9
5
|
class PushChannel
|
10
6
|
attr_reader :channel
|
@@ -18,35 +14,46 @@ module Ably::Realtime
|
|
18
14
|
"<PushChannel: name=#{channel.name}>"
|
19
15
|
end
|
20
16
|
|
21
|
-
#
|
17
|
+
# Subscribes the device to push notifications for the channel.
|
18
|
+
#
|
19
|
+
# @spec RSH7a
|
22
20
|
#
|
23
21
|
# @note This is unsupported in the Ruby library
|
24
22
|
def subscribe_device(*args)
|
25
23
|
raise_unsupported
|
26
24
|
end
|
27
25
|
|
28
|
-
#
|
26
|
+
# Subscribes all devices associated with the current device's clientId to push notifications for the channel.
|
27
|
+
#
|
28
|
+
# @spec RSH7b
|
29
29
|
#
|
30
30
|
# @note This is unsupported in the Ruby library
|
31
31
|
def subscribe_client_id(*args)
|
32
32
|
raise_unsupported
|
33
33
|
end
|
34
34
|
|
35
|
-
#
|
35
|
+
# Unsubscribes the device from receiving push notifications for the channel.
|
36
|
+
#
|
37
|
+
# @spec RSH7c
|
36
38
|
#
|
37
39
|
# @note This is unsupported in the Ruby library
|
38
40
|
def unsubscribe_device(*args)
|
39
41
|
raise_unsupported
|
40
42
|
end
|
41
43
|
|
42
|
-
#
|
44
|
+
# Unsubscribes all devices associated with the current device's clientId from receiving push notifications for the channel.
|
45
|
+
#
|
46
|
+
# @spec RSH7d
|
43
47
|
#
|
44
48
|
# @note This is unsupported in the Ruby library
|
45
49
|
def unsubscribe_client_id(*args)
|
46
50
|
raise_unsupported
|
47
51
|
end
|
48
52
|
|
49
|
-
#
|
53
|
+
# Retrieves all push subscriptions for the channel. Subscriptions can be filtered using a params object.
|
54
|
+
# Returns a {Ably::Models::PaginatedResult} object containing an array of {Ably::Models::PushChannelSubscription} objects.
|
55
|
+
#
|
56
|
+
# @spec RSH7e
|
50
57
|
#
|
51
58
|
# @note This is unsupported in the Ruby library
|
52
59
|
def get_subscriptions(*args)
|
@@ -2,10 +2,8 @@ require 'ably/realtime/channel/publisher'
|
|
2
2
|
|
3
3
|
module Ably
|
4
4
|
module Realtime
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# received, and controls the lifecycle of this instance's
|
8
|
-
# attachment to the channel.
|
5
|
+
# Enables messages to be published and subscribed to. Also enables historic messages to be retrieved and provides
|
6
|
+
# access to the {Ably::Realtime::Channel} object of a channel.
|
9
7
|
#
|
10
8
|
# Channels will always be in one of the following states:
|
11
9
|
#
|
@@ -18,15 +16,17 @@ module Ably
|
|
18
16
|
#
|
19
17
|
# Note that the states are available as Enum-like constants:
|
20
18
|
#
|
21
|
-
# Channel::STATE.Initialized
|
22
|
-
# Channel::STATE.Attaching
|
23
|
-
#
|
24
|
-
# Channel::STATE.
|
25
|
-
# Channel::STATE.
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
19
|
+
# Channel::STATE.Initialized The channel has been initialized but no attach has yet been attempted.
|
20
|
+
# Channel::STATE.Attaching An attach has been initiated by sending a request to Ably.
|
21
|
+
# This is a transient state, followed either by a transition to ATTACHED, SUSPENDED, or FAILED.
|
22
|
+
# Channel::STATE.Attached The attach has succeeded. In the ATTACHED state a client may publish and subscribe to messages, or be present on the channel.
|
23
|
+
# Channel::STATE.Detaching A detach has been initiated on an ATTACHED channel by sending a request to Ably.
|
24
|
+
# This is a transient state, followed either by a transition to DETACHED or FAILED.
|
25
|
+
# Channel::STATE.Detached The channel, having previously been ATTACHED, has been detached by the user.
|
26
|
+
# Channel::STATE.Suspended The channel, having previously been ATTACHED, has lost continuity, usually due to
|
27
|
+
# the client being disconnected from Ably for longer than two minutes. It will automatically attempt to reattach as soon as connectivity is restored.
|
28
|
+
# Channel::STATE.Failed An indefinite failure condition. This state is entered if a channel error
|
29
|
+
# has been received from the Ably service, such as an attempt to attach without the necessary access rights.
|
30
30
|
#
|
31
31
|
class Channel
|
32
32
|
include Ably::Modules::Conversions
|
@@ -38,7 +38,10 @@ module Ably
|
|
38
38
|
extend Ably::Modules::Enum
|
39
39
|
extend Forwardable
|
40
40
|
|
41
|
-
#
|
41
|
+
# The current {Abbly::Realtime::Channel::STATE} of the channel.
|
42
|
+
#
|
43
|
+
# @spec RTL2b
|
44
|
+
#
|
42
45
|
# The permited states for this channel
|
43
46
|
STATE = ruby_enum('STATE',
|
44
47
|
:initialized,
|
@@ -50,8 +53,13 @@ module Ably
|
|
50
53
|
:failed
|
51
54
|
)
|
52
55
|
|
53
|
-
#
|
56
|
+
# Describes the events emitted by a {Ably::Rest::Channel} or {Ably::Realtime::Channel} object.
|
57
|
+
# An event is either an UPDATE or a {Ably::Rest::Channel::STATE}.
|
58
|
+
#
|
54
59
|
# The permitted channel events that are emitted for this channel
|
60
|
+
#
|
61
|
+
# @spec RTL2g
|
62
|
+
#
|
55
63
|
EVENT = ruby_enum('EVENT',
|
56
64
|
STATE.to_sym_arr + [:update]
|
57
65
|
)
|
@@ -64,15 +72,18 @@ module Ably
|
|
64
72
|
MAX_PROTOCOL_MESSAGE_BATCH_SIZE = 50
|
65
73
|
|
66
74
|
# {Ably::Realtime::Client} associated with this channel
|
75
|
+
#
|
67
76
|
# @return [Ably::Realtime::Client]
|
77
|
+
#
|
68
78
|
# @api private
|
69
79
|
attr_reader :client
|
70
80
|
|
71
|
-
#
|
81
|
+
# The channel name.
|
72
82
|
# @return [String]
|
73
83
|
attr_reader :name
|
74
84
|
|
75
|
-
#
|
85
|
+
# A {Ably::Realtime::Channel::PushChannel} object.
|
86
|
+
#
|
76
87
|
# @return [Ably::Realtime::Channel::PushChannel]
|
77
88
|
attr_reader :push
|
78
89
|
|
@@ -80,11 +91,15 @@ module Ably
|
|
80
91
|
# @return [Hash]
|
81
92
|
attr_reader :options
|
82
93
|
|
83
|
-
#
|
94
|
+
# A {Ably::Realtime::Channel::ChannelProperties} object.
|
95
|
+
#
|
96
|
+
# @spec CP1, RTL15
|
97
|
+
#
|
84
98
|
# @return [{Ably::Realtime::Channel::ChannelProperties}]
|
85
99
|
attr_reader :properties
|
86
100
|
|
87
|
-
#
|
101
|
+
# An {Ably::Models::ErrorInfo} object describing the last error which occurred on the channel, if any.
|
102
|
+
# @spec RTL4e
|
88
103
|
# @return [Ably::Models::ErrorInfo,Ably::Exceptions::BaseAblyException]
|
89
104
|
attr_reader :error_reason
|
90
105
|
|
@@ -94,11 +109,12 @@ module Ably
|
|
94
109
|
attr_reader :manager
|
95
110
|
|
96
111
|
# Flag that specifies whether channel is resuming attachment(reattach) or is doing a 'clean attach' RTL4j1
|
97
|
-
# @return [
|
112
|
+
# @return [Boolean]
|
98
113
|
# @api private
|
99
114
|
attr_reader :attach_resume
|
100
115
|
|
101
|
-
#
|
116
|
+
# Optional channel parameters that configure the behavior of the channel.
|
117
|
+
# @spec RTL4k1
|
102
118
|
# return [Hash]
|
103
119
|
def_delegators :options, :params
|
104
120
|
|
@@ -127,9 +143,11 @@ module Ably
|
|
127
143
|
setup_presence
|
128
144
|
end
|
129
145
|
|
130
|
-
# Publish
|
146
|
+
# Publish a message to the channel. A callback may optionally be passed in to this call to be notified of success
|
147
|
+
# or failure of the operation. When publish is called with this client library, it won't attempt to implicitly
|
148
|
+
# attach to the channel.
|
131
149
|
#
|
132
|
-
#
|
150
|
+
# @spec RTL6i
|
133
151
|
#
|
134
152
|
# @param name [String, Array<Ably::Models::Message|Hash>, nil] The event name of the message to publish, or an Array of [Ably::Model::Message] objects or [Hash] objects with +:name+ and +:data+ pairs
|
135
153
|
# @param data [String, ByteArray, nil] The message payload unless an Array of [Ably::Model::Message] objects passed in the first argument
|
@@ -195,9 +213,11 @@ module Ably
|
|
195
213
|
end
|
196
214
|
end
|
197
215
|
|
198
|
-
#
|
216
|
+
# Registers a listener for messages on this channel. The caller supplies a listener function, which is called
|
217
|
+
# each time one or more messages arrives on the channel. A callback may optionally be passed in to this call
|
218
|
+
# to be notified of success or failure of the channel {Ably::Realtime::Channel#attach} operation.
|
199
219
|
#
|
200
|
-
#
|
220
|
+
# @spec RTL7a
|
201
221
|
#
|
202
222
|
# @param names [String] The event name of the message to subscribe to if provided. Defaults to all events.
|
203
223
|
# @yield [Ably::Models::Message] For each message received, the block is called
|
@@ -209,8 +229,9 @@ module Ably
|
|
209
229
|
super
|
210
230
|
end
|
211
231
|
|
212
|
-
#
|
213
|
-
#
|
232
|
+
# Deregisters the given listener for the specified event name(s). This removes an earlier event-specific subscription.
|
233
|
+
#
|
234
|
+
# @spec RTL8a
|
214
235
|
#
|
215
236
|
# @param names [String] The event name of the message to subscribe to if provided. Defaults to all events.
|
216
237
|
#
|
@@ -220,9 +241,15 @@ module Ably
|
|
220
241
|
super
|
221
242
|
end
|
222
243
|
|
223
|
-
# Attach to this channel
|
224
|
-
#
|
225
|
-
#
|
244
|
+
# Attach to this channel ensuring the channel is created in the Ably system and all messages published on
|
245
|
+
# the channel are received by any channel listeners registered using {Ably::Realtime::Channel#subscribe}.
|
246
|
+
# Any resulting channel state change will be emitted to any listeners registered using the {Ably::Modules::EventEmitter#on}
|
247
|
+
# or {Ably::Modules::EventEmitter#once} methods. A callback may optionally be passed in to this call to be notified
|
248
|
+
# of success or failure of the operation. As a convenience, attach() is called implicitly
|
249
|
+
# if {Ably::Realtime::Channel#subscribe} for the channel is called, or {Ably::Realtime::Presence#enter}
|
250
|
+
# or {Ably::Realtime::Presence#subscribe} are called on the {Ably::Realtime::Presence} object for this channel.
|
251
|
+
#
|
252
|
+
# @spec RTL4d
|
226
253
|
#
|
227
254
|
# @yield [Ably::Realtime::Channel] Block is called as soon as this channel is in the Attached state
|
228
255
|
# @return [Ably::Util::SafeDeferrable] Deferrable that supports both success (callback) and failure (errback) callback
|
@@ -245,7 +272,12 @@ module Ably
|
|
245
272
|
deferrable_for_state_change_to(STATE.Attached, &success_block)
|
246
273
|
end
|
247
274
|
|
248
|
-
# Detach this channel
|
275
|
+
# Detach from this channel. Any resulting channel state change is emitted to any listeners registered using
|
276
|
+
# the {Ably::Modules::EventEmitter#on} or {Ably::Modules::EventEmitter#once} methods. A callback may optionally
|
277
|
+
# be passed in to this call to be notified of success or failure of the operation. Once all clients globally
|
278
|
+
# have detached from the channel, the channel will be released in the Ably service within two minutes.
|
279
|
+
#
|
280
|
+
# @spec RTL5e
|
249
281
|
#
|
250
282
|
# @yield [Ably::Realtime::Channel] Block is called as soon as this channel is in the Detached or Failed state
|
251
283
|
# @return [Ably::Util::SafeDeferrable] Deferrable that supports both success (callback) and failure (errback) callback
|
@@ -274,9 +306,9 @@ module Ably
|
|
274
306
|
deferrable_for_state_change_to(STATE.Detached, &success_block)
|
275
307
|
end
|
276
308
|
|
277
|
-
# Presence object
|
278
|
-
#
|
279
|
-
#
|
309
|
+
# A {Ably::Realtime::Presence} object.
|
310
|
+
#
|
311
|
+
# @spec RTL9
|
280
312
|
#
|
281
313
|
# @return {Ably::Realtime::Presence}
|
282
314
|
#
|
@@ -284,14 +316,15 @@ module Ably
|
|
284
316
|
@presence
|
285
317
|
end
|
286
318
|
|
287
|
-
#
|
319
|
+
# Retrieves a {Ably::Models::PaginatedResult} object, containing an array of historical
|
320
|
+
# {Ably::Models::Message} objects for the channel. If the channel is configured to persist messages,
|
321
|
+
# then messages can be retrieved from history for up to 72 hours in the past. If not, messages can only
|
322
|
+
# be retrieved from history for up to two minutes in the past.
|
288
323
|
#
|
289
|
-
#
|
290
|
-
# channel was attached with the option <tt>until_attach: true</tt>. This is useful when a developer
|
291
|
-
# wishes to display historical messages with the guarantee that no messages have been missed since attach.
|
324
|
+
# @spec RSL2a
|
292
325
|
#
|
293
|
-
# @param (see Ably::Rest::Channel#history)
|
294
|
-
# @option options (see Ably::Rest::Channel#history)
|
326
|
+
# @param (see {Ably::Rest::Channel#history})
|
327
|
+
# @option options (see {Ably::Rest::Channel#history})
|
295
328
|
# @option options [Boolean] :until_attach When true, the history request will be limited only to messages published before this channel was attached. Channel must be attached
|
296
329
|
#
|
297
330
|
# @yield [Ably::Models::PaginatedResult<Ably::Models::Message>] First {Ably::Models::PaginatedResult page} of {Ably::Models::Message} objects accessible with {Ably::Models::PaginatedResult#items #items}.
|
@@ -312,8 +345,8 @@ module Ably
|
|
312
345
|
end
|
313
346
|
end
|
314
347
|
|
315
|
-
# @!attribute [r] __incoming_msgbus__
|
316
348
|
# @return [Ably::Util::PubSub] Client library internal channel incoming message bus
|
349
|
+
#
|
317
350
|
# @api private
|
318
351
|
def __incoming_msgbus__
|
319
352
|
@__incoming_msgbus__ ||= Ably::Util::PubSub.new(
|
@@ -321,7 +354,11 @@ module Ably
|
|
321
354
|
)
|
322
355
|
end
|
323
356
|
|
324
|
-
# Sets
|
357
|
+
# Sets the {Ably::Models::ChannelOptions} for the channel.
|
358
|
+
# An optional callback may be provided to notify of the success or failure of the operation.
|
359
|
+
#
|
360
|
+
# @spec RTL16
|
361
|
+
#
|
325
362
|
# @param channel_options [Hash, Ably::Models::ChannelOptions] A hash of options or a {Ably::Models::ChannelOptions}
|
326
363
|
# @return [Ably::Models::ChannelOptions]
|
327
364
|
def set_options(channel_options)
|
@@ -5,28 +5,29 @@ module Ably
|
|
5
5
|
include Ably::Modules::ChannelsCollection
|
6
6
|
|
7
7
|
# @return [Ably::Realtime::Channels]
|
8
|
+
#
|
8
9
|
def initialize(client)
|
9
10
|
super client, Ably::Realtime::Channel
|
10
11
|
end
|
11
12
|
|
12
|
-
# @!method get(name, channel_options = {})
|
13
13
|
# Return a {Ably::Realtime::Channel} for the given name
|
14
14
|
#
|
15
15
|
# @param name [String] The name of the channel
|
16
16
|
# @param channel_options [Hash, Ably::Models::ChannelOptions] A hash of options or a {Ably::Models::ChannelOptions}
|
17
|
-
#
|
17
|
+
#
|
18
|
+
# @return [Ably::Realtime::Channel]
|
18
19
|
#
|
19
20
|
def get(*args)
|
20
21
|
super
|
21
22
|
end
|
22
23
|
|
23
|
-
# @!method fetch(name, &missing_block)
|
24
24
|
# Return a {Ably::Realtime::Channel} for the given name if it exists, else the block will be called.
|
25
25
|
# This method is intentionally similar to {http://ruby-doc.org/core-2.1.3/Hash.html#method-i-fetch Hash#fetch} providing a simple way to check if a channel exists or not without creating one
|
26
26
|
#
|
27
27
|
# @param name [String] The name of the channel
|
28
28
|
# @yield [options] (optional) if a missing_block is passed to this method and no channel exists matching the name, this block is called
|
29
29
|
# @yieldparam [String] name of the missing channel
|
30
|
+
#
|
30
31
|
# @return [Ably::Realtime::Channel]
|
31
32
|
#
|
32
33
|
def fetch(*args)
|
@@ -121,23 +121,15 @@ module Ably::Realtime
|
|
121
121
|
presence.manager.sync_process_messages protocol_message.channel_serial, protocol_message.presence
|
122
122
|
|
123
123
|
when ACTION.Presence
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
presence.__incoming_msgbus__.publish :presence, presence_message
|
128
|
-
end
|
129
|
-
else
|
130
|
-
logger.fatal Ably::Exceptions::ProtocolError.new("Not published. Channel message limit exceeded #{protocol_message.message_size} bytes", 400, Ably::Exceptions::Codes::UNABLE_TO_RECOVER_CHANNEL_MESSAGE_LIMIT_EXCEEDED).message
|
124
|
+
presence = get_channel(protocol_message.channel).presence
|
125
|
+
protocol_message.presence.each do |presence_message|
|
126
|
+
presence.__incoming_msgbus__.publish :presence, presence_message
|
131
127
|
end
|
132
128
|
|
133
129
|
when ACTION.Message
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
channel.__incoming_msgbus__.publish :message, message
|
138
|
-
end
|
139
|
-
else
|
140
|
-
logger.fatal Ably::Exceptions::ProtocolError.new("Not published. Channel message limit exceeded #{protocol_message.message_size} bytes", 400, Ably::Exceptions::Codes::UNABLE_TO_RECOVER_CHANNEL_MESSAGE_LIMIT_EXCEEDED).message
|
130
|
+
channel = get_channel(protocol_message.channel)
|
131
|
+
protocol_message.messages.each do |message|
|
132
|
+
channel.__incoming_msgbus__.publish :message, message
|
141
133
|
end
|
142
134
|
|
143
135
|
when ACTION.Auth
|