ably 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/README.md +11 -11
- data/SPEC.md +87 -87
- data/ably.gemspec +1 -1
- data/lib/ably/exceptions.rb +4 -1
- data/lib/ably/models/{paginated_resource.rb → paginated_result.rb} +8 -8
- data/lib/ably/models/presence_message.rb +1 -1
- data/lib/ably/modules/conversions.rb +15 -0
- data/lib/ably/modules/encodeable.rb +2 -2
- data/lib/ably/modules/event_emitter.rb +8 -8
- data/lib/ably/modules/safe_deferrable.rb +15 -3
- data/lib/ably/modules/state_emitter.rb +2 -2
- data/lib/ably/modules/state_machine.rb +1 -1
- data/lib/ably/realtime/channel.rb +2 -4
- data/lib/ably/realtime/channel/channel_manager.rb +1 -1
- data/lib/ably/realtime/client.rb +4 -4
- data/lib/ably/realtime/client/incoming_message_dispatcher.rb +2 -2
- data/lib/ably/realtime/connection.rb +1 -1
- data/lib/ably/realtime/connection/connection_manager.rb +3 -3
- data/lib/ably/realtime/connection/connection_state_machine.rb +1 -1
- data/lib/ably/realtime/connection/websocket_transport.rb +2 -2
- data/lib/ably/realtime/presence.rb +23 -5
- data/lib/ably/realtime/presence/members_map.rb +16 -13
- data/lib/ably/rest/channel.rb +3 -2
- data/lib/ably/rest/client.rb +2 -2
- data/lib/ably/rest/presence.rb +4 -4
- data/lib/ably/util/pub_sub.rb +1 -1
- data/lib/ably/util/safe_deferrable.rb +1 -1
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/realtime/channel_history_spec.rb +1 -1
- data/spec/acceptance/realtime/channel_spec.rb +5 -15
- data/spec/acceptance/realtime/connection_failures_spec.rb +2 -2
- data/spec/acceptance/realtime/connection_spec.rb +16 -14
- data/spec/acceptance/realtime/message_spec.rb +91 -8
- data/spec/acceptance/realtime/presence_spec.rb +190 -71
- data/spec/acceptance/realtime/stats_spec.rb +2 -2
- data/spec/acceptance/rest/channel_spec.rb +1 -1
- data/spec/acceptance/rest/encoders_spec.rb +1 -1
- data/spec/acceptance/rest/message_spec.rb +73 -1
- data/spec/acceptance/rest/presence_spec.rb +4 -2
- data/spec/unit/models/{paginated_resource_spec.rb → paginated_result_spec.rb} +18 -18
- data/spec/unit/modules/event_emitter_spec.rb +27 -27
- data/spec/unit/modules/state_emitter_spec.rb +1 -1
- data/spec/unit/realtime/channel_spec.rb +2 -2
- data/spec/unit/realtime/connection_spec.rb +3 -3
- data/spec/unit/realtime/presence_spec.rb +2 -2
- metadata +44 -44
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZmExOTdmNDZiMmI3NGI3ZGFhM2E5MjU1MTVlYTQ0OTVmNGI0MDIyZQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f57c29988fe001f1524fdfc79036ded998a106e3
|
4
|
+
data.tar.gz: 22a1a07b82930174dc9fd270fe28765b26a14b1d
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NWY0ZmRlMDVmMGIxYjUwYTU2YmI1MzBkNzRiYWY3NGIwYjAyZWNjOTcxYTNk
|
11
|
-
NDZjYTdkNmY3ZWUyMjc1NjM2MTI0ZWYxY2I2M2ZlODAzZDVhMTc=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MTNmYTk3OTJiNjNiOGUwOWM2NDM0OWJjYTkxZjdmNjA4ZTBjMzA0YWFhYzdm
|
14
|
-
NjA3YmE1OTllMmVhYzVkNzhmMjA3ZDMwYjU4YzgzZTkyNWY4YmY1Y2QwNWJi
|
15
|
-
NWQzMjk2Mjk2MGNlYjA4NjgxODA5MjFhZmQ3ZGMwMDhjNDMzNGU=
|
6
|
+
metadata.gz: c438babd2ef3b0e82ff72e9a5b68e8f9d78b0fcc927e4c7c81ae15af1b9fd35fd10210bf1683a20de77834b3089170bb475a24e507c00f6b0053986c4c63b1ed
|
7
|
+
data.tar.gz: 11b46d0850d6642045f1aa157624ad24b5a8e9a28da65db4fd1b8a142f78477ca62dd5bbaee1dcf6a60fc4789326bbb6530965068e2d300810b4141aab017762
|
data/README.md
CHANGED
@@ -103,11 +103,11 @@ channel.publish('greeting', 'Hello World!')
|
|
103
103
|
|
104
104
|
```ruby
|
105
105
|
channel.history do |messages_page|
|
106
|
-
messages_page #=> #<Ably::Models::
|
106
|
+
messages_page #=> #<Ably::Models::PaginatedResult ...>
|
107
107
|
messages_page.items.first # #<Ably::Models::Message ...>
|
108
108
|
messages_page.items.first.data # payload for the message
|
109
109
|
messages_page.items.length # number of messages in the current page of history
|
110
|
-
messages_page.next # retrieves the next page => #<Ably::Models::
|
110
|
+
messages_page.next # retrieves the next page => #<Ably::Models::PaginatedResult ...>
|
111
111
|
messages_page.has_next? # false, there are more pages
|
112
112
|
end
|
113
113
|
```
|
@@ -127,7 +127,7 @@ channel.presence.history do |presence_page|
|
|
127
127
|
presence_page.items.first.action # Any of :enter, :update or :leave
|
128
128
|
presence_page.items.first.client_id # client ID of member
|
129
129
|
presence_page.items.first.data # optional data payload of member
|
130
|
-
presence_page.next # retrieves the next page => #<Ably::Models::
|
130
|
+
presence_page.next # retrieves the next page => #<Ably::Models::PaginatedResult ...>
|
131
131
|
end
|
132
132
|
```
|
133
133
|
|
@@ -153,30 +153,30 @@ channel.publish('myEvent', 'Hello!') #=> true
|
|
153
153
|
### Querying the History
|
154
154
|
|
155
155
|
```ruby
|
156
|
-
messages_page = channel.history #=> #<Ably::Models::
|
156
|
+
messages_page = channel.history #=> #<Ably::Models::PaginatedResult ...>
|
157
157
|
messages_page.items.first #=> #<Ably::Models::Message ...>
|
158
158
|
messages_page.items.first.data # payload for the message
|
159
|
-
messages_page.next # retrieves the next page => #<Ably::Models::
|
159
|
+
messages_page.next # retrieves the next page => #<Ably::Models::PaginatedResult ...>
|
160
160
|
messages_page.has_next? # false, there are more pages
|
161
161
|
```
|
162
162
|
|
163
163
|
### Presence on a channel
|
164
164
|
|
165
165
|
```ruby
|
166
|
-
members_page = channel.presence.get # => #<Ably::Models::
|
166
|
+
members_page = channel.presence.get # => #<Ably::Models::PaginatedResult ...>
|
167
167
|
members_page.items.first # first member present in this page => #<Ably::Models::PresenceMessage ...>
|
168
168
|
members_page.items.first.client_id # client ID of first member present
|
169
|
-
members_page.next # retrieves the next page => #<Ably::Models::
|
169
|
+
members_page.next # retrieves the next page => #<Ably::Models::PaginatedResult ...>
|
170
170
|
members_page.has_next? # false, there are more pages
|
171
171
|
```
|
172
172
|
|
173
173
|
### Querying the Presence History
|
174
174
|
|
175
175
|
```ruby
|
176
|
-
presence_page = channel.presence.history #=> #<Ably::Models::
|
176
|
+
presence_page = channel.presence.history #=> #<Ably::Models::PaginatedResult ...>
|
177
177
|
presence_page.items.first #=> #<Ably::Models::PresenceMessage ...>
|
178
178
|
presence_page.items.first.client_id # client ID of first member
|
179
|
-
presence_page.next # retrieves the next page => #<Ably::Models::
|
179
|
+
presence_page.next # retrieves the next page => #<Ably::Models::PaginatedResult ...>
|
180
180
|
```
|
181
181
|
|
182
182
|
### Generate Token and Token Request
|
@@ -200,9 +200,9 @@ token = client.auth.create_token_request
|
|
200
200
|
### Fetching your application's stats
|
201
201
|
|
202
202
|
```ruby
|
203
|
-
stats_page = client.stats #=> #<Ably::Models::
|
203
|
+
stats_page = client.stats #=> #<Ably::Models::PaginatedResult ...>
|
204
204
|
stats_page.items.first = #<Ably::Models::Stats ...>
|
205
|
-
stats_page.next # retrieves the next page => #<Ably::Models::
|
205
|
+
stats_page.next # retrieves the next page => #<Ably::Models::PaginatedResult ...>
|
206
206
|
```
|
207
207
|
|
208
208
|
### Fetching the Ably service time
|
data/SPEC.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Ably Realtime & REST Client Library 0.8.
|
1
|
+
# Ably Realtime & REST Client Library 0.8.1 Specification
|
2
2
|
|
3
3
|
### Ably::Realtime::Channel#history
|
4
4
|
_(see [spec/acceptance/realtime/channel_history_spec.rb](./spec/acceptance/realtime/channel_history_spec.rb))_
|
@@ -170,7 +170,7 @@ _(see [spec/acceptance/realtime/connection_failures_spec.rb](./spec/acceptance/r
|
|
170
170
|
* when DISCONNECTED ProtocolMessage received from the server
|
171
171
|
* [reconnects automatically and immediately](./spec/acceptance/realtime/connection_failures_spec.rb#L292)
|
172
172
|
* and subsequently fails to reconnect
|
173
|
-
* [retries every
|
173
|
+
* [retries every 15 seconds](./spec/acceptance/realtime/connection_failures_spec.rb#L322)
|
174
174
|
* when websocket transport is closed
|
175
175
|
* [reconnects automatically](./spec/acceptance/realtime/connection_failures_spec.rb#L365)
|
176
176
|
* after successfully reconnecting and resuming
|
@@ -276,43 +276,43 @@ _(see [spec/acceptance/realtime/connection_spec.rb](./spec/acceptance/realtime/c
|
|
276
276
|
* [catches the exception and logs the error](./spec/acceptance/realtime/connection_spec.rb#L508)
|
277
277
|
* recovery
|
278
278
|
* #recovery_key
|
279
|
-
* [is composed of connection
|
280
|
-
* [is available when connection is in one of the states: connecting, connected, disconnected, suspended, failed](./spec/acceptance/realtime/connection_spec.rb#
|
281
|
-
* [is nil when connection is explicitly CLOSED](./spec/acceptance/realtime/connection_spec.rb#
|
279
|
+
* [is composed of connection key and serial that is kept up to date with each message ACK received](./spec/acceptance/realtime/connection_spec.rb#L545)
|
280
|
+
* [is available when connection is in one of the states: connecting, connected, disconnected, suspended, failed](./spec/acceptance/realtime/connection_spec.rb#L568)
|
281
|
+
* [is nil when connection is explicitly CLOSED](./spec/acceptance/realtime/connection_spec.rb#L592)
|
282
282
|
* opening a new connection using a recently disconnected connection's #recovery_key
|
283
283
|
* connection#id and connection#key after recovery
|
284
|
-
* [remains the same](./spec/acceptance/realtime/connection_spec.rb#
|
284
|
+
* [remains the same](./spec/acceptance/realtime/connection_spec.rb#L606)
|
285
285
|
* when messages have been sent whilst the old connection is disconnected
|
286
286
|
* the new connection
|
287
|
-
* [recovers server-side queued messages](./spec/acceptance/realtime/connection_spec.rb#
|
287
|
+
* [recovers server-side queued messages](./spec/acceptance/realtime/connection_spec.rb#L647)
|
288
288
|
* with :recover option
|
289
289
|
* with invalid syntax
|
290
|
-
* [raises an exception](./spec/acceptance/realtime/connection_spec.rb#
|
290
|
+
* [raises an exception](./spec/acceptance/realtime/connection_spec.rb#L672)
|
291
291
|
* with invalid formatted value sent to server
|
292
|
-
* [triggers a fatal error on the connection object, sets the #error_reason and disconnects](./spec/acceptance/realtime/connection_spec.rb#
|
292
|
+
* [triggers a fatal error on the connection object, sets the #error_reason and disconnects](./spec/acceptance/realtime/connection_spec.rb#L681)
|
293
293
|
* with expired (missing) value sent to server
|
294
|
-
* [triggers an error on the connection object, sets the #error_reason, yet will connect anyway](./spec/acceptance/realtime/connection_spec.rb#
|
294
|
+
* [triggers an error on the connection object, sets the #error_reason, yet will connect anyway](./spec/acceptance/realtime/connection_spec.rb#L696)
|
295
295
|
* with many connections simultaneously
|
296
|
-
* [opens each with a unique connection#id and connection#key](./spec/acceptance/realtime/connection_spec.rb#
|
296
|
+
* [opens each with a unique connection#id and connection#key](./spec/acceptance/realtime/connection_spec.rb#L715)
|
297
297
|
* when a state transition is unsupported
|
298
|
-
* [emits a StateChangeError](./spec/acceptance/realtime/connection_spec.rb#
|
298
|
+
* [emits a StateChangeError](./spec/acceptance/realtime/connection_spec.rb#L735)
|
299
299
|
* protocol failure
|
300
300
|
* receiving an invalid ProtocolMessage
|
301
|
-
* [emits an error on the connection and logs a fatal error message](./spec/acceptance/realtime/connection_spec.rb#
|
301
|
+
* [emits an error on the connection and logs a fatal error message](./spec/acceptance/realtime/connection_spec.rb#L751)
|
302
302
|
* undocumented method
|
303
303
|
* #internet_up?
|
304
|
-
* [returns a Deferrable](./spec/acceptance/realtime/connection_spec.rb#
|
304
|
+
* [returns a Deferrable](./spec/acceptance/realtime/connection_spec.rb#L767)
|
305
305
|
* internet up URL protocol
|
306
306
|
* when using TLS for the connection
|
307
|
-
* [uses TLS for the Internet check to https://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#
|
307
|
+
* [uses TLS for the Internet check to https://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L778)
|
308
308
|
* when using a non-secured connection
|
309
|
-
* [uses TLS for the Internet check to http://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#
|
309
|
+
* [uses TLS for the Internet check to http://internet-up.ably-realtime.com/is-the-internet-up.txt](./spec/acceptance/realtime/connection_spec.rb#L788)
|
310
310
|
* when the Internet is up
|
311
|
-
* [calls the block with true](./spec/acceptance/realtime/connection_spec.rb#
|
312
|
-
* [calls the success callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#
|
311
|
+
* [calls the block with true](./spec/acceptance/realtime/connection_spec.rb#L797)
|
312
|
+
* [calls the success callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L804)
|
313
313
|
* when the Internet is down
|
314
|
-
* [calls the block with false](./spec/acceptance/realtime/connection_spec.rb#
|
315
|
-
* [calls the failure callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#
|
314
|
+
* [calls the block with false](./spec/acceptance/realtime/connection_spec.rb#L816)
|
315
|
+
* [calls the failure callback of the Deferrable](./spec/acceptance/realtime/connection_spec.rb#L823)
|
316
316
|
|
317
317
|
### Ably::Realtime::Channel Message
|
318
318
|
_(see [spec/acceptance/realtime/message_spec.rb](./spec/acceptance/realtime/message_spec.rb))_
|
@@ -473,7 +473,7 @@ _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/pre
|
|
473
473
|
* when set to a string
|
474
474
|
* [emits the new data for the leave event](./spec/acceptance/realtime/presence_spec.rb#L561)
|
475
475
|
* when set to nil
|
476
|
-
* [emits
|
476
|
+
* [emits a nil value for the data attribute when leaving](./spec/acceptance/realtime/presence_spec.rb#L574)
|
477
477
|
* when not passed as an argument
|
478
478
|
* [emits the previously defined value as a convenience](./spec/acceptance/realtime/presence_spec.rb#L587)
|
479
479
|
* it should behave like a public presence method
|
@@ -582,7 +582,7 @@ _(see [spec/acceptance/realtime/presence_spec.rb](./spec/acceptance/realtime/pre
|
|
582
582
|
* [expect :left event once underlying connection is closed](./spec/acceptance/realtime/presence_spec.rb#L1310)
|
583
583
|
* [expect :left event with client data from enter event](./spec/acceptance/realtime/presence_spec.rb#L1320)
|
584
584
|
* connection failure mid-way through a large member sync
|
585
|
-
*
|
585
|
+
* [resumes the SYNC operation](./spec/acceptance/realtime/presence_spec.rb#L1338)
|
586
586
|
|
587
587
|
### Ably::Realtime::Client#stats
|
588
588
|
_(see [spec/acceptance/realtime/stats_spec.rb](./spec/acceptance/realtime/stats_spec.rb))_
|
@@ -605,116 +605,116 @@ _(see [spec/acceptance/rest/auth_spec.rb](./spec/acceptance/rest/auth_spec.rb))_
|
|
605
605
|
* #request_token
|
606
606
|
* [returns a valid requested token in the expected format with valid issued and expires attributes](./spec/acceptance/rest/auth_spec.rb#L69)
|
607
607
|
* with option :client_id
|
608
|
-
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#
|
608
|
+
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101)
|
609
609
|
* with option :capability
|
610
|
-
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#
|
610
|
+
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101)
|
611
611
|
* with option :nonce
|
612
|
-
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#
|
612
|
+
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101)
|
613
613
|
* with option :timestamp
|
614
|
-
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#
|
614
|
+
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101)
|
615
615
|
* with option :ttl
|
616
|
-
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#
|
616
|
+
* [overrides default and uses camelCase notation for attributes](./spec/acceptance/rest/auth_spec.rb#L101)
|
617
617
|
* with :key option
|
618
|
-
* [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#
|
618
|
+
* [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L130)
|
619
619
|
* with :key_name & :key_secret options
|
620
|
-
* [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#
|
620
|
+
* [key_name is used in request and signing uses key_secret](./spec/acceptance/rest/auth_spec.rb#L159)
|
621
621
|
* with :query_time option
|
622
|
-
* [queries the server for the time](./spec/acceptance/rest/auth_spec.rb#
|
622
|
+
* [queries the server for the time](./spec/acceptance/rest/auth_spec.rb#L167)
|
623
623
|
* without :query_time option
|
624
|
-
* [does not query the server for the time](./spec/acceptance/rest/auth_spec.rb#
|
624
|
+
* [does not query the server for the time](./spec/acceptance/rest/auth_spec.rb#L176)
|
625
625
|
* with :auth_url option
|
626
626
|
* when response from :auth_url is a valid token request
|
627
|
-
* [requests a token from :auth_url using an HTTP GET request](./spec/acceptance/rest/auth_spec.rb#
|
628
|
-
* [returns a valid token generated from the token request](./spec/acceptance/rest/auth_spec.rb#
|
627
|
+
* [requests a token from :auth_url using an HTTP GET request](./spec/acceptance/rest/auth_spec.rb#L224)
|
628
|
+
* [returns a valid token generated from the token request](./spec/acceptance/rest/auth_spec.rb#L229)
|
629
629
|
* with :query_params
|
630
|
-
* [requests a token from :auth_url with the :query_params](./spec/acceptance/rest/auth_spec.rb#
|
630
|
+
* [requests a token from :auth_url with the :query_params](./spec/acceptance/rest/auth_spec.rb#L236)
|
631
631
|
* with :headers
|
632
|
-
* [requests a token from :auth_url with the HTTP headers set](./spec/acceptance/rest/auth_spec.rb#
|
632
|
+
* [requests a token from :auth_url with the HTTP headers set](./spec/acceptance/rest/auth_spec.rb#L244)
|
633
633
|
* with POST
|
634
|
-
* [requests a token from :auth_url using an HTTP POST instead of the default GET](./spec/acceptance/rest/auth_spec.rb#
|
634
|
+
* [requests a token from :auth_url using an HTTP POST instead of the default GET](./spec/acceptance/rest/auth_spec.rb#L252)
|
635
635
|
* when response from :auth_url is a token details object
|
636
|
-
* [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#
|
636
|
+
* [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L277)
|
637
637
|
* when response from :auth_url is text/plain content type and a token string
|
638
|
-
* [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#
|
638
|
+
* [returns TokenDetails created from the token JSON](./spec/acceptance/rest/auth_spec.rb#L294)
|
639
639
|
* when response is invalid
|
640
640
|
* 500
|
641
|
-
* [raises ServerError](./spec/acceptance/rest/auth_spec.rb#
|
641
|
+
* [raises ServerError](./spec/acceptance/rest/auth_spec.rb#L307)
|
642
642
|
* XML
|
643
|
-
* [raises InvalidResponseBody](./spec/acceptance/rest/auth_spec.rb#
|
643
|
+
* [raises InvalidResponseBody](./spec/acceptance/rest/auth_spec.rb#L318)
|
644
644
|
* with a Proc for the :auth_callback option
|
645
645
|
* that returns a TokenRequest
|
646
|
-
* [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#
|
647
|
-
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#
|
646
|
+
* [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L337)
|
647
|
+
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L342)
|
648
648
|
* that returns a TokenDetails JSON object
|
649
|
-
* [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#
|
650
|
-
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#
|
649
|
+
* [calls the Proc when authenticating to obtain the request token](./spec/acceptance/rest/auth_spec.rb#L371)
|
650
|
+
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L376)
|
651
651
|
* that returns a TokenDetails object
|
652
|
-
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#
|
652
|
+
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L397)
|
653
653
|
* that returns a Token string
|
654
|
-
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#
|
654
|
+
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L413)
|
655
655
|
* with client_id
|
656
|
-
* [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#
|
656
|
+
* [returns a token with the client_id](./spec/acceptance/rest/auth_spec.rb#L445)
|
657
657
|
* before #authorise has been called
|
658
|
-
* [has no current_token_details](./spec/acceptance/rest/auth_spec.rb#
|
658
|
+
* [has no current_token_details](./spec/acceptance/rest/auth_spec.rb#L452)
|
659
659
|
* #authorise
|
660
|
-
* [updates the persisted auth options that are then used for subsequent authorise requests](./spec/acceptance/rest/auth_spec.rb#
|
660
|
+
* [updates the persisted auth options that are then used for subsequent authorise requests](./spec/acceptance/rest/auth_spec.rb#L499)
|
661
661
|
* when called for the first time since the client has been instantiated
|
662
|
-
* [passes all options to #request_token](./spec/acceptance/rest/auth_spec.rb#
|
663
|
-
* [returns a valid token](./spec/acceptance/rest/auth_spec.rb#
|
664
|
-
* [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#
|
662
|
+
* [passes all options to #request_token](./spec/acceptance/rest/auth_spec.rb#L463)
|
663
|
+
* [returns a valid token](./spec/acceptance/rest/auth_spec.rb#L468)
|
664
|
+
* [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#L472)
|
665
665
|
* with previous authorisation
|
666
|
-
* [does not request a token if current_token_details has not expired](./spec/acceptance/rest/auth_spec.rb#
|
667
|
-
* [requests a new token if token is expired](./spec/acceptance/rest/auth_spec.rb#
|
668
|
-
* [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#
|
666
|
+
* [does not request a token if current_token_details has not expired](./spec/acceptance/rest/auth_spec.rb#L483)
|
667
|
+
* [requests a new token if token is expired](./spec/acceptance/rest/auth_spec.rb#L488)
|
668
|
+
* [issues a new token if option :force => true](./spec/acceptance/rest/auth_spec.rb#L494)
|
669
669
|
* with a Proc for the :auth_callback option
|
670
|
-
* [calls the Proc](./spec/acceptance/rest/auth_spec.rb#
|
671
|
-
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#
|
670
|
+
* [calls the Proc](./spec/acceptance/rest/auth_spec.rb#L515)
|
671
|
+
* [uses the token request returned from the callback when requesting a new token](./spec/acceptance/rest/auth_spec.rb#L519)
|
672
672
|
* for every subsequent #request_token
|
673
673
|
* without a :auth_callback Proc
|
674
|
-
* [calls the originally provided block](./spec/acceptance/rest/auth_spec.rb#
|
674
|
+
* [calls the originally provided block](./spec/acceptance/rest/auth_spec.rb#L525)
|
675
675
|
* with a provided block
|
676
|
-
* [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](./spec/acceptance/rest/auth_spec.rb#
|
676
|
+
* [does not call the originally provided Proc and calls the new #request_token :auth_callback Proc](./spec/acceptance/rest/auth_spec.rb#L532)
|
677
677
|
* #create_token_request
|
678
|
-
* [uses the key name from the client](./spec/acceptance/rest/auth_spec.rb#
|
679
|
-
* [uses the default TTL](./spec/acceptance/rest/auth_spec.rb#
|
680
|
-
* [uses the default capability](./spec/acceptance/rest/auth_spec.rb#
|
678
|
+
* [uses the key name from the client](./spec/acceptance/rest/auth_spec.rb#L548)
|
679
|
+
* [uses the default TTL](./spec/acceptance/rest/auth_spec.rb#L552)
|
680
|
+
* [uses the default capability](./spec/acceptance/rest/auth_spec.rb#L556)
|
681
681
|
* the nonce
|
682
|
-
* [is unique for every request](./spec/acceptance/rest/auth_spec.rb#
|
683
|
-
* [is at least 16 characters](./spec/acceptance/rest/auth_spec.rb#
|
682
|
+
* [is unique for every request](./spec/acceptance/rest/auth_spec.rb#L561)
|
683
|
+
* [is at least 16 characters](./spec/acceptance/rest/auth_spec.rb#L566)
|
684
684
|
* with option :ttl
|
685
|
-
* [overrides default](./spec/acceptance/rest/auth_spec.rb#
|
685
|
+
* [overrides default](./spec/acceptance/rest/auth_spec.rb#L577)
|
686
686
|
* with option :nonce
|
687
|
-
* [overrides default](./spec/acceptance/rest/auth_spec.rb#
|
687
|
+
* [overrides default](./spec/acceptance/rest/auth_spec.rb#L577)
|
688
688
|
* with option :client_id
|
689
|
-
* [overrides default](./spec/acceptance/rest/auth_spec.rb#
|
689
|
+
* [overrides default](./spec/acceptance/rest/auth_spec.rb#L577)
|
690
690
|
* with additional invalid attributes
|
691
|
-
* [are ignored](./spec/acceptance/rest/auth_spec.rb#
|
691
|
+
* [are ignored](./spec/acceptance/rest/auth_spec.rb#L585)
|
692
692
|
* when required fields are missing
|
693
|
-
* [should raise an exception if key secret is missing](./spec/acceptance/rest/auth_spec.rb#
|
694
|
-
* [should raise an exception if key name is missing](./spec/acceptance/rest/auth_spec.rb#
|
693
|
+
* [should raise an exception if key secret is missing](./spec/acceptance/rest/auth_spec.rb#L596)
|
694
|
+
* [should raise an exception if key name is missing](./spec/acceptance/rest/auth_spec.rb#L600)
|
695
695
|
* with :query_time option
|
696
|
-
* [queries the server for the timestamp](./spec/acceptance/rest/auth_spec.rb#
|
696
|
+
* [queries the server for the timestamp](./spec/acceptance/rest/auth_spec.rb#L609)
|
697
697
|
* with :timestamp option
|
698
|
-
* [uses the provided timestamp in the token request](./spec/acceptance/rest/auth_spec.rb#
|
698
|
+
* [uses the provided timestamp in the token request](./spec/acceptance/rest/auth_spec.rb#L619)
|
699
699
|
* signing
|
700
|
-
* [generates a valid HMAC](./spec/acceptance/rest/auth_spec.rb#
|
700
|
+
* [generates a valid HMAC](./spec/acceptance/rest/auth_spec.rb#L641)
|
701
701
|
* using token authentication
|
702
702
|
* with :token option
|
703
|
-
* [authenticates successfully using the provided :token](./spec/acceptance/rest/auth_spec.rb#
|
704
|
-
* [disallows publishing on unspecified capability channels](./spec/acceptance/rest/auth_spec.rb#
|
705
|
-
* [fails if timestamp is invalid](./spec/acceptance/rest/auth_spec.rb#
|
706
|
-
* [cannot be renewed automatically](./spec/acceptance/rest/auth_spec.rb#
|
703
|
+
* [authenticates successfully using the provided :token](./spec/acceptance/rest/auth_spec.rb#L664)
|
704
|
+
* [disallows publishing on unspecified capability channels](./spec/acceptance/rest/auth_spec.rb#L668)
|
705
|
+
* [fails if timestamp is invalid](./spec/acceptance/rest/auth_spec.rb#L676)
|
706
|
+
* [cannot be renewed automatically](./spec/acceptance/rest/auth_spec.rb#L684)
|
707
707
|
* when implicit as a result of using :client id
|
708
708
|
* and requests to the Ably server are mocked
|
709
|
-
* [will send a token request to the server](./spec/acceptance/rest/auth_spec.rb#
|
709
|
+
* [will send a token request to the server](./spec/acceptance/rest/auth_spec.rb#L712)
|
710
710
|
* a token is created
|
711
|
-
* [before a request is made](./spec/acceptance/rest/auth_spec.rb#
|
712
|
-
* [when a message is published](./spec/acceptance/rest/auth_spec.rb#
|
713
|
-
* [with capability and TTL defaults](./spec/acceptance/rest/auth_spec.rb#
|
711
|
+
* [before a request is made](./spec/acceptance/rest/auth_spec.rb#L721)
|
712
|
+
* [when a message is published](./spec/acceptance/rest/auth_spec.rb#L725)
|
713
|
+
* [with capability and TTL defaults](./spec/acceptance/rest/auth_spec.rb#L729)
|
714
714
|
* when using an :key and basic auth
|
715
|
-
* [#using_token_auth? is false](./spec/acceptance/rest/auth_spec.rb#
|
716
|
-
* [#key attribute contains the key string](./spec/acceptance/rest/auth_spec.rb#
|
717
|
-
* [#using_basic_auth? is true](./spec/acceptance/rest/auth_spec.rb#
|
715
|
+
* [#using_token_auth? is false](./spec/acceptance/rest/auth_spec.rb#L744)
|
716
|
+
* [#key attribute contains the key string](./spec/acceptance/rest/auth_spec.rb#L748)
|
717
|
+
* [#using_basic_auth? is true](./spec/acceptance/rest/auth_spec.rb#L752)
|
718
718
|
|
719
719
|
### Ably::Rest
|
720
720
|
_(see [spec/acceptance/rest/base_spec.rb](./spec/acceptance/rest/base_spec.rb))_
|
@@ -854,7 +854,7 @@ _(see [spec/acceptance/rest/encoders_spec.rb](./spec/acceptance/rest/encoders_sp
|
|
854
854
|
* with UTF-8 data
|
855
855
|
* [applies utf-8, cipher and base64 encodings and sets the encoding attribute to "utf-8/cipher+aes-128-cbc/base64"](./spec/acceptance/rest/encoders_spec.rb#L154)
|
856
856
|
* with binary data
|
857
|
-
* [applies cipher and base64 encoding and sets the encoding attribute to "
|
857
|
+
* [applies cipher and base64 encoding and sets the encoding attribute to "cipher+aes-128-cbc/base64"](./spec/acceptance/rest/encoders_spec.rb#L165)
|
858
858
|
* with JSON data
|
859
859
|
* [applies json, utf-8, cipher and base64 encoding and sets the encoding attribute to "json/utf-8/cipher+aes-128-cbc/base64"](./spec/acceptance/rest/encoders_spec.rb#L176)
|
860
860
|
|
@@ -2068,6 +2068,6 @@ _(see [spec/unit/util/pub_sub_spec.rb](./spec/unit/util/pub_sub_spec.rb))_
|
|
2068
2068
|
|
2069
2069
|
## Test summary
|
2070
2070
|
|
2071
|
-
* Passing tests:
|
2072
|
-
* Pending tests:
|
2071
|
+
* Passing tests: 1029
|
2072
|
+
* Pending tests: 6
|
2073
2073
|
* Failing tests: 0
|
data/ably.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_runtime_dependency 'faraday', '~> 0.9'
|
25
25
|
spec.add_runtime_dependency 'json'
|
26
26
|
spec.add_runtime_dependency 'websocket-driver', '~> 0.3'
|
27
|
-
spec.add_runtime_dependency 'msgpack
|
27
|
+
spec.add_runtime_dependency 'msgpack', '0.6.0pre1'
|
28
28
|
|
29
29
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
30
30
|
spec.add_development_dependency 'rake'
|
data/lib/ably/exceptions.rb
CHANGED
@@ -60,7 +60,7 @@ module Ably
|
|
60
60
|
# The HTTP request has returned a 500 error
|
61
61
|
class ServerError < BaseAblyException; end
|
62
62
|
|
63
|
-
#
|
63
|
+
# PaginatedResult cannot retrieve the page
|
64
64
|
class InvalidPageError < BaseAblyException; end
|
65
65
|
|
66
66
|
# The expected response from the server was invalid
|
@@ -74,5 +74,8 @@ module Ably
|
|
74
74
|
|
75
75
|
# The message could not be delivered to the server
|
76
76
|
class MessageDeliveryError < BaseAblyException; end
|
77
|
+
|
78
|
+
# The data payload type is not supported
|
79
|
+
class UnsupportedDataTypeError < BaseAblyException; end
|
77
80
|
end
|
78
81
|
end
|
@@ -6,10 +6,10 @@ module Ably::Models
|
|
6
6
|
#
|
7
7
|
# Paging information is provided by Ably in the LINK HTTP headers
|
8
8
|
#
|
9
|
-
class
|
9
|
+
class PaginatedResult
|
10
10
|
include Ably::Modules::AsyncWrapper if defined?(Ably::Realtime)
|
11
11
|
|
12
|
-
# The items contained within this {
|
12
|
+
# The items contained within this {PaginatedResult}
|
13
13
|
# @return [Array]
|
14
14
|
attr_reader :items
|
15
15
|
|
@@ -17,11 +17,11 @@ module Ably::Models
|
|
17
17
|
# @param [String] base_url Base URL for request that generated the http_response so that subsequent paged requests can be made
|
18
18
|
# @param [Client] client {Ably::Client} used to make the request to Ably
|
19
19
|
# @param [Hash] options Options for this paged resource
|
20
|
-
# @option options [Symbol,String] :coerce_into symbol or string representing class that should be used to create each item in the
|
20
|
+
# @option options [Symbol,String] :coerce_into symbol or string representing class that should be used to create each item in the PaginatedResult
|
21
21
|
#
|
22
22
|
# @yield [Object] block will be called for each resource object for the current page. This is a useful way to apply a transformation to any page resources after they are retrieved
|
23
23
|
#
|
24
|
-
# @return [
|
24
|
+
# @return [PaginatedResult]
|
25
25
|
def initialize(http_response, base_url, client, options = {}, &each_block)
|
26
26
|
@http_response = http_response
|
27
27
|
@client = client
|
@@ -40,11 +40,11 @@ module Ably::Models
|
|
40
40
|
# When used as part of the {Ably::Realtime} library, it will return a {Ably::Util::SafeDeferrable} object,
|
41
41
|
# and allows an optional success callback block to be provided.
|
42
42
|
#
|
43
|
-
# @return [
|
43
|
+
# @return [PaginatedResult,Ably::Util::SafeDeferrable]
|
44
44
|
def first(&success_callback)
|
45
45
|
async_wrap_if_realtime(success_callback) do
|
46
46
|
return nil unless supports_pagination?
|
47
|
-
|
47
|
+
PaginatedResult.new(client.get(pagination_url('first')), base_url, client, pagination_options, &each_block)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -52,11 +52,11 @@ module Ably::Models
|
|
52
52
|
# When used as part of the {Ably::Realtime} library, it will return a {Ably::Util::SafeDeferrable} object,
|
53
53
|
# and allows an optional success callback block to be provided.
|
54
54
|
#
|
55
|
-
# @return [
|
55
|
+
# @return [PaginatedResult,Ably::Util::SafeDeferrable]
|
56
56
|
def next(&success_callback)
|
57
57
|
async_wrap_if_realtime(success_callback) do
|
58
58
|
return nil unless has_next?
|
59
|
-
|
59
|
+
PaginatedResult.new(client.get(pagination_url('next')), base_url, client, pagination_options, &each_block)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|