ably 0.6.2 → 0.7.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/.rspec +1 -0
- data/.ruby-version.old +1 -0
- data/.travis.yml +0 -2
- data/Rakefile +22 -4
- data/SPEC.md +1676 -0
- data/ably.gemspec +1 -1
- data/lib/ably.rb +0 -8
- data/lib/ably/auth.rb +54 -46
- data/lib/ably/exceptions.rb +19 -5
- data/lib/ably/logger.rb +1 -1
- data/lib/ably/models/error_info.rb +1 -1
- data/lib/ably/models/idiomatic_ruby_wrapper.rb +11 -9
- data/lib/ably/models/message.rb +15 -12
- data/lib/ably/models/message_encoders/base.rb +6 -5
- data/lib/ably/models/message_encoders/base64.rb +1 -0
- data/lib/ably/models/message_encoders/cipher.rb +6 -3
- data/lib/ably/models/message_encoders/json.rb +1 -0
- data/lib/ably/models/message_encoders/utf8.rb +2 -9
- data/lib/ably/models/nil_logger.rb +20 -0
- data/lib/ably/models/paginated_resource.rb +5 -2
- data/lib/ably/models/presence_message.rb +21 -12
- data/lib/ably/models/protocol_message.rb +22 -6
- data/lib/ably/modules/ably.rb +11 -0
- data/lib/ably/modules/async_wrapper.rb +2 -0
- data/lib/ably/modules/conversions.rb +23 -3
- data/lib/ably/modules/encodeable.rb +2 -1
- data/lib/ably/modules/enum.rb +2 -0
- data/lib/ably/modules/event_emitter.rb +7 -1
- data/lib/ably/modules/event_machine_helpers.rb +2 -0
- data/lib/ably/modules/http_helpers.rb +2 -0
- data/lib/ably/modules/model_common.rb +12 -2
- data/lib/ably/modules/state_emitter.rb +76 -0
- data/lib/ably/modules/state_machine.rb +53 -0
- data/lib/ably/modules/statesman_monkey_patch.rb +33 -0
- data/lib/ably/modules/uses_state_machine.rb +74 -0
- data/lib/ably/realtime.rb +4 -2
- data/lib/ably/realtime/channel.rb +51 -58
- data/lib/ably/realtime/channel/channel_manager.rb +91 -0
- data/lib/ably/realtime/channel/channel_state_machine.rb +68 -0
- data/lib/ably/realtime/client.rb +70 -26
- data/lib/ably/realtime/client/incoming_message_dispatcher.rb +31 -13
- data/lib/ably/realtime/client/outgoing_message_dispatcher.rb +1 -1
- data/lib/ably/realtime/connection.rb +135 -92
- data/lib/ably/realtime/connection/connection_manager.rb +216 -33
- data/lib/ably/realtime/connection/connection_state_machine.rb +30 -73
- data/lib/ably/realtime/models/nil_channel.rb +10 -1
- data/lib/ably/realtime/presence.rb +336 -92
- data/lib/ably/rest.rb +2 -2
- data/lib/ably/rest/channel.rb +13 -4
- data/lib/ably/rest/client.rb +138 -38
- data/lib/ably/rest/middleware/logger.rb +24 -3
- data/lib/ably/rest/presence.rb +12 -7
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/realtime/channel_history_spec.rb +101 -85
- data/spec/acceptance/realtime/channel_spec.rb +461 -120
- data/spec/acceptance/realtime/client_spec.rb +119 -0
- data/spec/acceptance/realtime/connection_failures_spec.rb +499 -0
- data/spec/acceptance/realtime/connection_spec.rb +571 -97
- data/spec/acceptance/realtime/message_spec.rb +347 -333
- data/spec/acceptance/realtime/presence_history_spec.rb +35 -40
- data/spec/acceptance/realtime/presence_spec.rb +769 -239
- data/spec/acceptance/realtime/stats_spec.rb +14 -22
- data/spec/acceptance/realtime/time_spec.rb +16 -20
- data/spec/acceptance/rest/auth_spec.rb +425 -364
- data/spec/acceptance/rest/base_spec.rb +108 -176
- data/spec/acceptance/rest/channel_spec.rb +89 -89
- data/spec/acceptance/rest/channels_spec.rb +30 -32
- data/spec/acceptance/rest/client_spec.rb +273 -0
- data/spec/acceptance/rest/encoders_spec.rb +185 -0
- data/spec/acceptance/rest/message_spec.rb +186 -163
- data/spec/acceptance/rest/presence_spec.rb +150 -111
- data/spec/acceptance/rest/stats_spec.rb +45 -40
- data/spec/acceptance/rest/time_spec.rb +8 -10
- data/spec/rspec_config.rb +10 -1
- data/spec/shared/client_initializer_behaviour.rb +212 -0
- data/spec/{support/model_helper.rb → shared/model_behaviour.rb} +6 -6
- data/spec/{support/protocol_msgbus_helper.rb → shared/protocol_msgbus_behaviour.rb} +1 -1
- data/spec/spec_helper.rb +9 -0
- data/spec/support/api_helper.rb +11 -0
- data/spec/support/event_machine_helper.rb +101 -3
- data/spec/support/markdown_spec_formatter.rb +90 -0
- data/spec/support/private_api_formatter.rb +36 -0
- data/spec/support/protocol_helper.rb +32 -0
- data/spec/support/random_helper.rb +15 -0
- data/spec/support/test_app.rb +4 -0
- data/spec/unit/auth_spec.rb +68 -0
- data/spec/unit/logger_spec.rb +77 -66
- data/spec/unit/models/error_info_spec.rb +1 -1
- data/spec/unit/models/idiomatic_ruby_wrapper_spec.rb +2 -3
- data/spec/unit/models/message_encoders/base64_spec.rb +2 -2
- data/spec/unit/models/message_encoders/cipher_spec.rb +2 -2
- data/spec/unit/models/message_encoders/utf8_spec.rb +2 -46
- data/spec/unit/models/message_spec.rb +160 -15
- data/spec/unit/models/paginated_resource_spec.rb +29 -27
- data/spec/unit/models/presence_message_spec.rb +163 -20
- data/spec/unit/models/protocol_message_spec.rb +43 -8
- data/spec/unit/modules/async_wrapper_spec.rb +2 -3
- data/spec/unit/modules/conversions_spec.rb +1 -1
- data/spec/unit/modules/enum_spec.rb +2 -3
- data/spec/unit/modules/event_emitter_spec.rb +62 -5
- data/spec/unit/modules/state_emitter_spec.rb +283 -0
- data/spec/unit/realtime/channel_spec.rb +107 -2
- data/spec/unit/realtime/channels_spec.rb +1 -0
- data/spec/unit/realtime/client_spec.rb +8 -48
- data/spec/unit/realtime/connection_spec.rb +3 -3
- data/spec/unit/realtime/incoming_message_dispatcher_spec.rb +2 -2
- data/spec/unit/realtime/presence_spec.rb +13 -4
- data/spec/unit/realtime/realtime_spec.rb +0 -11
- data/spec/unit/realtime/websocket_transport_spec.rb +2 -2
- data/spec/unit/rest/channel_spec.rb +109 -0
- data/spec/unit/rest/channels_spec.rb +4 -3
- data/spec/unit/rest/client_spec.rb +30 -125
- data/spec/unit/rest/rest_spec.rb +10 -0
- data/spec/unit/util/crypto_spec.rb +10 -5
- data/spec/unit/util/pub_sub_spec.rb +5 -5
- metadata +44 -12
- data/spec/integration/modules/state_emitter_spec.rb +0 -80
- data/spec/integration/rest/auth.rb +0 -9
@@ -1,55 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
|
-
require 'securerandom'
|
3
|
-
|
4
|
-
describe 'Ably::Rest::Client Stats' do
|
5
|
-
[:json, :msgpack].each do |protocol|
|
6
|
-
context "over #{protocol}" do
|
7
|
-
describe 'fetching application stats' do
|
8
|
-
before(:context) do
|
9
|
-
reload_test_app
|
10
|
-
end
|
11
3
|
|
12
|
-
|
13
|
-
|
4
|
+
describe Ably::Rest::Client, '#stats' do
|
5
|
+
before(:context) do
|
6
|
+
WebMock.disable! # ensure previous test's WebMock does not have side effects
|
7
|
+
reload_test_app
|
8
|
+
end
|
14
9
|
|
15
|
-
|
16
|
-
|
10
|
+
before(:context) do
|
11
|
+
client = Ably::Rest::Client.new(api_key: api_key, environment: environment)
|
17
12
|
|
18
|
-
|
19
|
-
|
20
|
-
service_time = @context_client.time
|
21
|
-
@interval_start = (service_time.to_i / 60 + 1) * 60
|
22
|
-
sleep_time = @interval_start - Time.now.to_i
|
13
|
+
number_of_channels = 3
|
14
|
+
number_of_messages_per_channel = 5
|
23
15
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
16
|
+
# Wait until the start of the next minute according to the service
|
17
|
+
# time because stats are created in 1 minute intervals
|
18
|
+
service_time = client.time
|
19
|
+
stats_setup_at = (service_time.to_i / 60 + 1) * 60
|
20
|
+
sleep_time = stats_setup_at - Time.now.to_i
|
29
21
|
|
30
|
-
|
31
|
-
|
22
|
+
if sleep_time > 30
|
23
|
+
stats_setup_at -= 60 # there is enough time to generate the stats in this minute interval
|
24
|
+
elsif sleep_time > 0
|
25
|
+
sleep sleep_time
|
26
|
+
end
|
32
27
|
|
33
|
-
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
28
|
+
number_of_channels.times do |i|
|
29
|
+
channel = client.channel("stats-#{i}")
|
37
30
|
|
38
|
-
|
39
|
-
|
31
|
+
number_of_messages_per_channel.times do |j|
|
32
|
+
channel.publish("event-#{j}", "data-#{j}") || raise("Unable to publish message")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# wait for stats to be persisted
|
37
|
+
sleep 10
|
38
|
+
|
39
|
+
@stats_setup_at = stats_setup_at
|
40
|
+
@messages_published_count = number_of_channels * number_of_messages_per_channel
|
41
|
+
end
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
vary_by_protocol do
|
44
|
+
describe 'fetching application stats' do
|
45
|
+
[:minute, :hour, :day, :month].each do |interval|
|
46
|
+
context "by #{interval}" do
|
47
|
+
let(:client) { Ably::Rest::Client.new(api_key: api_key, environment: environment, protocol: protocol) }
|
45
48
|
|
46
|
-
|
49
|
+
it 'should return all the stats for the application' do
|
50
|
+
stats = client.stats(start: @stats_setup_at * 1000, by: interval.to_s, direction: 'forwards')
|
47
51
|
|
48
|
-
|
52
|
+
expect(stats.size).to eql(1)
|
53
|
+
stat = stats.first
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
|
55
|
+
expect(@messages_published_count).to be_a(Numeric)
|
56
|
+
expect(stat[:inbound][:all][:messages][:count]).to eql(@messages_published_count)
|
57
|
+
expect(stat[:inbound][:rest][:messages][:count]).to eql(@messages_published_count)
|
53
58
|
end
|
54
59
|
end
|
55
60
|
end
|
@@ -1,16 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
3
|
+
describe Ably::Rest::Client, '#time' do
|
4
|
+
vary_by_protocol do
|
5
|
+
let(:client) do
|
6
|
+
Ably::Rest::Client.new(api_key: api_key, environment: environment, protocol: protocol)
|
7
|
+
end
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
9
|
+
describe 'fetching the service time' do
|
10
|
+
it 'should return the service time as a Time object' do
|
11
|
+
expect(client.time).to be_within(2).of(Time.now)
|
14
12
|
end
|
15
13
|
end
|
16
14
|
end
|
data/spec/rspec_config.rb
CHANGED
@@ -27,7 +27,7 @@ RSpec.configure do |config|
|
|
27
27
|
WebMock.disable!
|
28
28
|
end
|
29
29
|
|
30
|
-
config.before(:example, :webmock
|
30
|
+
config.before(:example, :webmock) do
|
31
31
|
allow(TestApp).to receive(:instance).and_return(instance_double('TestApp',
|
32
32
|
app_id: 'app_id',
|
33
33
|
key_id: 'app_id.key_id',
|
@@ -36,4 +36,13 @@ RSpec.configure do |config|
|
|
36
36
|
))
|
37
37
|
WebMock.enable!
|
38
38
|
end
|
39
|
+
|
40
|
+
if defined?(EventMachine)
|
41
|
+
config.before(:example) do
|
42
|
+
# Ensure EventMachine shutdown hooks are deregistered for every test
|
43
|
+
EventMachine.instance_variable_set '@tails', []
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
config.add_formatter Ably::RSpec::PrivateApiFormatter
|
39
48
|
end
|
@@ -0,0 +1,212 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
shared_examples 'a client initializer' do
|
4
|
+
def subdomain
|
5
|
+
if rest?
|
6
|
+
'rest'
|
7
|
+
else
|
8
|
+
'realtime'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def protocol
|
13
|
+
if rest?
|
14
|
+
'http'
|
15
|
+
else
|
16
|
+
'ws'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def rest?
|
21
|
+
subject.kind_of?(Ably::Rest::Client)
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'with invalid arguments' do
|
25
|
+
context 'empty hash' do
|
26
|
+
let(:client_options) { Hash.new }
|
27
|
+
|
28
|
+
it 'raises an exception' do
|
29
|
+
expect { subject }.to raise_error(ArgumentError, /api_key is missing/)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'nil' do
|
34
|
+
let(:client_options) { nil }
|
35
|
+
|
36
|
+
it 'raises an exception' do
|
37
|
+
expect { subject }.to raise_error(ArgumentError, /Options Hash is expected/)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'api_key: "invalid"' do
|
42
|
+
let(:client_options) { { api_key: 'invalid' } }
|
43
|
+
|
44
|
+
it 'raises an exception' do
|
45
|
+
expect { subject }.to raise_error(ArgumentError, /api_key is invalid/)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'api_key: "invalid:asdad"' do
|
50
|
+
let(:client_options) { { api_key: 'invalid:asdad' } }
|
51
|
+
|
52
|
+
it 'raises an exception' do
|
53
|
+
expect { subject }.to raise_error(ArgumentError, /api_key is invalid/)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'api_key and key_id' do
|
58
|
+
let(:client_options) { { api_key: 'appid.keyuid:keysecret', key_id: 'invalid' } }
|
59
|
+
|
60
|
+
it 'raises an exception' do
|
61
|
+
expect { subject }.to raise_error(ArgumentError, /api_key and key_id or key_secret are mutually exclusive/)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'api_key and key_secret' do
|
66
|
+
let(:client_options) { { api_key: 'appid.keyuid:keysecret', key_secret: 'invalid' } }
|
67
|
+
|
68
|
+
it 'raises an exception' do
|
69
|
+
expect { subject }.to raise_error(ArgumentError, /api_key and key_id or key_secret are mutually exclusive/)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'client_id as only option' do
|
74
|
+
let(:client_options) { { client_id: 'valid' } }
|
75
|
+
|
76
|
+
it 'requires a valid key' do
|
77
|
+
expect { subject }.to raise_error(ArgumentError, /client_id cannot be provided without a complete API key/)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'with valid arguments' do
|
83
|
+
let(:default_options) { { api_key: 'appid.keyuid:keysecret' } }
|
84
|
+
let(:client_options) { default_options }
|
85
|
+
|
86
|
+
context 'api_key only' do
|
87
|
+
it 'connects to the Ably service' do
|
88
|
+
expect { subject }.to_not raise_error
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'key_id and key_secret' do
|
93
|
+
let(:client_options) { { key_id: 'id', key_secret: 'secret' } }
|
94
|
+
|
95
|
+
it 'constructs an api_key' do
|
96
|
+
expect(subject.auth.api_key).to eql('id:secret')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'with a string key instead of options hash' do
|
101
|
+
let(:client_options) { 'app.key:secret' }
|
102
|
+
|
103
|
+
it 'sets the api_key' do
|
104
|
+
expect(subject.auth.api_key).to eql(client_options)
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'sets the key_id' do
|
108
|
+
expect(subject.auth.key_id).to eql('app.key')
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'sets the key_secret' do
|
112
|
+
expect(subject.auth.key_secret).to eql('secret')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'with token' do
|
117
|
+
let(:client_options) { { token_id: 'token' } }
|
118
|
+
|
119
|
+
it 'sets the token_id' do
|
120
|
+
expect(subject.auth.token_id).to eql('token')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'endpoint' do
|
125
|
+
it 'defaults to production' do
|
126
|
+
expect(subject.endpoint.to_s).to eql("#{protocol}s://#{subdomain}.ably.io")
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'with environment option' do
|
130
|
+
let(:client_options) { default_options.merge(environment: 'sandbox') }
|
131
|
+
|
132
|
+
it 'uses an alternate endpoint' do
|
133
|
+
expect(subject.endpoint.to_s).to eql("#{protocol}s://sandbox-#{subdomain}.ably.io")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'tls' do
|
139
|
+
context 'set to false' do
|
140
|
+
let(:client_options) { default_options.merge(tls: false) }
|
141
|
+
|
142
|
+
it 'uses plain text' do
|
143
|
+
expect(subject.use_tls?).to eql(false)
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'uses HTTP' do
|
147
|
+
expect(subject.endpoint.to_s).to eql("#{protocol}://#{subdomain}.ably.io")
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'defaults to TLS' do
|
152
|
+
expect(subject.use_tls?).to eql(true)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
context 'logger' do
|
157
|
+
context 'default' do
|
158
|
+
it 'uses Ruby Logger' do
|
159
|
+
expect(subject.logger.logger).to be_a(::Logger)
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'specifies Logger::ERROR log level' do
|
163
|
+
expect(subject.logger.log_level).to eql(::Logger::ERROR)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'with log_level :none' do
|
168
|
+
let(:client_options) { default_options.merge(log_level: :none) }
|
169
|
+
|
170
|
+
it 'silences all logging with a NilLogger' do
|
171
|
+
expect(subject.logger.logger.class).to eql(Ably::Models::NilLogger)
|
172
|
+
expect(subject.logger.log_level).to eql(:none)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
context 'with custom logger and log_level' do
|
177
|
+
let(:custom_logger) do
|
178
|
+
Class.new do
|
179
|
+
extend Forwardable
|
180
|
+
def initialize
|
181
|
+
@logger = Logger.new(STDOUT)
|
182
|
+
end
|
183
|
+
def_delegators :@logger, :fatal, :error, :warn, :info, :debug, :level, :level=
|
184
|
+
end
|
185
|
+
end
|
186
|
+
let(:client_options) { default_options.merge(logger: custom_logger.new, log_level: Logger::DEBUG) }
|
187
|
+
|
188
|
+
it 'uses the custom logger' do
|
189
|
+
expect(subject.logger.logger.class).to eql(custom_logger)
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'sets the custom log level' do
|
193
|
+
expect(subject.logger.log_level).to eql(Logger::DEBUG)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
context 'delegators' do
|
200
|
+
let(:client_options) { 'app.key:secret' }
|
201
|
+
|
202
|
+
it 'delegates :client_id to .auth' do
|
203
|
+
expect(subject.auth).to receive(:client_id).and_return('john')
|
204
|
+
expect(subject.client_id).to eql('john')
|
205
|
+
end
|
206
|
+
|
207
|
+
it 'delegates :auth_options to .auth' do
|
208
|
+
expect(subject.auth).to receive(:auth_options).and_return({ option: 1 })
|
209
|
+
expect(subject.auth_options).to eql({ option: 1 })
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
# encoding: utf-8
|
2
2
|
|
3
3
|
shared_examples 'a model' do |shared_options = {}|
|
4
4
|
let(:base_model_options) { shared_options.fetch(:base_model_options, {}) }
|
@@ -6,7 +6,7 @@ shared_examples 'a model' do |shared_options = {}|
|
|
6
6
|
let(:model) { subject.new(*args) }
|
7
7
|
|
8
8
|
context 'attributes' do
|
9
|
-
let(:unique_value) {
|
9
|
+
let(:unique_value) { random_str }
|
10
10
|
|
11
11
|
Array(shared_options[:with_simple_attributes]).each do |attribute|
|
12
12
|
context "##{attribute}" do
|
@@ -18,7 +18,7 @@ shared_examples 'a model' do |shared_options = {}|
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
context '#hash' do
|
21
|
+
context '#hash', :api_private do
|
22
22
|
let(:model_options) { { action: 5 } }
|
23
23
|
|
24
24
|
it 'provides access to #hash' do
|
@@ -26,7 +26,7 @@ shared_examples 'a model' do |shared_options = {}|
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
context '#[]' do
|
29
|
+
context '#[]', :api_private do
|
30
30
|
let(:model_options) { { unusual: 'attribute' } }
|
31
31
|
|
32
32
|
it 'provides accessor method to #hash' do
|
@@ -52,7 +52,7 @@ shared_examples 'a model' do |shared_options = {}|
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
context '#to_msgpack' do
|
55
|
+
context '#to_msgpack', :api_private do
|
56
56
|
let(:model_options) { { name: 'test', action: 0, channel_snake_case: 'unique' } }
|
57
57
|
let(:serialized) { model.to_msgpack }
|
58
58
|
|
@@ -61,7 +61,7 @@ shared_examples 'a model' do |shared_options = {}|
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
context '#to_json' do
|
64
|
+
context '#to_json', :api_private do
|
65
65
|
let(:model_options) { { name: 'test', action: 0, channel_snake_case: 'unique' } }
|
66
66
|
let(:serialized) { model.to_json }
|
67
67
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,17 @@
|
|
1
|
+
# Output the message to the console
|
2
|
+
# Useful for debugging as clearly visible, and name is not used anywhere else in library as opposed to debug or puts
|
3
|
+
def console(message)
|
4
|
+
puts "\033[31m[#{Time.now.strftime('%H:%M:%S.%L')}]\033[0m \033[33m#{message}\033[0m"
|
5
|
+
end
|
6
|
+
|
1
7
|
require 'webmock/rspec'
|
2
8
|
|
3
9
|
require 'ably'
|
4
10
|
|
5
11
|
require 'support/api_helper'
|
6
12
|
require 'support/event_machine_helper'
|
13
|
+
require 'support/private_api_formatter'
|
14
|
+
require 'support/protocol_helper'
|
15
|
+
require 'support/random_helper'
|
7
16
|
|
8
17
|
require 'rspec_config'
|
data/spec/support/api_helper.rb
CHANGED
@@ -46,3 +46,14 @@ RSpec.configure do |config|
|
|
46
46
|
TestApp.instance.delete if TestApp.instance_variable_get('@singleton__instance__')
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
module ApiPreloader
|
51
|
+
def self.included(mod)
|
52
|
+
WebMock.disable!
|
53
|
+
TestApp.instance.api_key
|
54
|
+
end
|
55
|
+
|
56
|
+
RSpec.configure do |config|
|
57
|
+
config.include self, :file_path => %r(spec/acceptance)
|
58
|
+
end
|
59
|
+
end
|