ably 0.1.4 → 0.1.5
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/ably.gemspec +1 -0
- data/lib/ably/auth.rb +9 -13
- data/lib/ably/models/idiomatic_ruby_wrapper.rb +27 -39
- data/lib/ably/modules/conversions.rb +31 -10
- data/lib/ably/modules/enum.rb +201 -0
- data/lib/ably/modules/event_emitter.rb +81 -0
- data/lib/ably/modules/event_machine_helpers.rb +21 -0
- data/lib/ably/modules/http_helpers.rb +13 -0
- data/lib/ably/modules/state.rb +67 -0
- data/lib/ably/realtime.rb +6 -1
- data/lib/ably/realtime/channel.rb +117 -56
- data/lib/ably/realtime/client.rb +7 -50
- data/lib/ably/realtime/client/incoming_message_dispatcher.rb +116 -0
- data/lib/ably/realtime/client/outgoing_message_dispatcher.rb +63 -0
- data/lib/ably/realtime/connection.rb +97 -14
- data/lib/ably/realtime/models/error_info.rb +3 -2
- data/lib/ably/realtime/models/message.rb +28 -3
- data/lib/ably/realtime/models/nil_channel.rb +21 -0
- data/lib/ably/realtime/models/protocol_message.rb +35 -27
- data/lib/ably/rest/client.rb +39 -23
- data/lib/ably/rest/middleware/external_exceptions.rb +1 -1
- data/lib/ably/rest/middleware/parse_json.rb +7 -2
- data/lib/ably/rest/middleware/parse_message_pack.rb +23 -0
- data/lib/ably/rest/models/paged_resource.rb +4 -4
- data/lib/ably/util/pub_sub.rb +32 -0
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/realtime/channel_spec.rb +1 -0
- data/spec/acceptance/realtime/message_spec.rb +136 -0
- data/spec/acceptance/rest/base_spec.rb +51 -1
- data/spec/acceptance/rest/presence_spec.rb +7 -2
- data/spec/integration/modules/state_spec.rb +66 -0
- data/spec/{unit → integration/rest}/auth.rb +0 -0
- data/spec/support/api_helper.rb +5 -2
- data/spec/support/protocol_msgbus_helper.rb +29 -0
- data/spec/support/test_app.rb +14 -3
- data/spec/unit/{conversions.rb → modules/conversions_spec.rb} +1 -1
- data/spec/unit/modules/enum_spec.rb +263 -0
- data/spec/unit/modules/event_emitter_spec.rb +81 -0
- data/spec/unit/modules/pub_sub_spec.rb +74 -0
- data/spec/unit/realtime/channel_spec.rb +27 -0
- data/spec/unit/realtime/client_spec.rb +8 -0
- data/spec/unit/realtime/connection_spec.rb +40 -0
- data/spec/unit/realtime/error_info_spec.rb +9 -1
- data/spec/unit/realtime/incoming_message_dispatcher_spec.rb +36 -0
- data/spec/unit/realtime/message_spec.rb +2 -2
- data/spec/unit/realtime/protocol_message_spec.rb +78 -9
- data/spec/unit/rest/{rest_spec.rb → client_spec.rb} +0 -0
- data/spec/unit/rest/message_spec.rb +1 -1
- metadata +51 -9
- data/lib/ably/realtime/callbacks.rb +0 -15
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ably::Util::PubSub do
|
4
|
+
let(:options) { {} }
|
5
|
+
let(:obj) { double('example') }
|
6
|
+
let(:msg) { double('message') }
|
7
|
+
|
8
|
+
subject { Ably::Util::PubSub.new(options) }
|
9
|
+
|
10
|
+
context 'event fan out' do
|
11
|
+
specify do
|
12
|
+
expect(obj).to receive(:received_message).with(msg).twice
|
13
|
+
2.times do
|
14
|
+
subject.subscribe(:message) { |msg| obj.received_message msg }
|
15
|
+
end
|
16
|
+
subject.publish :message, msg
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'sends only messages to matching event names' do
|
20
|
+
expect(obj).to receive(:received_message).with(msg).once
|
21
|
+
subject.subscribe(:valid) { |msg| obj.received_message msg }
|
22
|
+
subject.publish :valid, msg
|
23
|
+
subject.publish :ignored, msg
|
24
|
+
subject.publish 'valid', msg
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'with coercion' do
|
28
|
+
let(:options) do
|
29
|
+
{ coerce_into: Proc.new { |event| String(event) } }
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'calls the provided proc to coerce the event name' do
|
33
|
+
expect(obj).to receive(:received_message).with(msg).once
|
34
|
+
subject.subscribe('valid') { |msg| obj.received_message msg }
|
35
|
+
subject.publish :valid, msg
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'without coercion' do
|
40
|
+
it 'only matches event names on type matches' do
|
41
|
+
expect(obj).to_not receive(:received_message).with(msg)
|
42
|
+
subject.subscribe('valid') { |msg| obj.received_message msg }
|
43
|
+
subject.publish :valid, msg
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context '#off' do
|
49
|
+
let(:callback) { Proc.new { |msg| obj.received_message msg } }
|
50
|
+
|
51
|
+
before do
|
52
|
+
subject.subscribe(:message, &callback)
|
53
|
+
end
|
54
|
+
|
55
|
+
after do
|
56
|
+
subject.publish :message, msg
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'deletes matching callbacks' do
|
60
|
+
expect(obj).to_not receive(:received_message).with(msg)
|
61
|
+
subject.unsubscribe(:message, &callback)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'deletes all callbacks if not block given' do
|
65
|
+
expect(obj).to_not receive(:received_message).with(msg)
|
66
|
+
subject.unsubscribe(:message)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'continues if the block does not exist' do
|
70
|
+
expect(obj).to receive(:received_message).with(msg)
|
71
|
+
subject.unsubscribe(:message) { true }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "support/protocol_msgbus_helper"
|
3
|
+
|
4
|
+
describe Ably::Realtime::Channel do
|
5
|
+
let(:client) { double(:client) }
|
6
|
+
let(:channel_name) { 'test' }
|
7
|
+
|
8
|
+
subject do
|
9
|
+
Ably::Realtime::Channel.new(client, channel_name)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'callbacks' do
|
13
|
+
specify 'are supported for valid STATE events' do
|
14
|
+
state = nil
|
15
|
+
subject.on(:initialized) { state = :ready }
|
16
|
+
expect { subject.trigger(:initialized) }.to change { state }.to(:ready)
|
17
|
+
end
|
18
|
+
|
19
|
+
specify 'fail with unacceptable STATE event names' do
|
20
|
+
expect { subject.on(:invalid) }.to raise_error KeyError
|
21
|
+
expect { subject.trigger(:invalid) }.to raise_error KeyError
|
22
|
+
expect { subject.off(:invalid) }.to raise_error KeyError
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it_behaves_like 'an incoming protocol message bus'
|
27
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "support/protocol_msgbus_helper"
|
3
|
+
|
4
|
+
describe Ably::Realtime::Connection do
|
5
|
+
let(:client) { double(:client) }
|
6
|
+
let(:klass) { Class.new(Ably::Realtime::Connection) do; end }
|
7
|
+
|
8
|
+
before do
|
9
|
+
# Override self.new with a generic implementation of new as EventMachine::Connection
|
10
|
+
# overrides self.new by default, and using EventMachine in unit tests is unnecessary
|
11
|
+
klass.instance_eval do
|
12
|
+
def self.new(*args)
|
13
|
+
obj = self.allocate
|
14
|
+
obj.orig_send :initialize, *args
|
15
|
+
obj
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
subject do
|
21
|
+
klass.new(client)
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'callbacks' do
|
25
|
+
specify 'are supported for valid STATE events' do
|
26
|
+
state = nil
|
27
|
+
subject.on(:initialized) { state = :ready }
|
28
|
+
expect { subject.trigger(:initialized) }.to change { state }.to(:ready)
|
29
|
+
end
|
30
|
+
|
31
|
+
specify 'fail with unacceptable STATE event names' do
|
32
|
+
expect { subject.on(:invalid) }.to raise_error KeyError
|
33
|
+
expect { subject.trigger(:invalid) }.to raise_error KeyError
|
34
|
+
expect { subject.off(:invalid) }.to raise_error KeyError
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it_behaves_like 'an incoming protocol message bus'
|
39
|
+
it_behaves_like 'an outgoing protocol message bus'
|
40
|
+
end
|
@@ -4,7 +4,15 @@ require 'support/model_helper'
|
|
4
4
|
describe Ably::Realtime::Models::ErrorInfo do
|
5
5
|
subject { Ably::Realtime::Models::ErrorInfo }
|
6
6
|
|
7
|
-
it_behaves_like 'a realtime model', with_simple_attributes: %w(code
|
7
|
+
it_behaves_like 'a realtime model', with_simple_attributes: %w(code status_code message) do
|
8
8
|
let(:model_args) { [] }
|
9
9
|
end
|
10
|
+
|
11
|
+
context '#status' do
|
12
|
+
subject { Ably::Realtime::Models::ErrorInfo.new('statusCode' => 401) }
|
13
|
+
it 'is an alias for #status_code' do
|
14
|
+
expect(subject.status).to eql(subject.status_code)
|
15
|
+
expect(subject.status).to eql(401)
|
16
|
+
end
|
17
|
+
end
|
10
18
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ably::Realtime::Client::IncomingMessageDispatcher do
|
4
|
+
let(:msgbus) do
|
5
|
+
Ably::Util::PubSub.new
|
6
|
+
end
|
7
|
+
let(:client) do
|
8
|
+
double(:client,
|
9
|
+
connection: double('connection', __incoming_protocol_msgbus__: msgbus),
|
10
|
+
channels: {}
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { Ably::Realtime::Client::IncomingMessageDispatcher.new(client) }
|
15
|
+
|
16
|
+
context '#initialize' do
|
17
|
+
it 'should subscribe to protocol messages from the connection' do
|
18
|
+
expect(msgbus).to receive(:subscribe).with(:message).and_call_original
|
19
|
+
subject
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context '#dispatch_protocol_message' do
|
24
|
+
before { subject }
|
25
|
+
|
26
|
+
it 'should raise an exception if a message is sent that is not a ProtocolMessage' do
|
27
|
+
expect { msgbus.publish :message, nil }.to raise_error ArgumentError
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should warn if a message is received for a non-existent channel' do
|
31
|
+
allow(subject).to receive_message_chain(:logger, :debug)
|
32
|
+
expect(subject).to receive_message_chain(:logger, :warn)
|
33
|
+
msgbus.publish :message, Ably::Realtime::Models::ProtocolMessage.new(:action => :attached, channel: 'unknown')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -38,7 +38,7 @@ describe Ably::Realtime::Models::Message do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'autofills a missing timestamp for all messages' do
|
41
|
-
expect(json_object["timestamp"].to_i).to be_within(
|
41
|
+
expect(json_object["timestamp"].to_i).to be_within(50).of(as_since_epoch(Time.now))
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -55,7 +55,7 @@ describe Ably::Realtime::Models::Message do
|
|
55
55
|
let(:ably_time) { Time.now + 5 }
|
56
56
|
let(:sender_time_0) { Time.now - 5 }
|
57
57
|
let(:sender_time_1) { Time.now - 3 }
|
58
|
-
let(:message_serial) { SecureRandom.
|
58
|
+
let(:message_serial) { SecureRandom.random_number(1_000_000) }
|
59
59
|
let(:connection_id) { SecureRandom.hex }
|
60
60
|
|
61
61
|
let(:message_0_payload) do
|
@@ -6,7 +6,7 @@ describe Ably::Realtime::Models::ProtocolMessage do
|
|
6
6
|
subject { Ably::Realtime::Models::ProtocolMessage }
|
7
7
|
|
8
8
|
it_behaves_like 'a realtime model',
|
9
|
-
with_simple_attributes: %w(
|
9
|
+
with_simple_attributes: %w(channel channel_serial connection_id connection_serial) do
|
10
10
|
|
11
11
|
let(:model_args) { [] }
|
12
12
|
end
|
@@ -22,11 +22,23 @@ describe Ably::Realtime::Models::ProtocolMessage do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
context '#
|
25
|
+
context '#action' do
|
26
26
|
let(:protocol_message) { subject.new(action: 14) }
|
27
27
|
|
28
|
-
it 'returns
|
29
|
-
expect(protocol_message.
|
28
|
+
it 'returns an Enum that behaves like a symbol' do
|
29
|
+
expect(protocol_message.action).to eq(:presence)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'returns an Enum that behaves like a Numeric' do
|
33
|
+
expect(protocol_message.action).to eq(14)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'returns an Enum that behaves like a String' do
|
37
|
+
expect(protocol_message.action).to eq('Presence')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'returns an Enum that matchdes the ACTION constant' do
|
41
|
+
expect(protocol_message.action).to eql(Ably::Realtime::Models::ProtocolMessage::ACTION.Presence)
|
30
42
|
end
|
31
43
|
end
|
32
44
|
|
@@ -38,6 +50,55 @@ describe Ably::Realtime::Models::ProtocolMessage do
|
|
38
50
|
end
|
39
51
|
end
|
40
52
|
|
53
|
+
context '#message_serial' do
|
54
|
+
let(:protocol_message) { subject.new(msg_serial: "55") }
|
55
|
+
it 'converts :msg_serial to an Integer' do
|
56
|
+
expect(protocol_message.message_serial).to be_a(Integer)
|
57
|
+
expect(protocol_message.message_serial).to eql(55)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context '#count' do
|
62
|
+
context 'when missing' do
|
63
|
+
let(:protocol_message) { subject.new({}) }
|
64
|
+
it 'is 1' do
|
65
|
+
expect(protocol_message.count).to eql(1)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when non numeric' do
|
70
|
+
let(:protocol_message) { subject.new(count: 'A') }
|
71
|
+
it 'is 1' do
|
72
|
+
expect(protocol_message.count).to eql(1)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'when greater than 1' do
|
77
|
+
let(:protocol_message) { subject.new(count: '666') }
|
78
|
+
it 'is the value of count' do
|
79
|
+
expect(protocol_message.count).to eql(666)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context '#has_message_serial?' do
|
85
|
+
context 'without msg_serial' do
|
86
|
+
let(:protocol_message) { subject.new({}) }
|
87
|
+
|
88
|
+
it 'returns false' do
|
89
|
+
expect(protocol_message.has_message_serial?).to eql(false)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'with msg_serial' do
|
94
|
+
let(:protocol_message) { subject.new(msg_serial: "55") }
|
95
|
+
|
96
|
+
it 'returns true' do
|
97
|
+
expect(protocol_message.has_message_serial?).to eql(true)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
41
102
|
context '#error' do
|
42
103
|
context 'with no error attribute' do
|
43
104
|
let(:protocol_message) { subject.new(action: 1) }
|
@@ -68,9 +129,9 @@ describe Ably::Realtime::Models::ProtocolMessage do
|
|
68
129
|
|
69
130
|
context '#to_json' do
|
70
131
|
let(:json_object) { JSON.parse(model.to_json) }
|
71
|
-
let(:message) { { 'name' => 'event', 'clientId' => 'joe' } }
|
72
|
-
let(:attached_action) { Ably::Realtime::Models::ProtocolMessage.
|
73
|
-
let(:message_action) { Ably::Realtime::Models::ProtocolMessage.
|
132
|
+
let(:message) { { 'name' => 'event', 'clientId' => 'joe', 'timestamp' => as_since_epoch(Time.now) } }
|
133
|
+
let(:attached_action) { Ably::Realtime::Models::ProtocolMessage::ACTION.Attached }
|
134
|
+
let(:message_action) { Ably::Realtime::Models::ProtocolMessage::ACTION.Message }
|
74
135
|
|
75
136
|
context 'with valid data' do
|
76
137
|
let(:model) { subject.new({ :action => attached_action, :channelSerial => 'unique', messages: [message] }) }
|
@@ -88,7 +149,7 @@ describe Ably::Realtime::Models::ProtocolMessage do
|
|
88
149
|
let(:model) { subject.new({ clientId: 'joe' }) }
|
89
150
|
|
90
151
|
it 'it raises an exception' do
|
91
|
-
expect { model.to_json }.to raise_error
|
152
|
+
expect { model.to_json }.to raise_error KeyError, /Action '' is not supported by ProtocolMessage/
|
92
153
|
end
|
93
154
|
end
|
94
155
|
|
@@ -96,7 +157,15 @@ describe Ably::Realtime::Models::ProtocolMessage do
|
|
96
157
|
let(:model) { subject.new({ :action => message_action }) }
|
97
158
|
|
98
159
|
it 'it raises an exception' do
|
99
|
-
expect { model.to_json }.to raise_error
|
160
|
+
expect { model.to_json }.to raise_error TypeError, /msg_serial is missing/
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
context 'is aliased by #to_s' do
|
165
|
+
let(:model) { subject.new({ :action => attached_action, :channelSerial => 'unique', messages: [message], :timestamp => as_since_epoch(Time.now) }) }
|
166
|
+
|
167
|
+
specify do
|
168
|
+
expect(json_object).to eql(JSON.parse("#{model}"))
|
100
169
|
end
|
101
170
|
end
|
102
171
|
end
|
File without changes
|
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.1.
|
4
|
+
version: 0.1.5
|
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-10-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
@@ -67,6 +67,20 @@ dependencies:
|
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: msgpack
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
70
84
|
- !ruby/object:Gem::Dependency
|
71
85
|
name: bundler
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,14 +184,20 @@ files:
|
|
170
184
|
- lib/ably/exceptions.rb
|
171
185
|
- lib/ably/models/idiomatic_ruby_wrapper.rb
|
172
186
|
- lib/ably/modules/conversions.rb
|
187
|
+
- lib/ably/modules/enum.rb
|
188
|
+
- lib/ably/modules/event_emitter.rb
|
189
|
+
- lib/ably/modules/event_machine_helpers.rb
|
173
190
|
- lib/ably/modules/http_helpers.rb
|
191
|
+
- lib/ably/modules/state.rb
|
174
192
|
- lib/ably/realtime.rb
|
175
|
-
- lib/ably/realtime/callbacks.rb
|
176
193
|
- lib/ably/realtime/channel.rb
|
177
194
|
- lib/ably/realtime/client.rb
|
195
|
+
- lib/ably/realtime/client/incoming_message_dispatcher.rb
|
196
|
+
- lib/ably/realtime/client/outgoing_message_dispatcher.rb
|
178
197
|
- lib/ably/realtime/connection.rb
|
179
198
|
- lib/ably/realtime/models/error_info.rb
|
180
199
|
- lib/ably/realtime/models/message.rb
|
200
|
+
- lib/ably/realtime/models/nil_channel.rb
|
181
201
|
- lib/ably/realtime/models/protocol_message.rb
|
182
202
|
- lib/ably/realtime/models/shared.rb
|
183
203
|
- lib/ably/rest.rb
|
@@ -187,15 +207,18 @@ files:
|
|
187
207
|
- lib/ably/rest/middleware/exceptions.rb
|
188
208
|
- lib/ably/rest/middleware/external_exceptions.rb
|
189
209
|
- lib/ably/rest/middleware/parse_json.rb
|
210
|
+
- lib/ably/rest/middleware/parse_message_pack.rb
|
190
211
|
- lib/ably/rest/models/message.rb
|
191
212
|
- lib/ably/rest/models/paged_resource.rb
|
192
213
|
- lib/ably/rest/models/presence_message.rb
|
193
214
|
- lib/ably/rest/presence.rb
|
194
215
|
- lib/ably/token.rb
|
195
216
|
- lib/ably/util/crypto.rb
|
217
|
+
- lib/ably/util/pub_sub.rb
|
196
218
|
- lib/ably/version.rb
|
197
219
|
- spec/acceptance/crypto.rb
|
198
220
|
- spec/acceptance/realtime/channel_spec.rb
|
221
|
+
- spec/acceptance/realtime/message_spec.rb
|
199
222
|
- spec/acceptance/rest/auth_spec.rb
|
200
223
|
- spec/acceptance/rest/base_spec.rb
|
201
224
|
- spec/acceptance/rest/channel_spec.rb
|
@@ -203,21 +226,30 @@ files:
|
|
203
226
|
- spec/acceptance/rest/presence_spec.rb
|
204
227
|
- spec/acceptance/rest/stats_spec.rb
|
205
228
|
- spec/acceptance/rest/time_spec.rb
|
229
|
+
- spec/integration/modules/state_spec.rb
|
230
|
+
- spec/integration/rest/auth.rb
|
206
231
|
- spec/spec_helper.rb
|
207
232
|
- spec/support/api_helper.rb
|
208
233
|
- spec/support/event_machine_helper.rb
|
209
234
|
- spec/support/model_helper.rb
|
235
|
+
- spec/support/protocol_msgbus_helper.rb
|
210
236
|
- spec/support/test_app.rb
|
211
|
-
- spec/unit/auth.rb
|
212
|
-
- spec/unit/conversions.rb
|
213
237
|
- spec/unit/models/idiomatic_ruby_wrapper_spec.rb
|
238
|
+
- spec/unit/modules/conversions_spec.rb
|
239
|
+
- spec/unit/modules/enum_spec.rb
|
240
|
+
- spec/unit/modules/event_emitter_spec.rb
|
241
|
+
- spec/unit/modules/pub_sub_spec.rb
|
242
|
+
- spec/unit/realtime/channel_spec.rb
|
243
|
+
- spec/unit/realtime/client_spec.rb
|
244
|
+
- spec/unit/realtime/connection_spec.rb
|
214
245
|
- spec/unit/realtime/error_info_spec.rb
|
246
|
+
- spec/unit/realtime/incoming_message_dispatcher_spec.rb
|
215
247
|
- spec/unit/realtime/message_spec.rb
|
216
248
|
- spec/unit/realtime/protocol_message_spec.rb
|
217
249
|
- spec/unit/realtime/realtime_spec.rb
|
250
|
+
- spec/unit/rest/client_spec.rb
|
218
251
|
- spec/unit/rest/message_spec.rb
|
219
252
|
- spec/unit/rest/paged_resource_spec.rb
|
220
|
-
- spec/unit/rest/rest_spec.rb
|
221
253
|
- spec/unit/token_spec.rb
|
222
254
|
homepage: http://github.com/ably/ably-ruby
|
223
255
|
licenses:
|
@@ -246,6 +278,7 @@ summary: A Ruby client library for ably.io, the real-time messaging service
|
|
246
278
|
test_files:
|
247
279
|
- spec/acceptance/crypto.rb
|
248
280
|
- spec/acceptance/realtime/channel_spec.rb
|
281
|
+
- spec/acceptance/realtime/message_spec.rb
|
249
282
|
- spec/acceptance/rest/auth_spec.rb
|
250
283
|
- spec/acceptance/rest/base_spec.rb
|
251
284
|
- spec/acceptance/rest/channel_spec.rb
|
@@ -253,20 +286,29 @@ test_files:
|
|
253
286
|
- spec/acceptance/rest/presence_spec.rb
|
254
287
|
- spec/acceptance/rest/stats_spec.rb
|
255
288
|
- spec/acceptance/rest/time_spec.rb
|
289
|
+
- spec/integration/modules/state_spec.rb
|
290
|
+
- spec/integration/rest/auth.rb
|
256
291
|
- spec/spec_helper.rb
|
257
292
|
- spec/support/api_helper.rb
|
258
293
|
- spec/support/event_machine_helper.rb
|
259
294
|
- spec/support/model_helper.rb
|
295
|
+
- spec/support/protocol_msgbus_helper.rb
|
260
296
|
- spec/support/test_app.rb
|
261
|
-
- spec/unit/auth.rb
|
262
|
-
- spec/unit/conversions.rb
|
263
297
|
- spec/unit/models/idiomatic_ruby_wrapper_spec.rb
|
298
|
+
- spec/unit/modules/conversions_spec.rb
|
299
|
+
- spec/unit/modules/enum_spec.rb
|
300
|
+
- spec/unit/modules/event_emitter_spec.rb
|
301
|
+
- spec/unit/modules/pub_sub_spec.rb
|
302
|
+
- spec/unit/realtime/channel_spec.rb
|
303
|
+
- spec/unit/realtime/client_spec.rb
|
304
|
+
- spec/unit/realtime/connection_spec.rb
|
264
305
|
- spec/unit/realtime/error_info_spec.rb
|
306
|
+
- spec/unit/realtime/incoming_message_dispatcher_spec.rb
|
265
307
|
- spec/unit/realtime/message_spec.rb
|
266
308
|
- spec/unit/realtime/protocol_message_spec.rb
|
267
309
|
- spec/unit/realtime/realtime_spec.rb
|
310
|
+
- spec/unit/rest/client_spec.rb
|
268
311
|
- spec/unit/rest/message_spec.rb
|
269
312
|
- spec/unit/rest/paged_resource_spec.rb
|
270
|
-
- spec/unit/rest/rest_spec.rb
|
271
313
|
- spec/unit/token_spec.rb
|
272
314
|
has_rdoc:
|