ably 0.7.5 → 0.7.6
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 +5 -13
- data/.gitignore +1 -0
- data/.gitmodules +3 -0
- data/README.md +46 -22
- data/SPEC.md +345 -240
- data/ably.gemspec +4 -2
- data/lib/ably/auth.rb +18 -14
- data/lib/ably/models/message.rb +1 -1
- data/lib/ably/models/paginated_resource.rb +31 -44
- data/lib/ably/models/presence_message.rb +1 -1
- data/lib/ably/models/stat.rb +67 -24
- data/lib/ably/models/stats_types.rb +131 -0
- data/lib/ably/modules/async_wrapper.rb +3 -2
- data/lib/ably/modules/message_emitter.rb +2 -2
- data/lib/ably/realtime.rb +1 -1
- data/lib/ably/realtime/channel.rb +24 -3
- data/lib/ably/realtime/channel/channel_manager.rb +1 -0
- data/lib/ably/realtime/client.rb +2 -2
- data/lib/ably/realtime/connection.rb +1 -1
- data/lib/ably/realtime/presence.rb +12 -1
- data/lib/ably/rest.rb +1 -1
- data/lib/ably/rest/channel.rb +4 -5
- data/lib/ably/rest/client.rb +5 -5
- data/lib/ably/rest/presence.rb +2 -2
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/realtime/channel_history_spec.rb +74 -23
- data/spec/acceptance/realtime/channel_spec.rb +3 -3
- data/spec/acceptance/realtime/client_spec.rb +3 -3
- data/spec/acceptance/realtime/connection_failures_spec.rb +2 -2
- data/spec/acceptance/realtime/connection_spec.rb +4 -4
- data/spec/acceptance/realtime/message_spec.rb +5 -5
- data/spec/acceptance/realtime/presence_history_spec.rb +56 -13
- data/spec/acceptance/realtime/presence_spec.rb +8 -8
- data/spec/acceptance/realtime/stats_spec.rb +1 -1
- data/spec/acceptance/realtime/time_spec.rb +1 -1
- data/spec/acceptance/rest/auth_spec.rb +31 -4
- data/spec/acceptance/rest/base_spec.rb +3 -3
- data/spec/acceptance/rest/channel_spec.rb +19 -19
- data/spec/acceptance/rest/channels_spec.rb +1 -1
- data/spec/acceptance/rest/client_spec.rb +9 -6
- data/spec/acceptance/rest/encoders_spec.rb +1 -1
- data/spec/acceptance/rest/message_spec.rb +10 -10
- data/spec/acceptance/rest/presence_spec.rb +81 -51
- data/spec/acceptance/rest/stats_spec.rb +46 -41
- data/spec/acceptance/rest/time_spec.rb +1 -1
- data/spec/shared/client_initializer_behaviour.rb +30 -19
- data/spec/spec_helper.rb +3 -0
- data/spec/support/markdown_spec_formatter.rb +1 -1
- data/spec/support/test_app.rb +11 -24
- data/spec/unit/auth_spec.rb +1 -1
- data/spec/unit/models/paginated_resource_spec.rb +81 -72
- data/spec/unit/models/stats_spec.rb +289 -0
- data/spec/unit/modules/async_wrapper_spec.rb +1 -1
- data/spec/unit/realtime/client_spec.rb +1 -1
- data/spec/unit/realtime/realtime_spec.rb +1 -1
- data/spec/unit/rest/channel_spec.rb +1 -1
- data/spec/unit/rest/client_spec.rb +8 -8
- data/spec/unit/rest/rest_spec.rb +1 -1
- data/spec/unit/util/crypto_spec.rb +1 -1
- metadata +55 -43
- data/spec/resources/crypto-data-128.json +0 -56
- data/spec/resources/crypto-data-256.json +0 -56
- data/spec/unit/models/stat_spec.rb +0 -113
@@ -1,56 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"algorithm": "aes",
|
3
|
-
"mode": "cbc",
|
4
|
-
"keylength": 128,
|
5
|
-
"key": "WUP6u0K7MXI5Zeo0VppPwg==",
|
6
|
-
"iv": "HO4cYSP8LybPYBPZPHQOtg==",
|
7
|
-
"items": [
|
8
|
-
{
|
9
|
-
"encoded": {
|
10
|
-
"name": "example",
|
11
|
-
"data": "The quick brown fox jumped over the lazy dog"
|
12
|
-
},
|
13
|
-
"encrypted": {
|
14
|
-
"name": "example",
|
15
|
-
"data": "HO4cYSP8LybPYBPZPHQOtmHItcxYdSvcNUC6kXVpMn0VFL+9z2/5tJ6WFbR0SBT1xhFRuJ+MeBGTU3yOY9P5ow==",
|
16
|
-
"encoding": "utf-8/cipher+aes-128-cbc/base64"
|
17
|
-
}
|
18
|
-
},
|
19
|
-
{
|
20
|
-
"encoded": {
|
21
|
-
"name": "example",
|
22
|
-
"data": "AAECAwQFBgcICQoLDA0ODw==",
|
23
|
-
"encoding": "base64"
|
24
|
-
},
|
25
|
-
"encrypted": {
|
26
|
-
"name": "example",
|
27
|
-
"data": "HO4cYSP8LybPYBPZPHQOtuB3dfKG08yw7J4qx3kkjxdW0eoZv+nGAp76OKqYQ327",
|
28
|
-
"encoding": "cipher+aes-128-cbc/base64"
|
29
|
-
}
|
30
|
-
},
|
31
|
-
{
|
32
|
-
"encoded": {
|
33
|
-
"name": "example",
|
34
|
-
"data": "{\"example\":{\"json\":\"Object\"}}",
|
35
|
-
"encoding": "json"
|
36
|
-
},
|
37
|
-
"encrypted": {
|
38
|
-
"name": "example",
|
39
|
-
"data": "HO4cYSP8LybPYBPZPHQOtuD53yrD3YV3NBoTEYBh4U0N1QXHbtkfsDfTspKeLQFt",
|
40
|
-
"encoding": "json/utf-8/cipher+aes-128-cbc/base64"
|
41
|
-
}
|
42
|
-
},
|
43
|
-
{
|
44
|
-
"encoded": {
|
45
|
-
"name": "example",
|
46
|
-
"data": "[\"example\",\"json\",\"array\"]",
|
47
|
-
"encoding": "json"
|
48
|
-
},
|
49
|
-
"encrypted": {
|
50
|
-
"name": "example",
|
51
|
-
"data": "HO4cYSP8LybPYBPZPHQOtvmStzmExkdjvrn51J6cmaTZrGl+EsJ61sgxmZ6j6jcA",
|
52
|
-
"encoding": "json/utf-8/cipher+aes-128-cbc/base64"
|
53
|
-
}
|
54
|
-
}
|
55
|
-
]
|
56
|
-
}
|
@@ -1,56 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"algorithm": "aes",
|
3
|
-
"mode": "cbc",
|
4
|
-
"keylength": 256,
|
5
|
-
"key": "o9qXZoPGDNla50VnRwH7cGqIrpyagTxGsRgimKJbY40=",
|
6
|
-
"iv": "NMDl1Acnel8HVdu1cEWdrw==",
|
7
|
-
"items": [
|
8
|
-
{
|
9
|
-
"encoded": {
|
10
|
-
"name": "example",
|
11
|
-
"data": "The quick brown fox jumped over the lazy dog"
|
12
|
-
},
|
13
|
-
"encrypted": {
|
14
|
-
"name": "example",
|
15
|
-
"data": "NMDl1Acnel8HVdu1cEWdr9CGPYFoBoLgJCzoybbQbnyfwx3UQ8CGuKyP/g56Za/JB3xW6XGkNzrHYvZwad4fvA==",
|
16
|
-
"encoding": "utf-8/cipher+aes-256-cbc/base64"
|
17
|
-
}
|
18
|
-
},
|
19
|
-
{
|
20
|
-
"encoded": {
|
21
|
-
"name": "example",
|
22
|
-
"data": "AAECAwQFBgcICQoLDA0ODw==",
|
23
|
-
"encoding": "base64"
|
24
|
-
},
|
25
|
-
"encrypted": {
|
26
|
-
"name": "example",
|
27
|
-
"data": "NMDl1Acnel8HVdu1cEWdr8UFEi56Ms0zPHszbppM61BC8Yf6ndq+kiCj9xXW97/O",
|
28
|
-
"encoding": "cipher+aes-256-cbc/base64"
|
29
|
-
}
|
30
|
-
},
|
31
|
-
{
|
32
|
-
"encoded": {
|
33
|
-
"name": "example",
|
34
|
-
"data": "{\"example\":{\"json\":\"Object\"}}",
|
35
|
-
"encoding": "json"
|
36
|
-
},
|
37
|
-
"encrypted": {
|
38
|
-
"name": "example",
|
39
|
-
"data": "NMDl1Acnel8HVdu1cEWdr21pS5//hdtQf3QqQzZM/jWAtn09Vh52E6jMdC3mWS98",
|
40
|
-
"encoding": "json/utf-8/cipher+aes-256-cbc/base64"
|
41
|
-
}
|
42
|
-
},
|
43
|
-
{
|
44
|
-
"encoded": {
|
45
|
-
"name": "example",
|
46
|
-
"data": "[\"example\",\"json\",\"array\"]",
|
47
|
-
"encoding": "json"
|
48
|
-
},
|
49
|
-
"encrypted": {
|
50
|
-
"name": "example",
|
51
|
-
"data": "NMDl1Acnel8HVdu1cEWdr4J5sVAFpnXsz0fTtsuwOaTRU+6P5GaWlNjePWwiOZCQ",
|
52
|
-
"encoding": "json/utf-8/cipher+aes-256-cbc/base64"
|
53
|
-
}
|
54
|
-
}
|
55
|
-
]
|
56
|
-
}
|
@@ -1,113 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'shared/model_behaviour'
|
4
|
-
|
5
|
-
describe Ably::Models::Stat do
|
6
|
-
include Ably::Modules::Conversions
|
7
|
-
|
8
|
-
subject { Ably::Models::Stat }
|
9
|
-
|
10
|
-
it_behaves_like 'a model', with_simple_attributes: %w(interval_id all inbound outbound persisted connections channels api_requests token_requests) do
|
11
|
-
let(:model_args) { [] }
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '#interval_granularity' do
|
15
|
-
subject { Ably::Models::Stat.new(interval_id: '2004-02') }
|
16
|
-
|
17
|
-
it 'returns the granularity of the interval_id' do
|
18
|
-
expect(subject.interval_granularity).to eq(:month)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '#interval_time' do
|
23
|
-
subject { Ably::Models::Stat.new(interval_id: '2004-02-01:05:06') }
|
24
|
-
|
25
|
-
it 'returns a Time object representing the start of the interval' do
|
26
|
-
expect(subject.interval_time.to_i).to eql(Time.new(2004, 02, 01, 05, 06, 00, '+00:00').to_i)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'class methods' do
|
31
|
-
describe '#to_interval_id' do
|
32
|
-
context 'when time zone of time argument is UTC' do
|
33
|
-
it 'converts time 2014-02-03:05:06 with granularity :month into 2014-02' do
|
34
|
-
expect(subject.to_interval_id(Time.new(2014, 2, 1, 0, 0, 0, '+00:00'), :month)).to eql('2014-02')
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'converts time 2014-02-03:05:06 with granularity :day into 2014-02-03' do
|
38
|
-
expect(subject.to_interval_id(Time.new(2014, 2, 3, 0, 0, 0, '+00:00'), :day)).to eql('2014-02-03')
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'converts time 2014-02-03:05:06 with granularity :hour into 2014-02-03:05' do
|
42
|
-
expect(subject.to_interval_id(Time.new(2014, 2, 3, 5, 0, 0, '+00:00'), :hour)).to eql('2014-02-03:05')
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'converts time 2014-02-03:05:06 with granularity :minute into 2014-02-03:05:06' do
|
46
|
-
expect(subject.to_interval_id(Time.new(2014, 2, 3, 5, 6, 0, '+00:00'), :minute)).to eql('2014-02-03:05:06')
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'fails with invalid granularity' do
|
50
|
-
expect { subject.to_interval_id(Time.now, :invalid) }.to raise_error KeyError
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'fails with invalid time' do
|
54
|
-
expect { subject.to_interval_id(nil, :month) }.to raise_error ArgumentError
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'when time zone of time argument is +02:00' do
|
59
|
-
it 'converts time 2014-02-03:06 with granularity :hour into 2014-02-03:04 at UTC +00:00' do
|
60
|
-
expect(subject.to_interval_id(Time.new(2014, 2, 3, 6, 0, 0, '+02:00'), :hour)).to eql('2014-02-03:04')
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '#from_interval_id' do
|
66
|
-
it 'converts a month interval_id 2014-02 into a Time object in UTC 0' do
|
67
|
-
expect(subject.from_interval_id('2014-02')).to eql(Time.gm(2014, 2))
|
68
|
-
expect(subject.from_interval_id('2014-02').utc_offset).to eql(0)
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'converts a day interval_id 2014-02-03 into a Time object in UTC 0' do
|
72
|
-
expect(subject.from_interval_id('2014-02-03')).to eql(Time.gm(2014, 2, 3))
|
73
|
-
expect(subject.from_interval_id('2014-02-03').utc_offset).to eql(0)
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'converts an hour interval_id 2014-02-03:05 into a Time object in UTC 0' do
|
77
|
-
expect(subject.from_interval_id('2014-02-03:05')).to eql(Time.gm(2014, 2, 3, 5))
|
78
|
-
expect(subject.from_interval_id('2014-02-03:05').utc_offset).to eql(0)
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'converts a minute interval_id 2014-02-03:05:06 into a Time object in UTC 0' do
|
82
|
-
expect(subject.from_interval_id('2014-02-03:05:06')).to eql(Time.gm(2014, 2, 3, 5, 6))
|
83
|
-
expect(subject.from_interval_id('2014-02-03:05:06').utc_offset).to eql(0)
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'fails with an invalid interval_id 14-20' do
|
87
|
-
expect { subject.from_interval_id('14-20') }.to raise_error ArgumentError
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe '#granularity_from_interval_id' do
|
92
|
-
it 'returns a :month interval_id for 2014-02' do
|
93
|
-
expect(subject.granularity_from_interval_id('2014-02')).to eq(:month)
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'returns a :day interval_id for 2014-02-03' do
|
97
|
-
expect(subject.granularity_from_interval_id('2014-02-03')).to eq(:day)
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'returns a :hour interval_id for 2014-02-03:05' do
|
101
|
-
expect(subject.granularity_from_interval_id('2014-02-03:05')).to eq(:hour)
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'returns a :minute interval_id for 2014-02-03:05:06' do
|
105
|
-
expect(subject.granularity_from_interval_id('2014-02-03:05:06')).to eq(:minute)
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'fails with an invalid interval_id 14-20' do
|
109
|
-
expect { subject.granularity_from_interval_id('14-20') }.to raise_error ArgumentError
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|