ably 0.1.6 → 0.2.0
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/.gitignore +2 -0
- data/.travis.yml +9 -0
- data/LICENSE.txt +1 -1
- data/README.md +8 -1
- data/Rakefile +10 -0
- data/ably.gemspec +18 -18
- data/lib/ably.rb +6 -5
- data/lib/ably/auth.rb +11 -14
- data/lib/ably/exceptions.rb +18 -15
- data/lib/ably/logger.rb +102 -0
- data/lib/ably/models/error_info.rb +1 -1
- data/lib/ably/models/message.rb +19 -5
- data/lib/ably/models/message_encoders/base.rb +107 -0
- data/lib/ably/models/message_encoders/base64.rb +39 -0
- data/lib/ably/models/message_encoders/cipher.rb +80 -0
- data/lib/ably/models/message_encoders/json.rb +33 -0
- data/lib/ably/models/message_encoders/utf8.rb +33 -0
- data/lib/ably/models/paginated_resource.rb +23 -6
- data/lib/ably/models/presence_message.rb +19 -7
- data/lib/ably/models/protocol_message.rb +5 -4
- data/lib/ably/models/token.rb +2 -2
- data/lib/ably/modules/channels_collection.rb +0 -3
- data/lib/ably/modules/conversions.rb +3 -3
- data/lib/ably/modules/encodeable.rb +68 -0
- data/lib/ably/modules/event_emitter.rb +10 -4
- data/lib/ably/modules/event_machine_helpers.rb +6 -4
- data/lib/ably/modules/http_helpers.rb +7 -2
- data/lib/ably/modules/model_common.rb +2 -0
- data/lib/ably/modules/state_emitter.rb +10 -1
- data/lib/ably/realtime.rb +19 -12
- data/lib/ably/realtime/channel.rb +26 -13
- data/lib/ably/realtime/client.rb +31 -7
- data/lib/ably/realtime/client/incoming_message_dispatcher.rb +14 -3
- data/lib/ably/realtime/client/outgoing_message_dispatcher.rb +13 -4
- data/lib/ably/realtime/connection.rb +152 -46
- data/lib/ably/realtime/connection/connection_manager.rb +168 -0
- data/lib/ably/realtime/connection/connection_state_machine.rb +56 -33
- data/lib/ably/realtime/connection/websocket_transport.rb +56 -29
- data/lib/ably/{models → realtime/models}/nil_channel.rb +1 -1
- data/lib/ably/realtime/presence.rb +38 -13
- data/lib/ably/rest.rb +7 -5
- data/lib/ably/rest/channel.rb +24 -3
- data/lib/ably/rest/client.rb +56 -17
- data/lib/ably/rest/middleware/encoder.rb +49 -0
- data/lib/ably/rest/middleware/exceptions.rb +3 -2
- data/lib/ably/rest/middleware/logger.rb +37 -0
- data/lib/ably/rest/presence.rb +10 -2
- data/lib/ably/util/crypto.rb +57 -29
- data/lib/ably/util/pub_sub.rb +11 -0
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/realtime/channel_spec.rb +65 -7
- data/spec/acceptance/realtime/connection_spec.rb +123 -27
- data/spec/acceptance/realtime/message_spec.rb +319 -34
- data/spec/acceptance/realtime/presence_history_spec.rb +58 -0
- data/spec/acceptance/realtime/presence_spec.rb +160 -18
- data/spec/acceptance/rest/auth_spec.rb +93 -49
- data/spec/acceptance/rest/base_spec.rb +10 -10
- data/spec/acceptance/rest/channel_spec.rb +35 -19
- data/spec/acceptance/rest/channels_spec.rb +8 -8
- data/spec/acceptance/rest/message_spec.rb +224 -0
- data/spec/acceptance/rest/presence_spec.rb +159 -23
- data/spec/acceptance/rest/stats_spec.rb +5 -5
- data/spec/acceptance/rest/time_spec.rb +4 -4
- data/spec/integration/rest/auth.rb +1 -1
- data/spec/resources/crypto-data-128.json +56 -0
- data/spec/resources/crypto-data-256.json +56 -0
- data/spec/rspec_config.rb +39 -0
- data/spec/spec_helper.rb +4 -42
- data/spec/support/api_helper.rb +1 -1
- data/spec/support/event_machine_helper.rb +0 -5
- data/spec/support/protocol_msgbus_helper.rb +3 -3
- data/spec/support/test_app.rb +3 -3
- data/spec/unit/logger_spec.rb +135 -0
- data/spec/unit/models/message_encoders/base64_spec.rb +181 -0
- data/spec/unit/models/message_encoders/cipher_spec.rb +260 -0
- data/spec/unit/models/message_encoders/json_spec.rb +135 -0
- data/spec/unit/models/message_encoders/utf8_spec.rb +100 -0
- data/spec/unit/models/message_spec.rb +16 -1
- data/spec/unit/models/paginated_resource_spec.rb +46 -0
- data/spec/unit/models/presence_message_spec.rb +18 -5
- data/spec/unit/models/token_spec.rb +1 -1
- data/spec/unit/modules/event_emitter_spec.rb +24 -10
- data/spec/unit/realtime/channel_spec.rb +3 -3
- data/spec/unit/realtime/channels_spec.rb +1 -1
- data/spec/unit/realtime/client_spec.rb +44 -2
- data/spec/unit/realtime/connection_spec.rb +2 -2
- data/spec/unit/realtime/incoming_message_dispatcher_spec.rb +4 -4
- data/spec/unit/realtime/presence_spec.rb +1 -1
- data/spec/unit/realtime/realtime_spec.rb +3 -3
- data/spec/unit/realtime/websocket_transport_spec.rb +24 -0
- data/spec/unit/rest/channels_spec.rb +1 -1
- data/spec/unit/rest/client_spec.rb +45 -10
- data/spec/unit/util/crypto_spec.rb +82 -0
- data/spec/unit/{modules → util}/pub_sub_spec.rb +13 -1
- metadata +43 -12
- data/spec/acceptance/crypto.rb +0 -63
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'support/protocol_msgbus_helper'
|
3
|
+
|
4
|
+
describe Ably::Realtime::Connection::WebsocketTransport do
|
5
|
+
let(:client_ignored) { double('Ably::Realtime::Client').as_null_object }
|
6
|
+
let(:connection) { instance_double('Ably::Realtime::Connection', client: client_ignored, id: nil) }
|
7
|
+
|
8
|
+
let(:websocket_transport_without_eventmachine) do
|
9
|
+
Ably::Realtime::Connection::WebsocketTransport.send(:allocate).tap do |websocket_transport|
|
10
|
+
websocket_transport.send(:initialize, connection)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
before do
|
15
|
+
allow(Ably::Realtime::Connection::WebsocketTransport).to receive(:new).with(connection).and_return(websocket_transport_without_eventmachine)
|
16
|
+
end
|
17
|
+
|
18
|
+
subject do
|
19
|
+
Ably::Realtime::Connection::WebsocketTransport.new(connection)
|
20
|
+
end
|
21
|
+
|
22
|
+
it_behaves_like 'an incoming protocol message bus'
|
23
|
+
it_behaves_like 'an outgoing protocol message bus'
|
24
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Ably::Rest do
|
4
4
|
let(:options) { { api_key: 'app.key:secret' } }
|
@@ -8,31 +8,31 @@ describe Ably::Rest do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
describe Ably::Rest::Client do
|
11
|
-
describe
|
12
|
-
it
|
11
|
+
describe 'initializing the client' do
|
12
|
+
it 'should disallow an invalid key' do
|
13
13
|
expect { Ably::Rest::Client.new({}) }.to raise_error(ArgumentError, /api_key is missing/)
|
14
14
|
expect { Ably::Rest::Client.new(api_key: 'invalid') }.to raise_error(ArgumentError, /api_key is invalid/)
|
15
15
|
expect { Ably::Rest::Client.new(api_key: 'invalid:asdad') }.to raise_error(ArgumentError, /api_key is invalid/)
|
16
16
|
expect { Ably::Rest::Client.new(api_key: 'appid.keyuid:keysecret') }.to_not raise_error
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
19
|
+
it 'should disallow api_key and key_id' do
|
20
20
|
expect { Ably::Rest::Client.new(api_key: 'valid', key_id: 'invalid') }.to raise_error(ArgumentError, /api_key and key_id or key_secret are mutually exclusive/)
|
21
21
|
end
|
22
22
|
|
23
|
-
it
|
23
|
+
it 'should disallow api_key and key_secret' do
|
24
24
|
expect { Ably::Rest::Client.new(api_key: 'valid', key_secret: 'invalid') }.to raise_error(ArgumentError, /api_key and key_id or key_secret are mutually exclusive/)
|
25
25
|
end
|
26
26
|
|
27
27
|
context 'using key_id and key_secret' do
|
28
28
|
let(:client) { Ably::Rest::Client.new(key_id: 'id', key_secret: 'secret') }
|
29
29
|
|
30
|
-
it
|
30
|
+
it 'should allow key_id and key_secret in place of api_key' do
|
31
31
|
expect(client.auth.api_key).to eql('id:secret')
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
context
|
35
|
+
context 'with a string key instead of options' do
|
36
36
|
let(:options) { 'app.key:secret' }
|
37
37
|
subject { Ably::Rest::Client.new(options) }
|
38
38
|
|
@@ -49,17 +49,17 @@ describe Ably::Rest do
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
context
|
52
|
+
context 'with a client_id' do
|
53
53
|
it "should require a valid key" do
|
54
54
|
expect { Ably::Rest::Client.new(client_id: 'valid') }.to raise_error(ArgumentError, /client_id cannot be provided without a complete API key/)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
58
|
+
it 'should default to the production REST end point' do
|
59
59
|
expect(Ably::Rest::Client.new(api_key: 'appid.keyuid:keysecret').endpoint.to_s).to eql('https://rest.ably.io')
|
60
60
|
end
|
61
61
|
|
62
|
-
it
|
62
|
+
it 'should allow an environment to be set' do
|
63
63
|
expect(Ably::Rest::Client.new(api_key: 'appid.keyuid:keysecret', environment: 'sandbox').endpoint.to_s).to eql('https://sandbox-rest.ably.io')
|
64
64
|
end
|
65
65
|
|
@@ -108,6 +108,41 @@ describe Ably::Rest do
|
|
108
108
|
expect(subject.auth_options).to eql({ option: 1 })
|
109
109
|
end
|
110
110
|
end
|
111
|
+
|
112
|
+
context 'logger' do
|
113
|
+
context 'defaults' do
|
114
|
+
subject { Ably::Rest::Client.new(options) }
|
115
|
+
|
116
|
+
it 'uses default Ruby Logger by default' do
|
117
|
+
expect(subject.logger.logger).to be_a(::Logger)
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'defaults to Logger::ERROR log level' do
|
121
|
+
expect(subject.logger.log_level).to eql(::Logger::ERROR)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'with custom logger and log_level' do
|
126
|
+
let(:custom_logger) do
|
127
|
+
Class.new do
|
128
|
+
extend Forwardable
|
129
|
+
def initialize
|
130
|
+
@logger = Logger.new(STDOUT)
|
131
|
+
end
|
132
|
+
def_delegators :@logger, :fatal, :error, :warn, :info, :debug, :level, :level=
|
133
|
+
end
|
134
|
+
end
|
135
|
+
subject { Ably::Rest::Client.new(options.merge(logger: custom_logger.new, log_level: :debug)) }
|
136
|
+
|
137
|
+
it 'uses the custom logger' do
|
138
|
+
expect(subject.logger.logger.class).to eql(custom_logger)
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'sets the custom log level' do
|
142
|
+
expect(subject.logger.log_level).to eql(Logger::DEBUG)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
111
146
|
end
|
112
147
|
end
|
113
148
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'msgpack'
|
3
|
+
|
4
|
+
describe Ably::Util::Crypto do
|
5
|
+
let(:seret_key) { SecureRandom.hex }
|
6
|
+
let(:cipher_options) { { key: seret_key } }
|
7
|
+
subject { Ably::Util::Crypto.new(cipher_options) }
|
8
|
+
|
9
|
+
context 'defaults' do
|
10
|
+
let(:expected_defaults) do
|
11
|
+
{
|
12
|
+
algorithm: 'AES',
|
13
|
+
mode: 'CBC',
|
14
|
+
key_length: 128
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
specify 'match other client libraries' do
|
19
|
+
expect(Ably::Util::Crypto::DEFAULTS).to eql(expected_defaults)
|
20
|
+
expect(Ably::Util::Crypto::BLOCK_LENGTH).to eql(16)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'encrypts & decrypt' do
|
25
|
+
let(:string) { SecureRandom.hex }
|
26
|
+
let(:byte_array) { SecureRandom.hex.to_msgpack.unpack('C*') }
|
27
|
+
|
28
|
+
specify 'a string' do
|
29
|
+
encrypted = subject.encrypt(string)
|
30
|
+
expect(subject.decrypt(encrypted)).to eql(string)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'encrypting an empty string' do
|
35
|
+
let(:empty_string) { '' }
|
36
|
+
|
37
|
+
it 'raises an ErgumentError' do
|
38
|
+
expect { subject.encrypt(empty_string) }.to raise_error ArgumentError, /data must not be empty/
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'using shared client lib fixture data' do
|
43
|
+
let(:resources_root) { File.expand_path('../../../resources', __FILE__) }
|
44
|
+
let(:encryption_data_128) { JSON.parse(File.read(File.join(resources_root, 'crypto-data-128.json'))) }
|
45
|
+
let(:encryption_data_256) { JSON.parse(File.read(File.join(resources_root, 'crypto-data-256.json'))) }
|
46
|
+
|
47
|
+
shared_examples 'an Ably encrypter and decrypter' do
|
48
|
+
let(:algorithm) { data['algorithm'].upcase }
|
49
|
+
let(:mode) { data['mode'].upcase }
|
50
|
+
let(:key_length) { data['keylength'] }
|
51
|
+
let(:secret_key) { Base64.decode64(data['key']) }
|
52
|
+
let(:iv) { Base64.decode64(data['iv']) }
|
53
|
+
|
54
|
+
let(:cipher_options) { { key: secret_key, algorithm: algorithm, mode: mode, key_length: key_length } }
|
55
|
+
|
56
|
+
context 'text payload' do
|
57
|
+
let(:payload) { data['items'].first['encoded']['data'] }
|
58
|
+
let(:encrypted) { data['items'].first['encrypted']['data'] }
|
59
|
+
|
60
|
+
it 'encrypts exactly the same binary data as other client libraries' do
|
61
|
+
expect(subject.encrypt(payload, iv: iv)).to eql(Base64.decode64(encrypted))
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'decrypts exactly the same binary data as other client libraries' do
|
65
|
+
expect(subject.decrypt(Base64.decode64(encrypted))).to eql(payload)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'with AES-128-CBC' do
|
71
|
+
let(:data) { encryption_data_128 }
|
72
|
+
|
73
|
+
it_behaves_like 'an Ably encrypter and decrypter'
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'with AES-256-CBC' do
|
77
|
+
let(:data) { encryption_data_256 }
|
78
|
+
|
79
|
+
it_behaves_like 'an Ably encrypter and decrypter'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -8,7 +8,7 @@ describe Ably::Util::PubSub do
|
|
8
8
|
subject { Ably::Util::PubSub.new(options) }
|
9
9
|
|
10
10
|
context 'event fan out' do
|
11
|
-
specify do
|
11
|
+
specify 'allows publishing to more than on subscriber' do
|
12
12
|
expect(obj).to receive(:received_message).with(msg).twice
|
13
13
|
2.times do
|
14
14
|
subject.subscribe(:message) { |msg| obj.received_message msg }
|
@@ -34,6 +34,18 @@ describe Ably::Util::PubSub do
|
|
34
34
|
subject.subscribe('valid') { |msg| obj.received_message msg }
|
35
35
|
subject.publish :valid, msg
|
36
36
|
end
|
37
|
+
|
38
|
+
context 'and two different configurations but sharing the same class' do
|
39
|
+
let!(:exception_pubsub) { Ably::Util::PubSub.new(coerce_into: Proc.new { raise KeyError }) }
|
40
|
+
|
41
|
+
it 'does not share state' do
|
42
|
+
expect(obj).to receive(:received_message).with(msg).once
|
43
|
+
subject.subscribe('valid') { |msg| obj.received_message msg }
|
44
|
+
subject.publish :valid, msg
|
45
|
+
|
46
|
+
expect { exception_pubsub.publish :fail }.to raise_error KeyError
|
47
|
+
end
|
48
|
+
end
|
37
49
|
end
|
38
50
|
|
39
51
|
context 'without coercion' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ably
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lewis Marshall
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 1.0.0
|
34
|
+
version: 1.0.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 1.0.0
|
41
|
+
version: 1.0.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: faraday
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,19 +82,19 @@ dependencies:
|
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0.3'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name: msgpack
|
85
|
+
name: msgpack-ably
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 0.5.10
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 0.5.10
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: bundler
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,6 +188,7 @@ extensions: []
|
|
188
188
|
extra_rdoc_files: []
|
189
189
|
files:
|
190
190
|
- ".gitignore"
|
191
|
+
- ".travis.yml"
|
191
192
|
- Gemfile
|
192
193
|
- LICENSE.txt
|
193
194
|
- README.md
|
@@ -196,16 +197,22 @@ files:
|
|
196
197
|
- lib/ably.rb
|
197
198
|
- lib/ably/auth.rb
|
198
199
|
- lib/ably/exceptions.rb
|
200
|
+
- lib/ably/logger.rb
|
199
201
|
- lib/ably/models/error_info.rb
|
200
202
|
- lib/ably/models/idiomatic_ruby_wrapper.rb
|
201
203
|
- lib/ably/models/message.rb
|
202
|
-
- lib/ably/models/
|
204
|
+
- lib/ably/models/message_encoders/base.rb
|
205
|
+
- lib/ably/models/message_encoders/base64.rb
|
206
|
+
- lib/ably/models/message_encoders/cipher.rb
|
207
|
+
- lib/ably/models/message_encoders/json.rb
|
208
|
+
- lib/ably/models/message_encoders/utf8.rb
|
203
209
|
- lib/ably/models/paginated_resource.rb
|
204
210
|
- lib/ably/models/presence_message.rb
|
205
211
|
- lib/ably/models/protocol_message.rb
|
206
212
|
- lib/ably/models/token.rb
|
207
213
|
- lib/ably/modules/channels_collection.rb
|
208
214
|
- lib/ably/modules/conversions.rb
|
215
|
+
- lib/ably/modules/encodeable.rb
|
209
216
|
- lib/ably/modules/enum.rb
|
210
217
|
- lib/ably/modules/event_emitter.rb
|
211
218
|
- lib/ably/modules/event_machine_helpers.rb
|
@@ -220,23 +227,26 @@ files:
|
|
220
227
|
- lib/ably/realtime/client/incoming_message_dispatcher.rb
|
221
228
|
- lib/ably/realtime/client/outgoing_message_dispatcher.rb
|
222
229
|
- lib/ably/realtime/connection.rb
|
230
|
+
- lib/ably/realtime/connection/connection_manager.rb
|
223
231
|
- lib/ably/realtime/connection/connection_state_machine.rb
|
224
232
|
- lib/ably/realtime/connection/websocket_transport.rb
|
233
|
+
- lib/ably/realtime/models/nil_channel.rb
|
225
234
|
- lib/ably/realtime/presence.rb
|
226
235
|
- lib/ably/rest.rb
|
227
236
|
- lib/ably/rest/channel.rb
|
228
237
|
- lib/ably/rest/channels.rb
|
229
238
|
- lib/ably/rest/client.rb
|
239
|
+
- lib/ably/rest/middleware/encoder.rb
|
230
240
|
- lib/ably/rest/middleware/exceptions.rb
|
231
241
|
- lib/ably/rest/middleware/external_exceptions.rb
|
232
242
|
- lib/ably/rest/middleware/fail_if_unsupported_mime_type.rb
|
243
|
+
- lib/ably/rest/middleware/logger.rb
|
233
244
|
- lib/ably/rest/middleware/parse_json.rb
|
234
245
|
- lib/ably/rest/middleware/parse_message_pack.rb
|
235
246
|
- lib/ably/rest/presence.rb
|
236
247
|
- lib/ably/util/crypto.rb
|
237
248
|
- lib/ably/util/pub_sub.rb
|
238
249
|
- lib/ably/version.rb
|
239
|
-
- spec/acceptance/crypto.rb
|
240
250
|
- spec/acceptance/realtime/channel_history_spec.rb
|
241
251
|
- spec/acceptance/realtime/channel_spec.rb
|
242
252
|
- spec/acceptance/realtime/connection_spec.rb
|
@@ -247,19 +257,28 @@ files:
|
|
247
257
|
- spec/acceptance/rest/base_spec.rb
|
248
258
|
- spec/acceptance/rest/channel_spec.rb
|
249
259
|
- spec/acceptance/rest/channels_spec.rb
|
260
|
+
- spec/acceptance/rest/message_spec.rb
|
250
261
|
- spec/acceptance/rest/presence_spec.rb
|
251
262
|
- spec/acceptance/rest/stats_spec.rb
|
252
263
|
- spec/acceptance/rest/time_spec.rb
|
253
264
|
- spec/integration/modules/state_emitter_spec.rb
|
254
265
|
- spec/integration/rest/auth.rb
|
266
|
+
- spec/resources/crypto-data-128.json
|
267
|
+
- spec/resources/crypto-data-256.json
|
268
|
+
- spec/rspec_config.rb
|
255
269
|
- spec/spec_helper.rb
|
256
270
|
- spec/support/api_helper.rb
|
257
271
|
- spec/support/event_machine_helper.rb
|
258
272
|
- spec/support/model_helper.rb
|
259
273
|
- spec/support/protocol_msgbus_helper.rb
|
260
274
|
- spec/support/test_app.rb
|
275
|
+
- spec/unit/logger_spec.rb
|
261
276
|
- spec/unit/models/error_info_spec.rb
|
262
277
|
- spec/unit/models/idiomatic_ruby_wrapper_spec.rb
|
278
|
+
- spec/unit/models/message_encoders/base64_spec.rb
|
279
|
+
- spec/unit/models/message_encoders/cipher_spec.rb
|
280
|
+
- spec/unit/models/message_encoders/json_spec.rb
|
281
|
+
- spec/unit/models/message_encoders/utf8_spec.rb
|
263
282
|
- spec/unit/models/message_spec.rb
|
264
283
|
- spec/unit/models/paginated_resource_spec.rb
|
265
284
|
- spec/unit/models/presence_message_spec.rb
|
@@ -268,7 +287,6 @@ files:
|
|
268
287
|
- spec/unit/modules/conversions_spec.rb
|
269
288
|
- spec/unit/modules/enum_spec.rb
|
270
289
|
- spec/unit/modules/event_emitter_spec.rb
|
271
|
-
- spec/unit/modules/pub_sub_spec.rb
|
272
290
|
- spec/unit/realtime/channel_spec.rb
|
273
291
|
- spec/unit/realtime/channels_spec.rb
|
274
292
|
- spec/unit/realtime/client_spec.rb
|
@@ -276,8 +294,11 @@ files:
|
|
276
294
|
- spec/unit/realtime/incoming_message_dispatcher_spec.rb
|
277
295
|
- spec/unit/realtime/presence_spec.rb
|
278
296
|
- spec/unit/realtime/realtime_spec.rb
|
297
|
+
- spec/unit/realtime/websocket_transport_spec.rb
|
279
298
|
- spec/unit/rest/channels_spec.rb
|
280
299
|
- spec/unit/rest/client_spec.rb
|
300
|
+
- spec/unit/util/crypto_spec.rb
|
301
|
+
- spec/unit/util/pub_sub_spec.rb
|
281
302
|
homepage: http://github.com/ably/ably-ruby
|
282
303
|
licenses:
|
283
304
|
- MIT
|
@@ -303,7 +324,6 @@ signing_key:
|
|
303
324
|
specification_version: 4
|
304
325
|
summary: A Ruby client library for ably.io, the real-time messaging service
|
305
326
|
test_files:
|
306
|
-
- spec/acceptance/crypto.rb
|
307
327
|
- spec/acceptance/realtime/channel_history_spec.rb
|
308
328
|
- spec/acceptance/realtime/channel_spec.rb
|
309
329
|
- spec/acceptance/realtime/connection_spec.rb
|
@@ -314,19 +334,28 @@ test_files:
|
|
314
334
|
- spec/acceptance/rest/base_spec.rb
|
315
335
|
- spec/acceptance/rest/channel_spec.rb
|
316
336
|
- spec/acceptance/rest/channels_spec.rb
|
337
|
+
- spec/acceptance/rest/message_spec.rb
|
317
338
|
- spec/acceptance/rest/presence_spec.rb
|
318
339
|
- spec/acceptance/rest/stats_spec.rb
|
319
340
|
- spec/acceptance/rest/time_spec.rb
|
320
341
|
- spec/integration/modules/state_emitter_spec.rb
|
321
342
|
- spec/integration/rest/auth.rb
|
343
|
+
- spec/resources/crypto-data-128.json
|
344
|
+
- spec/resources/crypto-data-256.json
|
345
|
+
- spec/rspec_config.rb
|
322
346
|
- spec/spec_helper.rb
|
323
347
|
- spec/support/api_helper.rb
|
324
348
|
- spec/support/event_machine_helper.rb
|
325
349
|
- spec/support/model_helper.rb
|
326
350
|
- spec/support/protocol_msgbus_helper.rb
|
327
351
|
- spec/support/test_app.rb
|
352
|
+
- spec/unit/logger_spec.rb
|
328
353
|
- spec/unit/models/error_info_spec.rb
|
329
354
|
- spec/unit/models/idiomatic_ruby_wrapper_spec.rb
|
355
|
+
- spec/unit/models/message_encoders/base64_spec.rb
|
356
|
+
- spec/unit/models/message_encoders/cipher_spec.rb
|
357
|
+
- spec/unit/models/message_encoders/json_spec.rb
|
358
|
+
- spec/unit/models/message_encoders/utf8_spec.rb
|
330
359
|
- spec/unit/models/message_spec.rb
|
331
360
|
- spec/unit/models/paginated_resource_spec.rb
|
332
361
|
- spec/unit/models/presence_message_spec.rb
|
@@ -335,7 +364,6 @@ test_files:
|
|
335
364
|
- spec/unit/modules/conversions_spec.rb
|
336
365
|
- spec/unit/modules/enum_spec.rb
|
337
366
|
- spec/unit/modules/event_emitter_spec.rb
|
338
|
-
- spec/unit/modules/pub_sub_spec.rb
|
339
367
|
- spec/unit/realtime/channel_spec.rb
|
340
368
|
- spec/unit/realtime/channels_spec.rb
|
341
369
|
- spec/unit/realtime/client_spec.rb
|
@@ -343,6 +371,9 @@ test_files:
|
|
343
371
|
- spec/unit/realtime/incoming_message_dispatcher_spec.rb
|
344
372
|
- spec/unit/realtime/presence_spec.rb
|
345
373
|
- spec/unit/realtime/realtime_spec.rb
|
374
|
+
- spec/unit/realtime/websocket_transport_spec.rb
|
346
375
|
- spec/unit/rest/channels_spec.rb
|
347
376
|
- spec/unit/rest/client_spec.rb
|
377
|
+
- spec/unit/util/crypto_spec.rb
|
378
|
+
- spec/unit/util/pub_sub_spec.rb
|
348
379
|
has_rdoc:
|