ably-rest 0.7.5 → 0.8.1

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.
Files changed (76) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +2 -0
  3. data/README.md +41 -15
  4. data/SPEC.md +654 -518
  5. data/lib/submodules/ably-ruby/.gitignore +1 -0
  6. data/lib/submodules/ably-ruby/.gitmodules +3 -0
  7. data/lib/submodules/ably-ruby/README.md +54 -26
  8. data/lib/submodules/ably-ruby/SPEC.md +468 -322
  9. data/lib/submodules/ably-ruby/ably.gemspec +4 -2
  10. data/lib/submodules/ably-ruby/lib/ably/auth.rb +185 -131
  11. data/lib/submodules/ably-ruby/lib/ably/models/message.rb +1 -1
  12. data/lib/submodules/ably-ruby/lib/ably/models/paginated_resource.rb +31 -44
  13. data/lib/submodules/ably-ruby/lib/ably/models/presence_message.rb +2 -2
  14. data/lib/submodules/ably-ruby/lib/ably/models/protocol_message.rb +1 -2
  15. data/lib/submodules/ably-ruby/lib/ably/models/stat.rb +67 -24
  16. data/lib/submodules/ably-ruby/lib/ably/models/stats_types.rb +131 -0
  17. data/lib/submodules/ably-ruby/lib/ably/models/token_details.rb +101 -0
  18. data/lib/submodules/ably-ruby/lib/ably/models/token_request.rb +108 -0
  19. data/lib/submodules/ably-ruby/lib/ably/modules/async_wrapper.rb +3 -2
  20. data/lib/submodules/ably-ruby/lib/ably/modules/http_helpers.rb +1 -1
  21. data/lib/submodules/ably-ruby/lib/ably/modules/message_emitter.rb +2 -2
  22. data/lib/submodules/ably-ruby/lib/ably/realtime.rb +3 -7
  23. data/lib/submodules/ably-ruby/lib/ably/realtime/channel.rb +32 -5
  24. data/lib/submodules/ably-ruby/lib/ably/realtime/channel/channel_manager.rb +1 -0
  25. data/lib/submodules/ably-ruby/lib/ably/realtime/client.rb +4 -8
  26. data/lib/submodules/ably-ruby/lib/ably/realtime/connection.rb +5 -3
  27. data/lib/submodules/ably-ruby/lib/ably/realtime/presence.rb +12 -1
  28. data/lib/submodules/ably-ruby/lib/ably/rest.rb +3 -7
  29. data/lib/submodules/ably-ruby/lib/ably/rest/channel.rb +13 -10
  30. data/lib/submodules/ably-ruby/lib/ably/rest/client.rb +19 -20
  31. data/lib/submodules/ably-ruby/lib/ably/rest/presence.rb +14 -12
  32. data/lib/submodules/ably-ruby/lib/ably/version.rb +1 -1
  33. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_history_spec.rb +74 -23
  34. data/lib/submodules/ably-ruby/spec/acceptance/realtime/channel_spec.rb +3 -3
  35. data/lib/submodules/ably-ruby/spec/acceptance/realtime/client_spec.rb +18 -18
  36. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_failures_spec.rb +5 -5
  37. data/lib/submodules/ably-ruby/spec/acceptance/realtime/connection_spec.rb +12 -12
  38. data/lib/submodules/ably-ruby/spec/acceptance/realtime/message_spec.rb +5 -5
  39. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_history_spec.rb +56 -13
  40. data/lib/submodules/ably-ruby/spec/acceptance/realtime/presence_spec.rb +8 -8
  41. data/lib/submodules/ably-ruby/spec/acceptance/realtime/stats_spec.rb +1 -1
  42. data/lib/submodules/ably-ruby/spec/acceptance/realtime/time_spec.rb +1 -1
  43. data/lib/submodules/ably-ruby/spec/acceptance/rest/auth_spec.rb +262 -158
  44. data/lib/submodules/ably-ruby/spec/acceptance/rest/base_spec.rb +11 -9
  45. data/lib/submodules/ably-ruby/spec/acceptance/rest/channel_spec.rb +28 -21
  46. data/lib/submodules/ably-ruby/spec/acceptance/rest/channels_spec.rb +1 -1
  47. data/lib/submodules/ably-ruby/spec/acceptance/rest/client_spec.rb +30 -27
  48. data/lib/submodules/ably-ruby/spec/acceptance/rest/encoders_spec.rb +1 -1
  49. data/lib/submodules/ably-ruby/spec/acceptance/rest/message_spec.rb +10 -10
  50. data/lib/submodules/ably-ruby/spec/acceptance/rest/presence_spec.rb +93 -56
  51. data/lib/submodules/ably-ruby/spec/acceptance/rest/stats_spec.rb +50 -45
  52. data/lib/submodules/ably-ruby/spec/acceptance/rest/time_spec.rb +1 -1
  53. data/lib/submodules/ably-ruby/spec/rspec_config.rb +3 -2
  54. data/lib/submodules/ably-ruby/spec/shared/client_initializer_behaviour.rb +36 -28
  55. data/lib/submodules/ably-ruby/spec/spec_helper.rb +3 -0
  56. data/lib/submodules/ably-ruby/spec/support/api_helper.rb +3 -3
  57. data/lib/submodules/ably-ruby/spec/support/markdown_spec_formatter.rb +1 -1
  58. data/lib/submodules/ably-ruby/spec/support/test_app.rb +20 -33
  59. data/lib/submodules/ably-ruby/spec/unit/auth_spec.rb +18 -1
  60. data/lib/submodules/ably-ruby/spec/unit/models/paginated_resource_spec.rb +81 -72
  61. data/lib/submodules/ably-ruby/spec/unit/models/stats_spec.rb +289 -0
  62. data/lib/submodules/ably-ruby/spec/unit/models/token_details_spec.rb +111 -0
  63. data/lib/submodules/ably-ruby/spec/unit/models/token_request_spec.rb +110 -0
  64. data/lib/submodules/ably-ruby/spec/unit/modules/async_wrapper_spec.rb +1 -1
  65. data/lib/submodules/ably-ruby/spec/unit/realtime/client_spec.rb +1 -1
  66. data/lib/submodules/ably-ruby/spec/unit/realtime/realtime_spec.rb +1 -1
  67. data/lib/submodules/ably-ruby/spec/unit/rest/channel_spec.rb +1 -1
  68. data/lib/submodules/ably-ruby/spec/unit/rest/client_spec.rb +8 -8
  69. data/lib/submodules/ably-ruby/spec/unit/rest/rest_spec.rb +1 -1
  70. data/lib/submodules/ably-ruby/spec/unit/util/crypto_spec.rb +1 -1
  71. metadata +9 -7
  72. data/lib/submodules/ably-ruby/lib/ably/models/token.rb +0 -74
  73. data/lib/submodules/ably-ruby/spec/resources/crypto-data-128.json +0 -56
  74. data/lib/submodules/ably-ruby/spec/resources/crypto-data-256.json +0 -56
  75. data/lib/submodules/ably-ruby/spec/unit/models/stat_spec.rb +0 -113
  76. data/lib/submodules/ably-ruby/spec/unit/models/token_spec.rb +0 -86
