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.
Files changed (63) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +1 -0
  3. data/.gitmodules +3 -0
  4. data/README.md +46 -22
  5. data/SPEC.md +345 -240
  6. data/ably.gemspec +4 -2
  7. data/lib/ably/auth.rb +18 -14
  8. data/lib/ably/models/message.rb +1 -1
  9. data/lib/ably/models/paginated_resource.rb +31 -44
  10. data/lib/ably/models/presence_message.rb +1 -1
  11. data/lib/ably/models/stat.rb +67 -24
  12. data/lib/ably/models/stats_types.rb +131 -0
  13. data/lib/ably/modules/async_wrapper.rb +3 -2
  14. data/lib/ably/modules/message_emitter.rb +2 -2
  15. data/lib/ably/realtime.rb +1 -1
  16. data/lib/ably/realtime/channel.rb +24 -3
  17. data/lib/ably/realtime/channel/channel_manager.rb +1 -0
  18. data/lib/ably/realtime/client.rb +2 -2
  19. data/lib/ably/realtime/connection.rb +1 -1
  20. data/lib/ably/realtime/presence.rb +12 -1
  21. data/lib/ably/rest.rb +1 -1
  22. data/lib/ably/rest/channel.rb +4 -5
  23. data/lib/ably/rest/client.rb +5 -5
  24. data/lib/ably/rest/presence.rb +2 -2
  25. data/lib/ably/version.rb +1 -1
  26. data/spec/acceptance/realtime/channel_history_spec.rb +74 -23
  27. data/spec/acceptance/realtime/channel_spec.rb +3 -3
  28. data/spec/acceptance/realtime/client_spec.rb +3 -3
  29. data/spec/acceptance/realtime/connection_failures_spec.rb +2 -2
  30. data/spec/acceptance/realtime/connection_spec.rb +4 -4
  31. data/spec/acceptance/realtime/message_spec.rb +5 -5
  32. data/spec/acceptance/realtime/presence_history_spec.rb +56 -13
  33. data/spec/acceptance/realtime/presence_spec.rb +8 -8
  34. data/spec/acceptance/realtime/stats_spec.rb +1 -1
  35. data/spec/acceptance/realtime/time_spec.rb +1 -1
  36. data/spec/acceptance/rest/auth_spec.rb +31 -4
  37. data/spec/acceptance/rest/base_spec.rb +3 -3
  38. data/spec/acceptance/rest/channel_spec.rb +19 -19
  39. data/spec/acceptance/rest/channels_spec.rb +1 -1
  40. data/spec/acceptance/rest/client_spec.rb +9 -6
  41. data/spec/acceptance/rest/encoders_spec.rb +1 -1
  42. data/spec/acceptance/rest/message_spec.rb +10 -10
  43. data/spec/acceptance/rest/presence_spec.rb +81 -51
  44. data/spec/acceptance/rest/stats_spec.rb +46 -41
  45. data/spec/acceptance/rest/time_spec.rb +1 -1
  46. data/spec/shared/client_initializer_behaviour.rb +30 -19
  47. data/spec/spec_helper.rb +3 -0
  48. data/spec/support/markdown_spec_formatter.rb +1 -1
  49. data/spec/support/test_app.rb +11 -24
  50. data/spec/unit/auth_spec.rb +1 -1
  51. data/spec/unit/models/paginated_resource_spec.rb +81 -72
  52. data/spec/unit/models/stats_spec.rb +289 -0
  53. data/spec/unit/modules/async_wrapper_spec.rb +1 -1
  54. data/spec/unit/realtime/client_spec.rb +1 -1
  55. data/spec/unit/realtime/realtime_spec.rb +1 -1
  56. data/spec/unit/rest/channel_spec.rb +1 -1
  57. data/spec/unit/rest/client_spec.rb +8 -8
  58. data/spec/unit/rest/rest_spec.rb +1 -1
  59. data/spec/unit/util/crypto_spec.rb +1 -1
  60. metadata +55 -43
  61. data/spec/resources/crypto-data-128.json +0 -56
  62. data/spec/resources/crypto-data-256.json +0 -56
  63. 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