ably 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -1
- data/ably.gemspec +4 -3
- data/lib/ably.rb +6 -2
- data/lib/ably/auth.rb +24 -16
- data/lib/ably/exceptions.rb +16 -5
- data/lib/ably/{realtime/models → models}/error_info.rb +9 -11
- data/lib/ably/models/idiomatic_ruby_wrapper.rb +57 -26
- data/lib/ably/{realtime/models → models}/message.rb +45 -38
- data/lib/ably/{realtime/models → models}/nil_channel.rb +4 -4
- data/lib/ably/{rest/models/paged_resource.rb → models/paginated_resource.rb} +21 -10
- data/lib/ably/models/presence_message.rb +126 -0
- data/lib/ably/{realtime/models → models}/protocol_message.rb +76 -38
- data/lib/ably/models/token.rb +74 -0
- data/lib/ably/modules/channels_collection.rb +49 -0
- data/lib/ably/modules/conversions.rb +2 -0
- data/lib/ably/modules/event_emitter.rb +43 -8
- data/lib/ably/modules/event_machine_helpers.rb +1 -0
- data/lib/ably/modules/http_helpers.rb +9 -2
- data/lib/ably/modules/message_pack.rb +14 -0
- data/lib/ably/modules/model_common.rb +29 -0
- data/lib/ably/modules/{state.rb → state_emitter.rb} +8 -7
- data/lib/ably/realtime.rb +37 -7
- data/lib/ably/realtime/channel.rb +154 -31
- data/lib/ably/realtime/channels.rb +47 -0
- data/lib/ably/realtime/client.rb +39 -33
- data/lib/ably/realtime/client/incoming_message_dispatcher.rb +50 -21
- data/lib/ably/realtime/client/outgoing_message_dispatcher.rb +9 -11
- data/lib/ably/realtime/connection.rb +148 -79
- data/lib/ably/realtime/connection/connection_state_machine.rb +111 -0
- data/lib/ably/realtime/connection/websocket_transport.rb +161 -0
- data/lib/ably/realtime/presence.rb +270 -0
- data/lib/ably/rest.rb +14 -3
- data/lib/ably/rest/channel.rb +3 -3
- data/lib/ably/rest/channels.rb +26 -12
- data/lib/ably/rest/client.rb +42 -25
- data/lib/ably/rest/middleware/exceptions.rb +21 -23
- data/lib/ably/rest/middleware/external_exceptions.rb +8 -10
- data/lib/ably/rest/middleware/fail_if_unsupported_mime_type.rb +17 -0
- data/lib/ably/rest/middleware/parse_json.rb +9 -2
- data/lib/ably/rest/middleware/parse_message_pack.rb +6 -2
- data/lib/ably/rest/presence.rb +4 -4
- data/lib/ably/version.rb +1 -1
- data/spec/acceptance/realtime/channel_history_spec.rb +125 -0
- data/spec/acceptance/realtime/channel_spec.rb +135 -63
- data/spec/acceptance/realtime/connection_spec.rb +86 -0
- data/spec/acceptance/realtime/message_spec.rb +116 -94
- data/spec/acceptance/realtime/presence_history_spec.rb +0 -0
- data/spec/acceptance/realtime/presence_spec.rb +277 -0
- data/spec/acceptance/rest/auth_spec.rb +351 -347
- data/spec/acceptance/rest/base_spec.rb +43 -26
- data/spec/acceptance/rest/channel_spec.rb +88 -83
- data/spec/acceptance/rest/channels_spec.rb +32 -28
- data/spec/acceptance/rest/presence_spec.rb +83 -63
- data/spec/acceptance/rest/stats_spec.rb +38 -37
- data/spec/acceptance/rest/time_spec.rb +10 -6
- data/spec/integration/modules/{state_spec.rb → state_emitter_spec.rb} +16 -2
- data/spec/spec_helper.rb +14 -0
- data/spec/support/api_helper.rb +4 -0
- data/spec/support/model_helper.rb +28 -9
- data/spec/support/protocol_msgbus_helper.rb +8 -1
- data/spec/support/test_app.rb +24 -14
- data/spec/unit/{realtime → models}/error_info_spec.rb +4 -4
- data/spec/unit/models/idiomatic_ruby_wrapper_spec.rb +46 -9
- data/spec/unit/models/message_spec.rb +229 -0
- data/spec/unit/{rest/paged_resource_spec.rb → models/paginated_resource_spec.rb} +19 -11
- data/spec/unit/models/presence_message_spec.rb +230 -0
- data/spec/unit/models/protocol_message_spec.rb +280 -0
- data/spec/unit/{token_spec.rb → models/token_spec.rb} +18 -22
- data/spec/unit/modules/conversions_spec.rb +1 -1
- data/spec/unit/modules/event_emitter_spec.rb +36 -4
- data/spec/unit/realtime/channel_spec.rb +76 -2
- data/spec/unit/realtime/channels_spec.rb +50 -0
- data/spec/unit/realtime/client_spec.rb +31 -1
- data/spec/unit/realtime/connection_spec.rb +8 -15
- data/spec/unit/realtime/incoming_message_dispatcher_spec.rb +6 -6
- data/spec/unit/realtime/presence_spec.rb +100 -0
- data/spec/unit/rest/channels_spec.rb +48 -0
- metadata +72 -38
- data/lib/ably/realtime/models/shared.rb +0 -17
- data/lib/ably/rest/models/message.rb +0 -64
- data/lib/ably/rest/models/presence_message.rb +0 -21
- data/lib/ably/token.rb +0 -80
- data/spec/unit/realtime/message_spec.rb +0 -117
- data/spec/unit/realtime/protocol_message_spec.rb +0 -172
- data/spec/unit/rest/message_spec.rb +0 -75
@@ -1,75 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Ably::Rest::Models::Message do
|
4
|
-
include Ably::Modules::Conversions
|
5
|
-
context 'attributes' do
|
6
|
-
let(:unique_value) { 'unique_value' }
|
7
|
-
|
8
|
-
%w(name data client_id message_id).each do |attribute|
|
9
|
-
context "##{attribute}" do
|
10
|
-
subject { Ably::Rest::Models::Message.new({ attribute.to_sym => unique_value }) }
|
11
|
-
|
12
|
-
it "retrieves attribute :#{attribute}" do
|
13
|
-
expect(subject.public_send(attribute)).to eql(unique_value)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context '#sender_timestamp' do
|
19
|
-
subject { Ably::Rest::Models::Message.new(timestamp: as_since_epoch(Time.now)) }
|
20
|
-
it 'retrieves attribute :timestamp' do
|
21
|
-
expect(subject.sender_timestamp).to be_a(Time)
|
22
|
-
expect(subject.sender_timestamp.to_i).to be_within(1).of(Time.now.to_i)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context '#json' do
|
27
|
-
let(:attributes) { { timestamp: as_since_epoch(Time.now) } }
|
28
|
-
subject { Ably::Rest::Models::Message.new(attributes) }
|
29
|
-
|
30
|
-
it 'provides access to #json' do
|
31
|
-
expect(subject.json).to eq(attributes)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context '#[]' do
|
36
|
-
subject { Ably::Rest::Models::Message.new(unusual: 'attribute') }
|
37
|
-
|
38
|
-
it 'provides accessor method to #json' do
|
39
|
-
expect(subject[:unusual]).to eql('attribute')
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context '==' do
|
45
|
-
let(:attributes) { { client_id: 'unique' } }
|
46
|
-
|
47
|
-
it 'is true when attributes are the same' do
|
48
|
-
new_message = -> { Ably::Rest::Models::Message.new(attributes) }
|
49
|
-
expect(new_message[]).to eq(new_message[])
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'is false when attributes are not the same' do
|
53
|
-
expect(Ably::Rest::Models::Message.new(client_id: 1)).to_not eq(Ably::Rest::Models::Message.new(client_id: 2))
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'is false when class type differs' do
|
57
|
-
expect(Ably::Rest::Models::Message.new(client_id: 1)).to_not eq(nil)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context 'is immutable' do
|
62
|
-
let(:options) { { client_id: 'John' } }
|
63
|
-
subject { Ably::Rest::Models::Message.new(options) }
|
64
|
-
|
65
|
-
it 'prevents changes' do
|
66
|
-
expect { subject.json[:client_id] = 'Joe' }.to raise_error RuntimeError, /can't modify frozen Hash/
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'clones options' do
|
70
|
-
expect(subject.json[:client_id]).to eql('John')
|
71
|
-
options[:client_id] = 'Joe'
|
72
|
-
expect(subject.json[:client_id]).to eql('John')
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|