ably 0.1.1 → 0.1.2
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/lib/ably.rb +2 -2
- data/lib/ably/auth.rb +39 -7
- data/lib/ably/modules/conversions.rb +58 -0
- data/lib/ably/{support.rb → modules/http_helpers.rb} +3 -3
- data/lib/ably/realtime.rb +5 -23
- data/lib/ably/realtime/channel.rb +62 -18
- data/lib/ably/realtime/client.rb +76 -22
- data/lib/ably/realtime/connection.rb +41 -14
- data/lib/ably/realtime/models/error_info.rb +38 -0
- data/lib/ably/realtime/models/message.rb +85 -0
- data/lib/ably/realtime/models/protocol_message.rb +149 -0
- data/lib/ably/realtime/models/shared.rb +17 -0
- data/lib/ably/rest.rb +16 -3
- data/lib/ably/rest/channel.rb +2 -2
- data/lib/ably/rest/client.rb +17 -20
- data/lib/ably/rest/models/message.rb +62 -0
- data/lib/ably/rest/models/paged_resource.rb +117 -0
- data/lib/ably/rest/presence.rb +4 -4
- data/lib/ably/token.rb +1 -1
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/realtime/channel_spec.rb +86 -0
- data/spec/acceptance/rest/auth_spec.rb +14 -5
- data/spec/acceptance/rest/channel_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/support/event_machine_helper.rb +22 -0
- data/spec/support/model_helper.rb +67 -0
- data/spec/unit/realtime/error_info_spec.rb +10 -0
- data/spec/unit/realtime/message_spec.rb +115 -0
- data/spec/unit/realtime/protocol_message_spec.rb +102 -0
- data/spec/unit/realtime/realtime_spec.rb +20 -0
- data/spec/unit/rest/message_spec.rb +74 -0
- data/spec/unit/{rest_spec.rb → rest/rest_spec.rb} +14 -0
- metadata +28 -13
- data/lib/ably/message.rb +0 -70
- data/lib/ably/rest/paged_resource.rb +0 -117
- data/spec/acceptance/realtime_client_spec.rb +0 -12
- data/spec/unit/message_spec.rb +0 -73
- data/spec/unit/realtime_spec.rb +0 -9
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'support/model_helper'
|
3
|
+
|
4
|
+
describe Ably::Realtime::Models::ErrorInfo do
|
5
|
+
subject { Ably::Realtime::Models::ErrorInfo }
|
6
|
+
|
7
|
+
it_behaves_like 'a realtime model', with_simple_attributes: %w(code status message) do
|
8
|
+
let(:model_args) { [] }
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'support/model_helper'
|
3
|
+
|
4
|
+
describe Ably::Realtime::Models::Message do
|
5
|
+
subject { Ably::Realtime::Models::Message }
|
6
|
+
let(:protocol_message) { Ably::Realtime::Models::ProtocolMessage.new(action: 1) }
|
7
|
+
|
8
|
+
it_behaves_like 'a realtime model', with_simple_attributes: %w(name client_id data) do
|
9
|
+
let(:model_args) { [protocol_message] }
|
10
|
+
end
|
11
|
+
|
12
|
+
context '#sender_timestamp' do
|
13
|
+
let(:model) { subject.new({ timestamp: Time.now.to_i * 1000 }, protocol_message) }
|
14
|
+
it 'retrieves attribute :sender_timestamp' do
|
15
|
+
expect(model.sender_timestamp).to be_a(Time)
|
16
|
+
expect(model.sender_timestamp.to_i).to be_within(1).of(Time.now.to_i)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'Java naming' do
|
21
|
+
let(:model) { subject.new({ clientId: 'joe' }, protocol_message) }
|
22
|
+
|
23
|
+
it 'converts the attribute to ruby symbol naming convention' do
|
24
|
+
expect(model.client_id).to eql('joe')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context '#to_json' do
|
29
|
+
let(:json_object) { JSON.parse(model.to_json) }
|
30
|
+
|
31
|
+
context 'with valid data' do
|
32
|
+
let(:model) { subject.new({ name: 'test', clientId: 'joe' }, protocol_message) }
|
33
|
+
|
34
|
+
it 'converts the attribute back to Java mixedCase notation using string keys' do
|
35
|
+
expect(json_object["clientId"]).to eql('joe')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'autofills a missing timestamp for all messages' do
|
39
|
+
expect(json_object["timestamp"].to_i / 1000).to be_within(1).of(Time.now.to_i)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'with invalid data' do
|
44
|
+
let(:model) { subject.new({ clientId: 'joe' }, protocol_message) }
|
45
|
+
|
46
|
+
it 'raises an exception' do
|
47
|
+
expect { model.to_json }.to raise_error RuntimeError, /cannot generate valid JSON/
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'part of ProtocolMessage' do
|
53
|
+
let(:ably_time) { Time.now + 5 }
|
54
|
+
let(:sender_time_0) { Time.now - 5 }
|
55
|
+
let(:sender_time_1) { Time.now - 3 }
|
56
|
+
let(:message_serial) { SecureRandom.hex }
|
57
|
+
let(:connection_id) { SecureRandom.hex }
|
58
|
+
|
59
|
+
let(:message_0_payload) do
|
60
|
+
{
|
61
|
+
'string_key' => 'string_value',
|
62
|
+
1 => 2,
|
63
|
+
true => false
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
let(:message_0_json) do
|
68
|
+
{
|
69
|
+
timestamp: sender_time_0,
|
70
|
+
name: 'zero',
|
71
|
+
data: message_0_payload
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
let(:message_1_json) do
|
76
|
+
{
|
77
|
+
timestamp: sender_time_1,
|
78
|
+
name: 'one',
|
79
|
+
data: 'simple string'
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
let(:protocol_message) do
|
84
|
+
Ably::Realtime::Models::ProtocolMessage.new({
|
85
|
+
timestamp: ably_time.to_i,
|
86
|
+
msg_serial: message_serial,
|
87
|
+
connection_id: connection_id,
|
88
|
+
messages: [
|
89
|
+
message_0_json, message_1_json
|
90
|
+
]
|
91
|
+
})
|
92
|
+
end
|
93
|
+
|
94
|
+
let(:message_0) { protocol_message.messages.first }
|
95
|
+
let(:message_1) { protocol_message.messages.last }
|
96
|
+
|
97
|
+
it 'should generate a message ID from the index, serial and connection id' do
|
98
|
+
expect(message_0.message_id).to eql("#{connection_id}:#{message_serial}:0")
|
99
|
+
expect(message_1.message_id).to eql("#{connection_id}:#{message_serial}:1")
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should not modify the data payload' do
|
103
|
+
expect(message_0.data['string_key']).to eql('string_value')
|
104
|
+
expect(message_0.data[1]).to eql(2)
|
105
|
+
expect(message_0.data[true]).to eql(false)
|
106
|
+
expect(message_0.data).to eql(message_0_payload)
|
107
|
+
|
108
|
+
expect(message_1.data).to eql('simple string')
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should not allow changes to the payload' do
|
112
|
+
expect { message_0.data["test"] = true }.to raise_error RuntimeError, /can't modify frozen Hash/
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'support/model_helper'
|
3
|
+
|
4
|
+
describe Ably::Realtime::Models::ProtocolMessage do
|
5
|
+
subject { Ably::Realtime::Models::ProtocolMessage }
|
6
|
+
|
7
|
+
it_behaves_like 'a realtime model',
|
8
|
+
with_simple_attributes: %w(action count channel channel_serial connection_id connection_serial) do
|
9
|
+
|
10
|
+
let(:model_args) { [] }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'attributes' do
|
14
|
+
let(:unique_value) { SecureRandom.hex }
|
15
|
+
|
16
|
+
context 'Java naming' do
|
17
|
+
let(:protocol_message) { subject.new(channelSerial: unique_value) }
|
18
|
+
|
19
|
+
it 'converts the attribute to ruby symbol naming convention' do
|
20
|
+
expect(protocol_message.channel_serial).to eql(unique_value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context '#action_sym' do
|
25
|
+
let(:protocol_message) { subject.new(action: 14) }
|
26
|
+
|
27
|
+
it 'returns the symbol equivalent' do
|
28
|
+
expect(protocol_message.action_sym).to eql(:presence)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context '#timestamp' do
|
33
|
+
let(:protocol_message) { subject.new(timestamp: Time.now.to_i * 1000) }
|
34
|
+
it 'retrieves attribute :timestamp' do
|
35
|
+
expect(protocol_message.timestamp).to be_a(Time)
|
36
|
+
expect(protocol_message.timestamp.to_i).to be_within(1).of(Time.now.to_i)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context '#error' do
|
41
|
+
context 'with no error attribute' do
|
42
|
+
let(:protocol_message) { subject.new(action: 1) }
|
43
|
+
|
44
|
+
it 'returns nil' do
|
45
|
+
expect(protocol_message.error).to be_nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'with nil error' do
|
50
|
+
let(:protocol_message) { subject.new(error: nil) }
|
51
|
+
|
52
|
+
it 'returns nil' do
|
53
|
+
expect(protocol_message.error).to be_nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'with error' do
|
58
|
+
let(:protocol_message) { subject.new(error: { message: 'test_error' }) }
|
59
|
+
|
60
|
+
it 'returns a valid ErrorInfo object' do
|
61
|
+
expect(protocol_message.error).to be_a(Ably::Realtime::Models::ErrorInfo)
|
62
|
+
expect(protocol_message.error.message).to eql('test_error')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context '#to_json' do
|
69
|
+
let(:json_object) { JSON.parse(model.to_json) }
|
70
|
+
let(:message) { { 'name' => 'event', 'clientId' => 'joe' } }
|
71
|
+
let(:attached_action) { Ably::Realtime::Models::ProtocolMessage.action!(:attached) }
|
72
|
+
let(:message_action) { Ably::Realtime::Models::ProtocolMessage.action!(:message) }
|
73
|
+
|
74
|
+
context 'with valid data' do
|
75
|
+
let(:model) { subject.new({ :action => attached_action, :channelSerial => 'unique', messages: [message] }) }
|
76
|
+
|
77
|
+
it 'converts the attribute back to Java mixedCase notation using string keys' do
|
78
|
+
expect(json_object["channelSerial"]).to eql('unique')
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'populates the messages' do
|
82
|
+
expect(json_object["messages"].first).to include(message)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'with invalid name data' do
|
87
|
+
let(:model) { subject.new({ clientId: 'joe' }) }
|
88
|
+
|
89
|
+
it 'it raises an exception' do
|
90
|
+
expect { model.to_json }.to raise_error RuntimeError, /cannot generate valid JSON/
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'with missing msg_serial for ack message' do
|
95
|
+
let(:model) { subject.new({ :action => message_action }) }
|
96
|
+
|
97
|
+
it 'it raises an exception' do
|
98
|
+
expect { model.to_json }.to raise_error RuntimeError, /cannot generate valid JSON/
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Ably::Realtime do
|
4
|
+
let(:options) { { api_key: 'app.key:secret' } }
|
5
|
+
|
6
|
+
specify 'constructor returns an Ably::Realtime::Client' do
|
7
|
+
expect(Ably::Realtime.new(options)).to be_instance_of(Ably::Realtime::Client)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe Ably::Realtime::Client do
|
11
|
+
describe "initializing the client" do
|
12
|
+
it "should disallow an invalid key" do
|
13
|
+
expect { Ably::Realtime::Client.new({}) }.to raise_error(ArgumentError, /api_key is missing/)
|
14
|
+
expect { Ably::Realtime::Client.new(api_key: 'invalid') }.to raise_error(ArgumentError, /api_key is invalid/)
|
15
|
+
expect { Ably::Realtime::Client.new(api_key: 'invalid:asdad') }.to raise_error(ArgumentError, /api_key is invalid/)
|
16
|
+
expect { Ably::Realtime::Client.new(api_key: 'appid.keyuid:keysecret') }.to_not raise_error
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Ably::Rest::Models::Message do
|
4
|
+
context 'attributes' do
|
5
|
+
let(:unique_value) { 'unique_value' }
|
6
|
+
|
7
|
+
%w(name data client_id message_id).each do |attribute|
|
8
|
+
context "##{attribute}" do
|
9
|
+
subject { Ably::Rest::Models::Message.new({ attribute.to_sym => unique_value }) }
|
10
|
+
|
11
|
+
it "retrieves attribute :#{attribute}" do
|
12
|
+
expect(subject.public_send(attribute)).to eql(unique_value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context '#sender_timestamp' do
|
18
|
+
subject { Ably::Rest::Models::Message.new(timestamp: Time.now.to_i * 1000) }
|
19
|
+
it 'retrieves attribute :timestamp' do
|
20
|
+
expect(subject.sender_timestamp).to be_a(Time)
|
21
|
+
expect(subject.sender_timestamp.to_i).to be_within(1).of(Time.now.to_i)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context '#json' do
|
26
|
+
let(:attributes) { { timestamp: Time.now.to_i * 1000 } }
|
27
|
+
subject { Ably::Rest::Models::Message.new(attributes) }
|
28
|
+
|
29
|
+
it 'provides access to #json' do
|
30
|
+
expect(subject.json).to eql(attributes)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context '#[]' do
|
35
|
+
subject { Ably::Rest::Models::Message.new(unusual: 'attribute') }
|
36
|
+
|
37
|
+
it 'provides accessor method to #json' do
|
38
|
+
expect(subject[:unusual]).to eql('attribute')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context '==' do
|
44
|
+
let(:attributes) { { client_id: 'unique' } }
|
45
|
+
|
46
|
+
it 'is true when attributes are the same' do
|
47
|
+
new_message = -> { Ably::Rest::Models::Message.new(attributes) }
|
48
|
+
expect(new_message[]).to eq(new_message[])
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'is false when attributes are not the same' do
|
52
|
+
expect(Ably::Rest::Models::Message.new(client_id: 1)).to_not eq(Ably::Rest::Models::Message.new(client_id: 2))
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'is false when class type differs' do
|
56
|
+
expect(Ably::Rest::Models::Message.new(client_id: 1)).to_not eq(nil)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'is immutable' do
|
61
|
+
let(:options) { { client_id: 'John' } }
|
62
|
+
subject { Ably::Rest::Models::Message.new(options) }
|
63
|
+
|
64
|
+
it 'prevents changes' do
|
65
|
+
expect { subject.json[:client_id] = 'Joe' }.to raise_error RuntimeError, /can't modify frozen Hash/
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'dups options' do
|
69
|
+
expect(subject.json[:client_id]).to eql('John')
|
70
|
+
options[:client_id] = 'Joe'
|
71
|
+
expect(subject.json[:client_id]).to eql('John')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -94,6 +94,20 @@ describe Ably::Rest do
|
|
94
94
|
expect(client.endpoint.to_s).to eql('https://sandbox-rest.ably.io')
|
95
95
|
end
|
96
96
|
end
|
97
|
+
|
98
|
+
context 'delegators' do
|
99
|
+
subject { Ably::Rest::Client.new(options) }
|
100
|
+
|
101
|
+
it 'should delegate :client_id to .auth' do
|
102
|
+
expect(subject.auth).to receive(:client_id).and_return('john')
|
103
|
+
expect(subject.client_id).to eql('john')
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should delegate :auth_options to .auth' do
|
107
|
+
expect(subject.auth).to receive(:auth_options).and_return({ option: 1 })
|
108
|
+
expect(subject.auth_options).to eql({ option: 1 })
|
109
|
+
end
|
110
|
+
end
|
97
111
|
end
|
98
112
|
end
|
99
113
|
end
|
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.2
|
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-09-
|
12
|
+
date: 2014-09-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
@@ -168,12 +168,17 @@ files:
|
|
168
168
|
- lib/ably.rb
|
169
169
|
- lib/ably/auth.rb
|
170
170
|
- lib/ably/exceptions.rb
|
171
|
-
- lib/ably/
|
171
|
+
- lib/ably/modules/conversions.rb
|
172
|
+
- lib/ably/modules/http_helpers.rb
|
172
173
|
- lib/ably/realtime.rb
|
173
174
|
- lib/ably/realtime/callbacks.rb
|
174
175
|
- lib/ably/realtime/channel.rb
|
175
176
|
- lib/ably/realtime/client.rb
|
176
177
|
- lib/ably/realtime/connection.rb
|
178
|
+
- lib/ably/realtime/models/error_info.rb
|
179
|
+
- lib/ably/realtime/models/message.rb
|
180
|
+
- lib/ably/realtime/models/protocol_message.rb
|
181
|
+
- lib/ably/realtime/models/shared.rb
|
177
182
|
- lib/ably/rest.rb
|
178
183
|
- lib/ably/rest/channel.rb
|
179
184
|
- lib/ably/rest/channels.rb
|
@@ -181,12 +186,12 @@ files:
|
|
181
186
|
- lib/ably/rest/middleware/exceptions.rb
|
182
187
|
- lib/ably/rest/middleware/external_exceptions.rb
|
183
188
|
- lib/ably/rest/middleware/parse_json.rb
|
184
|
-
- lib/ably/rest/
|
189
|
+
- lib/ably/rest/models/message.rb
|
190
|
+
- lib/ably/rest/models/paged_resource.rb
|
185
191
|
- lib/ably/rest/presence.rb
|
186
|
-
- lib/ably/support.rb
|
187
192
|
- lib/ably/token.rb
|
188
193
|
- lib/ably/version.rb
|
189
|
-
- spec/acceptance/
|
194
|
+
- spec/acceptance/realtime/channel_spec.rb
|
190
195
|
- spec/acceptance/rest/auth_spec.rb
|
191
196
|
- spec/acceptance/rest/base_spec.rb
|
192
197
|
- spec/acceptance/rest/channel_spec.rb
|
@@ -196,11 +201,16 @@ files:
|
|
196
201
|
- spec/acceptance/rest/time_spec.rb
|
197
202
|
- spec/spec_helper.rb
|
198
203
|
- spec/support/api_helper.rb
|
204
|
+
- spec/support/event_machine_helper.rb
|
205
|
+
- spec/support/model_helper.rb
|
199
206
|
- spec/support/test_app.rb
|
200
207
|
- spec/unit/auth.rb
|
201
|
-
- spec/unit/
|
202
|
-
- spec/unit/
|
203
|
-
- spec/unit/
|
208
|
+
- spec/unit/realtime/error_info_spec.rb
|
209
|
+
- spec/unit/realtime/message_spec.rb
|
210
|
+
- spec/unit/realtime/protocol_message_spec.rb
|
211
|
+
- spec/unit/realtime/realtime_spec.rb
|
212
|
+
- spec/unit/rest/message_spec.rb
|
213
|
+
- spec/unit/rest/rest_spec.rb
|
204
214
|
- spec/unit/token_spec.rb
|
205
215
|
homepage: http://github.com/ably/ably-ruby
|
206
216
|
licenses:
|
@@ -227,7 +237,7 @@ signing_key:
|
|
227
237
|
specification_version: 4
|
228
238
|
summary: A Ruby client library for ably.io, the real-time messaging service
|
229
239
|
test_files:
|
230
|
-
- spec/acceptance/
|
240
|
+
- spec/acceptance/realtime/channel_spec.rb
|
231
241
|
- spec/acceptance/rest/auth_spec.rb
|
232
242
|
- spec/acceptance/rest/base_spec.rb
|
233
243
|
- spec/acceptance/rest/channel_spec.rb
|
@@ -237,10 +247,15 @@ test_files:
|
|
237
247
|
- spec/acceptance/rest/time_spec.rb
|
238
248
|
- spec/spec_helper.rb
|
239
249
|
- spec/support/api_helper.rb
|
250
|
+
- spec/support/event_machine_helper.rb
|
251
|
+
- spec/support/model_helper.rb
|
240
252
|
- spec/support/test_app.rb
|
241
253
|
- spec/unit/auth.rb
|
242
|
-
- spec/unit/
|
243
|
-
- spec/unit/
|
244
|
-
- spec/unit/
|
254
|
+
- spec/unit/realtime/error_info_spec.rb
|
255
|
+
- spec/unit/realtime/message_spec.rb
|
256
|
+
- spec/unit/realtime/protocol_message_spec.rb
|
257
|
+
- spec/unit/realtime/realtime_spec.rb
|
258
|
+
- spec/unit/rest/message_spec.rb
|
259
|
+
- spec/unit/rest/rest_spec.rb
|
245
260
|
- spec/unit/token_spec.rb
|
246
261
|
has_rdoc:
|
data/lib/ably/message.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
module Ably
|
2
|
-
# A Message encapsulates an individual message sent or received in Ably
|
3
|
-
class Message
|
4
|
-
def initialize(message)
|
5
|
-
@message = message.dup.freeze
|
6
|
-
end
|
7
|
-
|
8
|
-
# Event name
|
9
|
-
#
|
10
|
-
# @return [String]
|
11
|
-
def name
|
12
|
-
@message[:name]
|
13
|
-
end
|
14
|
-
|
15
|
-
# Payload
|
16
|
-
#
|
17
|
-
# @return [Object]
|
18
|
-
def data
|
19
|
-
@message[:data]
|
20
|
-
end
|
21
|
-
|
22
|
-
# Client ID of the publisher of the message
|
23
|
-
#
|
24
|
-
# @return [String]
|
25
|
-
def client_id
|
26
|
-
@message[:client_id]
|
27
|
-
end
|
28
|
-
|
29
|
-
# Timestamp in milliseconds since epoch. This property is populated by the Ably system.
|
30
|
-
#
|
31
|
-
# @return [Integer]
|
32
|
-
def timestamp
|
33
|
-
@message[:timestamp]
|
34
|
-
end
|
35
|
-
|
36
|
-
# Timestamp as {Time}. This property is populated by the Ably system.
|
37
|
-
#
|
38
|
-
# @return [Time]
|
39
|
-
def timestamp_at
|
40
|
-
raise RuntimeError, "Timestamp is missing" unless timestamp
|
41
|
-
Time.at(timestamp / 1000.0)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Unique serial number of this message within the channel
|
45
|
-
#
|
46
|
-
# @return [Integer]
|
47
|
-
def channel_serial
|
48
|
-
@message[:channel_serial]
|
49
|
-
end
|
50
|
-
|
51
|
-
# Provide a normal Hash accessor to the underlying raw message object
|
52
|
-
#
|
53
|
-
# @return [Object]
|
54
|
-
def [](key)
|
55
|
-
@message[key]
|
56
|
-
end
|
57
|
-
|
58
|
-
# Raw message object
|
59
|
-
#
|
60
|
-
# @return [Hash]
|
61
|
-
def raw_message
|
62
|
-
@message
|
63
|
-
end
|
64
|
-
|
65
|
-
def ==(other)
|
66
|
-
self.kind_of?(other.class) &&
|
67
|
-
raw_message == other.raw_message
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|