@@ -9,17 +9,17 @@ describe Ably::Rest::Client, '#stats' do
9
9
 
10
10
  STATS_FIXTURES = [
11
11
  {
12
- intervalId: Ably::Models::Stat.to_interval_id(LAST_INTERVAL - 120, :minute),
12
+ intervalId: Ably::Models::Stats.to_interval_id(LAST_INTERVAL - 120, :minute),
13
13
  inbound: { realtime: { messages: { count: 50, data: 5000 } } },
14
14
  outbound: { realtime: { messages: { count: 20, data: 2000 } } }
15
15
  },
16
16
  {
17
- intervalId: Ably::Models::Stat.to_interval_id(LAST_INTERVAL - 60, :minute),
17
+ intervalId: Ably::Models::Stats.to_interval_id(LAST_INTERVAL - 60, :minute),
18
18
  inbound: { realtime: { messages: { count: 60, data: 6000 } } },
19
19
  outbound: { realtime: { messages: { count: 10, data: 1000 } } }
20
20
  },
21
21
  {
22
- intervalId: Ably::Models::Stat.to_interval_id(LAST_INTERVAL, :minute),
22
+ intervalId: Ably::Models::Stats.to_interval_id(LAST_INTERVAL, :minute),
23
23
  inbound: { realtime: { messages: { count: 70, data: 7000 } } },
24
24
  outbound: { realtime: { messages: { count: 40, data: 4000 } } },
25
25
  persisted: { presence: { count: 20, data: 2000 } },
@@ -36,7 +36,7 @@ describe Ably::Rest::Client, '#stats' do
36
36
  end
37
37
 
38
38
  vary_by_protocol do
39
- let(:client) { Ably::Rest::Client.new(api_key: api_key, environment: environment, protocol: protocol) }
39
+ let(:client) { Ably::Rest::Client.new(key: api_key, environment: environment, protocol: protocol) }
40
40
 
41
41
  describe 'fetching application stats' do
42
42
  context 'by minute' do
@@ -44,56 +44,61 @@ describe Ably::Rest::Client, '#stats' do
44
44
  let(:last_inbound_realtime_count) { STATS_FIXTURES.last[:inbound][:realtime][:messages][:count] }
45
45
 
46
46
  context 'with :from set to last interval and :limit set to 1' do
47
- let(:subject) { client.stats(start: as_since_epoch(LAST_INTERVAL), by: :minute, limit: 1) }
48
- let(:stat) { subject.first}
47
+ let(:subject) { client.stats(start: as_since_epoch(LAST_INTERVAL), end: LAST_INTERVAL, unit: :minute, limit: 1) }
48
+ let(:stat) { subject.items.first }
49
49
 
50
50
  it 'retrieves only one stat' do
51
- expect(subject.count).to eql(1)
51
+ expect(subject.items.count).to eql(1)
52
+ end
53
+
54
+ it 'returns zero value for any missing metrics' do
55
+ expect(stat.channels.refused).to eql(0)
56
+ expect(stat.outbound.webhook.all.count).to eql(0)
52
57
  end
53
58
 
54
59
  it 'returns all aggregated message data' do
55
- expect(stat.all[:messages][:count]).to eql(70 + 40) # inbound + outbound
56
- expect(stat.all[:messages][:data]).to eql(7000 + 4000) # inbound + outbound
60
+ expect(stat.all.messages.count).to eql(70 + 40) # inbound + outbound
61
+ expect(stat.all.messages.data).to eql(7000 + 4000) # inbound + outbound
57
62
  end
58
63
 
59
64
  it 'returns inbound realtime all data' do
60
- expect(stat.inbound[:realtime][:all][:count]).to eql(70)
61
- expect(stat.inbound[:realtime][:all][:data]).to eql(7000)
65
+ expect(stat.inbound.realtime.all.count).to eql(70)
66
+ expect(stat.inbound.realtime.all.data).to eql(7000)
62
67
  end
63
68
 
64
69
  it 'returns inbound realtime message data' do
65
- expect(stat.inbound[:realtime][:messages][:count]).to eql(70)
66
- expect(stat.inbound[:realtime][:messages][:data]).to eql(7000)
70
+ expect(stat.inbound.realtime.messages.count).to eql(70)
71
+ expect(stat.inbound.realtime.messages.data).to eql(7000)
67
72
  end
68
73
 
69
74
  it 'returns outbound realtime all data' do
70
- expect(stat.outbound[:realtime][:all][:count]).to eql(40)
71
- expect(stat.outbound[:realtime][:all][:data]).to eql(4000)
75
+ expect(stat.outbound.realtime.all.count).to eql(40)
76
+ expect(stat.outbound.realtime.all.data).to eql(4000)
72
77
  end
73
78
 
74
79
  it 'returns persisted presence all data' do
75
- expect(stat.persisted[:all][:count]).to eql(20)
76
- expect(stat.persisted[:all][:data]).to eql(2000)
80
+ expect(stat.persisted.all.count).to eql(20)
81
+ expect(stat.persisted.all.data).to eql(2000)
77
82
  end
78
83
 
79
84
  it 'returns connections all data' do
80
- expect(stat.connections[:tls][:peak]).to eql(20)
81
- expect(stat.connections[:tls][:opened]).to eql(10)
85
+ expect(stat.connections.tls.peak).to eql(20)
86
+ expect(stat.connections.tls.opened).to eql(10)
82
87
  end
83
88
 
84
89
  it 'returns channels all data' do
85
- expect(stat.channels[:peak]).to eql(50)
86
- expect(stat.channels[:opened]).to eql(30)
90
+ expect(stat.channels.peak).to eql(50)
91
+ expect(stat.channels.opened).to eql(30)
87
92
  end
88
93
 
89
94
  it 'returns api_requests data' do
90
- expect(stat.api_requests[:succeeded]).to eql(50)
91
- expect(stat.api_requests[:failed]).to eql(10)
95
+ expect(stat.api_requests.succeeded).to eql(50)
96
+ expect(stat.api_requests.failed).to eql(10)
92
97
  end
93
98
 
94
99
  it 'returns token_requests data' do
95
- expect(stat.token_requests[:succeeded]).to eql(60)
96
- expect(stat.token_requests[:failed]).to eql(20)
100
+ expect(stat.token_requests.succeeded).to eql(60)
101
+ expect(stat.token_requests.failed).to eql(20)
97
102
  end
98
103
 
99
104
  it 'returns stat objects with #interval_granularity equal to :minute' do
@@ -111,43 +116,43 @@ describe Ably::Rest::Client, '#stats' do
111
116
 
112
117
  context 'with :start set to first interval, :limit set to 1 and direction :forwards' do
113
118
  let(:first_interval) { LAST_INTERVAL - 120 }
114
- let(:subject) { client.stats(start: as_since_epoch(first_interval), by: :minute, direction: :forwards, limit: 1) }
115
- let(:stat) { subject.first}
119
+ let(:subject) { client.stats(start: as_since_epoch(first_interval), end: LAST_INTERVAL, unit: :minute, direction: :forwards, limit: 1) }
120
+ let(:stat) { subject.items.first }
116
121
 
117
122
  it 'returns the first interval stats as stats are provided forwards from :start' do
118
- expect(stat.inbound[:realtime][:all][:count]).to eql(first_inbound_realtime_count)
123
+ expect(stat.inbound.realtime.all.count).to eql(first_inbound_realtime_count)
119
124
  end
120
125
 
121
126
  it 'returns 3 pages of stats' do
122
- expect(subject).to be_first_page
123
- expect(subject).to_not be_last_page
124
- page3 = subject.next_page.next_page
125
- expect(page3).to be_last_page
126
- expect(page3.first.inbound[:realtime][:all][:count]).to eql(last_inbound_realtime_count)
127
+ expect(subject).to be_first
128
+ expect(subject).to_not be_last
129
+ page3 = subject.next.next
130
+ expect(page3).to be_last
131
+ expect(page3.items.first.inbound.realtime.all.count).to eql(last_inbound_realtime_count)
127
132
  end
128
133
  end
129
134
 
130
135
  context 'with :end set to last interval, :limit set to 1 and direction :backwards' do
131
- let(:subject) { client.stats(:end => as_since_epoch(LAST_INTERVAL), by: :minute, direction: :backwards, limit: 1) }
132
- let(:stat) { subject.first}
136
+ let(:subject) { client.stats(:end => as_since_epoch(LAST_INTERVAL), end: LAST_INTERVAL, unit: :minute, direction: :backwards, limit: 1) }
137
+ let(:stat) { subject.items.first }
133
138
 
134
139
  it 'returns the 3rd interval stats first as stats are provided backwards from :end' do
135
- expect(stat.inbound[:realtime][:all][:count]).to eql(last_inbound_realtime_count)
140
+ expect(stat.inbound.realtime.all.count).to eql(last_inbound_realtime_count)
136
141
  end
137
142
 
138
143
  it 'returns 3 pages of stats' do
139
- expect(subject).to be_first_page
140
- expect(subject).to_not be_last_page
141
- page3 = subject.next_page.next_page
142
- expect(page3.first.inbound[:realtime][:all][:count]).to eql(first_inbound_realtime_count)
144
+ expect(subject).to be_first
145
+ expect(subject).to_not be_last
146
+ page3 = subject.next.next
147
+ expect(page3.items.first.inbound.realtime.all.count).to eql(first_inbound_realtime_count)
143
148
  end
144
149
  end
145
150
  end
146
151
 
147
152
  [:hour, :day, :month].each do |interval|
148
153
  context "by #{interval}" do
149
- let(:subject) { client.stats(start: as_since_epoch(LAST_INTERVAL), by: interval, direction: 'forwards', limit: 1) }
150
- let(:stat) { subject.first }
154
+ let(:subject) { client.stats(start: as_since_epoch(LAST_INTERVAL), end: LAST_INTERVAL, unit: interval, direction: 'forwards', limit: 1) }
155
+ let(:stat) { subject.items.first }
151
156
  let(:aggregate_messages_count) do
152
157
  STATS_FIXTURES.inject(0) do |sum, fixture|
153
158
  sum + fixture[:inbound][:realtime][:messages][:count] + fixture[:outbound][:realtime][:messages][:count]
@@ -160,10 +165,10 @@ describe Ably::Rest::Client, '#stats' do
160
165
  end
161
166
 
162
167
  it 'should aggregate the stats for that period' do
163
- expect(subject.count).to eql(1)
168
+ expect(subject.items.count).to eql(1)
164
169
 
165
- expect(stat.all[:messages][:count]).to eql(aggregate_messages_count)
166
- expect(stat.all[:messages][:data]).to eql(aggregate_messages_data)
170
+ expect(stat.all.messages.count).to eql(aggregate_messages_count)
171
+ expect(stat.all.messages.data).to eql(aggregate_messages_data)
167
172
  end
168
173
  end
169
174
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Ably::Rest::Client, '#time' do
4
4
  vary_by_protocol do
5
5
  let(:client) do
6
- Ably::Rest::Client.new(api_key: api_key, environment: environment, protocol: protocol)
6
+ Ably::Rest::Client.new(key: api_key, environment: environment, protocol: protocol)
7
7
  end
8
8
 
9
9
  describe 'fetching the service time' do
@@ -32,8 +32,9 @@ RSpec.configure do |config|
32
32
  config.before(:example, :webmock) do
33
33
  allow(TestApp).to receive(:instance).and_return(instance_double('TestApp',
34
34
  app_id: 'app_id',
35
- key_id: 'app_id.key_id',
36
- api_key: 'app_id.key_id:secret',
35
+ key_name: 'app_id.key_name',
36
+ key_secret: 'secret',
37
+ api_key: 'app_id.key_name:secret',
37
38
  environment: 'sandbox'
38
39
  ))
39
40
  WebMock.enable!
@@ -26,7 +26,7 @@ shared_examples 'a client initializer' do
26
26
  let(:client_options) { Hash.new }
27
27
 
28
28
  it 'raises an exception' do
29
- expect { subject }.to raise_error(ArgumentError, /api_key is missing/)
29
+ expect { subject }.to raise_error(ArgumentError, /key is missing/)
30
30
  end
31
31
  end
32
32
 
@@ -38,35 +38,35 @@ shared_examples 'a client initializer' do
38
38
  end
39
39
  end
40
40
 
41
- context 'api_key: "invalid"' do
42
- let(:client_options) { { api_key: 'invalid' } }
41
+ context 'key: "invalid"' do
42
+ let(:client_options) { { key: 'invalid' } }
43
43
 
44
44
  it 'raises an exception' do
45
- expect { subject }.to raise_error(ArgumentError, /api_key is invalid/)
45
+ expect { subject }.to raise_error(ArgumentError, /key is invalid/)
46
46
  end
47
47
  end
48
48
 
49
- context 'api_key: "invalid:asdad"' do
50
- let(:client_options) { { api_key: 'invalid:asdad' } }
49
+ context 'key: "invalid:asdad"' do
50
+ let(:client_options) { { key: 'invalid:asdad' } }
51
51
 
52
52
  it 'raises an exception' do
53
- expect { subject }.to raise_error(ArgumentError, /api_key is invalid/)
53
+ expect { subject }.to raise_error(ArgumentError, /key is invalid/)
54
54
  end
55
55
  end
56
56
 
57
- context 'api_key and key_id' do
58
- let(:client_options) { { api_key: 'appid.keyuid:keysecret', key_id: 'invalid' } }
57
+ context 'key and key_name' do
58
+ let(:client_options) { { key: 'appid.keyuid:keysecret', key_name: 'invalid' } }
59
59
 
60
60
  it 'raises an exception' do
61
- expect { subject }.to raise_error(ArgumentError, /api_key and key_id or key_secret are mutually exclusive/)
61
+ expect { subject }.to raise_error(ArgumentError, /key and key_name or key_secret are mutually exclusive/)
62
62
  end
63
63
  end
64
64
 
65
- context 'api_key and key_secret' do
66
- let(:client_options) { { api_key: 'appid.keyuid:keysecret', key_secret: 'invalid' } }
65
+ context 'key and key_secret' do
66
+ let(:client_options) { { key: 'appid.keyuid:keysecret', key_secret: 'invalid' } }
67
67
 
68
68
  it 'raises an exception' do
69
- expect { subject }.to raise_error(ArgumentError, /api_key and key_id or key_secret are mutually exclusive/)
69
+ expect { subject }.to raise_error(ArgumentError, /key and key_name or key_secret are mutually exclusive/)
70
70
  end
71
71
  end
72
72
 
@@ -80,32 +80,32 @@ shared_examples 'a client initializer' do
80
80
  end
81
81
 
82
82
  context 'with valid arguments' do
83
- let(:default_options) { { api_key: 'appid.keyuid:keysecret' } }
83
+ let(:default_options) { { key: 'appid.keyuid:keysecret' } }
84
84
  let(:client_options) { default_options }
85
85
 
86
- context 'api_key only' do
86
+ context 'key only' do
87
87
  it 'connects to the Ably service' do
88
88
  expect { subject }.to_not raise_error
89
89
  end
90
90
  end
91
91
 
92
- context 'key_id and key_secret' do
93
- let(:client_options) { { key_id: 'id', key_secret: 'secret' } }
92
+ context 'key_name and key_secret', api_private: true do
93
+ let(:client_options) { { key_name: 'id', key_secret: 'secret' } }
94
94
 
95
- it 'constructs an api_key' do
96
- expect(subject.auth.api_key).to eql('id:secret')
95
+ it 'constructs an key' do
96
+ expect(subject.auth.key).to eql('id:secret')
97
97
  end
98
98
  end
99
99
 
100
100
  context 'with a string key instead of options hash' do
101
101
  let(:client_options) { 'app.key:secret' }
102
102
 
103
- it 'sets the api_key' do
104
- expect(subject.auth.api_key).to eql(client_options)
103
+ it 'sets the key' do
104
+ expect(subject.auth.key).to eql(client_options)
105
105
  end
106
106
 
107
- it 'sets the key_id' do
108
- expect(subject.auth.key_id).to eql('app.key')
107
+ it 'sets the key_name' do
108
+ expect(subject.auth.key_name).to eql('app.key')
109
109
  end
110
110
 
111
111
  it 'sets the key_secret' do
@@ -116,16 +116,24 @@ shared_examples 'a client initializer' do
116
116
  context 'with a string token key instead of options hash' do
117
117
  let(:client_options) { 'app.kjhkasjhdsakdh127g7g1271' }
118
118
 
119
- it 'sets the token_id' do
120
- expect(subject.auth.token_id).to eql(client_options)
119
+ it 'sets the token' do
120
+ expect(subject.auth.token).to eql(client_options)
121
121
  end
122
122
  end
123
123
 
124
124
  context 'with token' do
125
- let(:client_options) { { token_id: 'token' } }
125
+ let(:client_options) { { token: 'token' } }
126
126
 
127
- it 'sets the token_id' do
128
- expect(subject.auth.token_id).to eql('token')
127
+ it 'sets the token' do
128
+ expect(subject.auth.token).to eql('token')
129
+ end
130
+ end
131
+
132
+ context 'with token_details' do
133
+ let(:client_options) { { token_details: Ably::Models::TokenDetails.new(token: 'token') } }
134
+
135
+ it 'sets the token' do
136
+ expect(subject.auth.token).to eql('token')
129
137
  end
130
138
  end
131
139
 
@@ -4,6 +4,9 @@ def console(message)
4
4
  puts "\033[31m[#{Time.now.strftime('%H:%M:%S.%L')}]\033[0m \033[33m#{message}\033[0m"
5
5
  end
6
6
 
7
+ require 'coveralls'
8
+ Coveralls.wear!
9
+
7
10
  require 'webmock/rspec'
8
11
 
9
12
  require 'ably'
@@ -5,12 +5,12 @@ module ApiHelper
5
5
  TestApp.instance.app_id
6
6
  end
7
7
 
8
- def key_id
9
- TestApp.instance.key_id
8
+ def key_name
9
+ TestApp.instance.key_name
10
10
  end
11
11
 
12
12
  def key_secret
13
- api_key.split(':')[1]
13
+ TestApp.instance.key_secret
14
14
  end
15
15
 
16
16
  def api_key
@@ -24,7 +24,7 @@ module Ably
24
24
  def start(notification)
25
25
  puts "\n\e[33m --> Creating SPEC.md <--\e[0m\n"
26
26
  scope = if defined?(Ably::Realtime)
27
- 'Real-time & REST'
27
+ 'Realtime & REST'
28
28
  else
29
29
  'REST'
30
30
  end
@@ -1,28 +1,15 @@
1
1
  require 'singleton'
2
2
 
3
3
  class TestApp
4
- APP_SPEC = {
5
- 'keys' => [
6
- {},
7
- {
8
- 'capability' => '{ "cansubscribe:*":["subscribe"], "canpublish:*":["publish"], "canpublish:andpresence":["presence","publish"] }'
9
- }
10
- ],
11
- 'namespaces' => [
12
- { 'id' => 'persisted', 'persisted' => true }
13
- ],
14
- 'channels' => [
15
- {
16
- 'name' => 'persisted:presence_fixtures',
17
- 'presence' => [
18
- { 'clientId' => 'client_bool', 'data' => 'true' },
19
- { 'clientId' => 'client_int', 'data' => '24' },
20
- { 'clientId' => 'client_string', 'data' => 'This is a string clientData payload' },
21
- { 'clientId' => 'client_json', 'data' => '{ "test" => \'This is a JSONObject clientData payload\'}' }
22
- ]
23
- }
24
- ]
25
- }
4
+ TEST_RESOURCES_PATH = File.expand_path('../../../lib/submodules/ably-common/test-resources', __FILE__)
5
+
6
+ # App configuration for test app
7
+ # See https://github.com/ably/ably-common/blob/master/test-resources/test-app-setup.json
8
+ APP_SPEC = JSON.parse(File.read(File.join(TEST_RESOURCES_PATH, 'test-app-setup.json')))['post_apps']
9
+
10
+ # Cipher details used for client_encoded presence data in test app
11
+ # See https://github.com/ably/ably-common/blob/master/test-resources/test-app-setup.json
12
+ APP_SPEC_CIPHER = JSON.parse(File.read(File.join(TEST_RESOURCES_PATH, 'test-app-setup.json')))['cipher']
26
13
 
27
14
  # If an app has already been created and we need a new app, create a new test app
28
15
  # This is sometimes needed when a test needs to be isolated from any other tests
@@ -40,31 +27,31 @@ class TestApp
40
27
  end
41
28
 
42
29
  def app_id
43
- @attributes["appId"]
30
+ @attributes.fetch('appId')
44
31
  end
45
32
 
46
33
  def key
47
- @attributes["keys"].first
34
+ @attributes.fetch('keys').first
48
35
  end
49
36
 
50
37
  def restricted_key
51
- @attributes["keys"][1]
38
+ @attributes.fetch('keys')[1]
52
39
  end
53
40
 
54
- def key_id
55
- "#{app_id}.#{key['id']}"
41
+ def key_name
42
+ key.fetch('keyName')
56
43
  end
57
44
 
58
- def key_value
59
- key['value']
45
+ def key_secret
46
+ key.fetch('keySecret')
60
47
  end
61
48
 
62
49
  def api_key
63
- "#{key_id}:#{key_value}"
50
+ key.fetch('keyStr')
64
51
  end
65
52
 
66
53
  def restricted_api_key
67
- "#{app_id}.#{restricted_key['id']}:#{restricted_key['value']}"
54
+ restricted_key.fetch('keyStr')
68
55
  end
69
56
 
70
57
  def delete
@@ -107,13 +94,13 @@ class TestApp
107
94
  end
108
95
 
109
96
  def create_test_stats(stats)
110
- client = Ably::Rest::Client.new(api_key: api_key, environment: environment)
97
+ client = Ably::Rest::Client.new(key: api_key, environment: environment)
111
98
  response = client.post('/stats', stats)
112
99
  raise "Could not create stats fixtures. Ably responded with status #{response.status}\n#{response.body}" unless (200..299).include?(response.status)
113
100
  end
114
101
 
115
102
  private
116
103
  def sandbox_client
117
- @sandbox_client ||= Ably::Rest::Client.new(api_key: 'app.key:secret', tls: true, environment: environment)
104
+ @sandbox_client ||= Ably::Rest::Client.new(key: 'app.key:secret', tls: true, environment: environment)
118
105
  end
119
106
  end