opentok 4.2.0 → 4.3.0

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +3 -3
  3. data/CHANGES.md +153 -0
  4. data/lib/opentok/archive.rb +49 -2
  5. data/lib/opentok/archives.rb +89 -4
  6. data/lib/opentok/broadcast.rb +44 -1
  7. data/lib/opentok/broadcast_list.rb +14 -0
  8. data/lib/opentok/broadcasts.rb +109 -6
  9. data/lib/opentok/client.rb +161 -0
  10. data/lib/opentok/connections.rb +1 -1
  11. data/lib/opentok/constants.rb +1 -0
  12. data/lib/opentok/opentok.rb +7 -7
  13. data/lib/opentok/sip.rb +40 -2
  14. data/lib/opentok/streams.rb +50 -1
  15. data/lib/opentok/token_generator.rb +1 -0
  16. data/lib/opentok/version.rb +1 -1
  17. data/opentok.gemspec +1 -1
  18. data/sample/Broadcast/README.md +42 -0
  19. data/sample/Broadcast/broadcast_sample.rb +15 -0
  20. data/sample/Broadcast/views/all.erb +46 -0
  21. data/sample/Broadcast/views/index.erb +16 -1
  22. data/spec/cassettes/OpenTok_Archives/adds_a_stream_to_an_archive.yml +37 -0
  23. data/spec/cassettes/OpenTok_Archives/removes_a_stream_from_an_archive.yml +37 -0
  24. data/spec/cassettes/OpenTok_Broadcasts/adds_a_stream_to_a_broadcast.yml +37 -0
  25. data/spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_all_broadcasts.yml +192 -0
  26. data/spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_broadcasts_with_an_offset.yml +117 -0
  27. data/spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_count_number_of_broadcasts.yml +92 -0
  28. data/spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_part_of_the_broadcasts_when_using_offset_and_count.yml +142 -0
  29. data/spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_session_broadcasts.yml +117 -0
  30. data/spec/cassettes/OpenTok_Broadcasts/removes_a_stream_from_a_broadcast.yml +37 -0
  31. data/spec/cassettes/OpenTok_Sip/_play_dtmf_to_connection/returns_a_200_response_code_when_passed_a_valid_dtmf_digit_string.yml +39 -0
  32. data/spec/cassettes/OpenTok_Sip/_play_dtmf_to_session/returns_a_200_response_code_when_passed_a_valid_dtmf_digit_string.yml +39 -0
  33. data/spec/cassettes/OpenTok_Sip/receives_a_valid_response.yml +2 -2
  34. data/spec/cassettes/OpenTok_Streams/disables_the_mute_state_of_a_session.yml +37 -0
  35. data/spec/cassettes/OpenTok_Streams/forces_all_current_and_future_streams_in_a_session_to_be_muted.yml +39 -0
  36. data/spec/cassettes/OpenTok_Streams/forces_all_current_and_future_streams_in_a_session_to_be_muted_except_specified_excluded_streams.yml +39 -0
  37. data/spec/cassettes/OpenTok_Streams/forces_the_specified_stream_to_be_muted.yml +39 -0
  38. data/spec/opentok/archives_spec.rb +11 -0
  39. data/spec/opentok/broadcasts_spec.rb +50 -3
  40. data/spec/opentok/connection_spec.rb +1 -1
  41. data/spec/opentok/sip_spec.rb +32 -1
  42. data/spec/opentok/streams_spec.rb +21 -1
  43. metadata +38 -5
@@ -0,0 +1,37 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: patch
5
+ uri: https://api.opentok.com/v2/project/123456/broadcast/13dbcc23-af92-4862-9184-74b21815a814/streams
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"removeStream":"12312312-3811-4726-b508-e41a0f96c68f"}'
9
+ headers:
10
+ User-Agent:
11
+ - OpenTok-Ruby-SDK/<%= version %>
12
+ X-Opentok-Auth:
13
+ - eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 204
23
+ message: No Content
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Tue, 23 Nov 2021 20:49:23 GMT
29
+ Connection:
30
+ - keep-alive
31
+ Set-Cookie:
32
+ - AWSALBTG=IVCBek0mkrwLClWNRdLjy1iFNSsOxBPlYS4DBo6ihXHl5qScay403/clceKAPEMdaMxF6eUaou388eSdkjuZ9olWCDF49IGVNCP4gmF8O9Ajvjqhh/cVuzMKL5kOrkjSgjVouTyOyAT3K4NaPfM+U6sBd7UQ0HhTHgND5lsgfSu9Y27EKj8=;
33
+ Expires=Tue, 30 Nov 2021 20:49:22 GMT; Path=/
34
+ - AWSALBTGCORS=IVCBek0mkrwLClWNRdLjy1iFNSsOxBPlYS4DBo6ihXHl5qScay403/clceKAPEMdaMxF6eUaou388eSdkjuZ9olWCDF49IGVNCP4gmF8O9Ajvjqhh/cVuzMKL5kOrkjSgjVouTyOyAT3K4NaPfM+U6sBd7UQ0HhTHgND5lsgfSu9Y27EKj8=;
35
+ Expires=Tue, 30 Nov 2021 20:49:22 GMT; Path=/; SameSite=None; Secure
36
+ recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
37
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/connection/CONNID/play-dtmf
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"digits":"0123456789*#p"}'
9
+ headers:
10
+ User-Agent:
11
+ - OpenTok-Ruby-SDK/<%= version %>
12
+ X-Opentok-Auth:
13
+ - eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Mon, 01 Nov 2021 12:27:19 GMT
29
+ Content-Type:
30
+ - application/xml
31
+ Content-Length:
32
+ - '177'
33
+ Connection:
34
+ - keep-alive
35
+ body:
36
+ encoding: UTF-8
37
+ string: ""
38
+ recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
39
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/play-dtmf
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"digits":"0123456789*#p"}'
9
+ headers:
10
+ User-Agent:
11
+ - OpenTok-Ruby-SDK/<%= version %>
12
+ X-Opentok-Auth:
13
+ - eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Mon, 01 Nov 2021 12:35:08 GMT
29
+ Content-Type:
30
+ - application/xml
31
+ Content-Length:
32
+ - '177'
33
+ Connection:
34
+ - keep-alive
35
+ body:
36
+ encoding: UTF-8
37
+ string: ""
38
+ recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
39
+ recorded_with: VCR 6.0.0
@@ -5,7 +5,7 @@ http_interactions:
5
5
  uri: https://api.opentok.com/v2/project/123456/dial
6
6
  body:
7
7
  encoding: UTF-8
8
- string: '{"sessionId":"SESSIONID","token":"TOKENID","sip":{"uri":"sip:+15128675309@acme.pstn.example.com;transport=tls","auth":{"username":"bob","password":"abc123"},"secure":"true"}}'
8
+ string: '{"sessionId":"SESSIONID","token":"TOKENID","sip":{"uri":"sip:+15128675309@acme.pstn.example.com;transport=tls","auth":{"username":"bob","password":"abc123"},"secure":"true","video":"true","observeForceMute":"true"}}'
9
9
  headers:
10
10
  User-Agent:
11
11
  - OpenTok-Ruby-SDK/<%= version %>
@@ -35,6 +35,6 @@ http_interactions:
35
35
  body:
36
36
  encoding: UTF-8
37
37
  string: '{"id":"2299ba24-a6de-417c-88f7-28da54a441cf","projectId":"123456","sessionId":"SESSIONID","connectionId":"833a7182-61a5-49d4-baae-c324b09953af","streamId":"b1963d15-537f-459a-be89-e00fc310b82b","createdAt":1492468803946,"updatedAt":1492468803946}'
38
- http_version:
38
+ http_version:
39
39
  recorded_at: Mon, 17 Apr 2017 22:40:01 GMT
40
40
  recorded_with: VCR 2.8.0
@@ -0,0 +1,37 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/mute
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"active":"false"}'
9
+ headers:
10
+ User-Agent:
11
+ - OpenTok-Ruby-SDK/<%= version %>
12
+ X-Opentok-Auth:
13
+ - eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Thu, 13 Jan 2022 15:37:24 GMT
29
+ Content-Length:
30
+ - '0'
31
+ Connection:
32
+ - close
33
+ body:
34
+ encoding: UTF-8
35
+ string: ''
36
+ recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
37
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/mute
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"active":"true"}'
9
+ headers:
10
+ User-Agent:
11
+ - OpenTok-Ruby-SDK/<%= version %>
12
+ X-Opentok-Auth:
13
+ - eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Fri, 29 Oct 2021 11:48:19 GMT
29
+ Content-Type:
30
+ - application/json
31
+ Content-Length:
32
+ - '0'
33
+ Connection:
34
+ - close
35
+ body:
36
+ encoding: UTF-8
37
+ string: ''
38
+ recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
39
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/mute
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"excludedStreams":["b1963d15-537f-459a-be89-e00fc310b82b"],"active":"true"}'
9
+ headers:
10
+ User-Agent:
11
+ - OpenTok-Ruby-SDK/<%= version %>
12
+ X-Opentok-Auth:
13
+ - eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Fri, 29 Oct 2021 12:01:42 GMT
29
+ Content-Type:
30
+ - application/json
31
+ Content-Length:
32
+ - '0'
33
+ Connection:
34
+ - keep-alive
35
+ body:
36
+ encoding: UTF-8
37
+ string: ''
38
+ recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
39
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.opentok.com/v2/project/123456/session/SESSIONID/stream/STREAMID/mute
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - OpenTok-Ruby-SDK/<%= version %>
12
+ X-Opentok-Auth:
13
+ - eyJpc3QiOiJwcm9qZWN0IiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiIxMjM0NTYiLCJpYXQiOjE0OTI1MTA2NjAsImV4cCI6MTQ5MjUxMDk2MH0.BplMVhJWx4ld7KLKXqEmow6MjNPPFw9W8IHCMfeb120
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Server:
26
+ - nginx
27
+ Date:
28
+ - Fri, 29 Oct 2021 11:01:54 GMT
29
+ Content-Type:
30
+ - application/json
31
+ Content-Length:
32
+ - '0'
33
+ Connection:
34
+ - keep-alive
35
+ body:
36
+ encoding: UTF-8
37
+ string: ''
38
+ recorded_at: Tue, 18 Apr 2017 10:17:40 GMT
39
+ recorded_with: VCR 6.0.0
@@ -259,4 +259,15 @@ describe OpenTok::Archives do
259
259
  it { should raise_error(OpenTok::OpenTokError) }
260
260
  end
261
261
 
262
+ it "adds a stream to an archive", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
263
+ opts = {}
264
+ response = archives.add_stream(started_archive_id, '12312312-3811-4726-b508-e41a0f96c68f', opts)
265
+ expect(response.code).to eq(204)
266
+ end
267
+
268
+ it "removes a stream from an archive", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
269
+ response = archives.remove_stream(started_archive_id, '12312312-3811-4726-b508-e41a0f96c68f')
270
+ expect(response.code).to eq(204)
271
+ end
272
+
262
273
  end
@@ -157,7 +157,7 @@ describe OpenTok::Broadcasts do
157
157
  stub_request(:put, "https://api.opentok.com/v2/project/#{api_key}/broadcast/#{started_broadcast_id}/layout").
158
158
  with(body: {type: 'custom', stylesheet: 'stream {float: left; height: 100%; width: 33.33%;}'}).
159
159
  to_return(status: 200)
160
-
160
+
161
161
  response = broadcast.layout(started_broadcast_id, {
162
162
  type: "custom",
163
163
  stylesheet: "stream {float: left; height: 100%; width: 33.33%;}"
@@ -205,7 +205,7 @@ describe OpenTok::Broadcasts do
205
205
  it "changes the layout of a broadcast", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
206
206
  stub_request(:put, "https://api.opentok.com/v2/project/#{api_key}/broadcast/#{started_broadcast_id}/layout").
207
207
  to_return(status: 200)
208
-
208
+
209
209
  response = broadcast.layout(started_broadcast_id, {
210
210
  :type => "verticalPresentation"
211
211
  })
@@ -215,7 +215,7 @@ describe OpenTok::Broadcasts do
215
215
  it "changes the screenshare option in the layout of a broadcast", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
216
216
  stub_request(:put, "https://api.opentok.com/v2/project/#{api_key}/broadcast/#{started_broadcast_id}/layout").
217
217
  to_return(status: 200)
218
-
218
+
219
219
  response = broadcast.layout(started_broadcast_id, {
220
220
  :type => "bestFit",
221
221
  :screenshare_type => "bestFit"
@@ -223,4 +223,51 @@ describe OpenTok::Broadcasts do
223
223
  expect(response).not_to be_nil
224
224
  end
225
225
 
226
+ it "adds a stream to a broadcast", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
227
+ opts = {}
228
+ response = broadcast.add_stream(started_broadcast_id, '12312312-3811-4726-b508-e41a0f96c68f', opts)
229
+ expect(response.code).to eq(204)
230
+ end
231
+
232
+ it "removes a stream from a broadcast", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" } } do
233
+ response = broadcast.remove_stream(started_broadcast_id, '12312312-3811-4726-b508-e41a0f96c68f')
234
+ expect(response.code).to eq(204)
235
+ end
236
+
237
+ context "for many broadcasts" do
238
+ it "should return all broadcasts", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
239
+ broadcast_list = broadcast.all
240
+ expect(broadcast_list).to be_an_instance_of OpenTok::BroadcastList
241
+ expect(broadcast_list.total).to eq 6
242
+ expect(broadcast_list.count).to eq 6
243
+ end
244
+
245
+ it "should return broadcasts with an offset", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
246
+ broadcast_list = broadcast.all :offset => 3
247
+ expect(broadcast_list).to be_an_instance_of OpenTok::BroadcastList
248
+ expect(broadcast_list.total).to eq 3
249
+ expect(broadcast_list.count).to eq 3
250
+ end
251
+
252
+ it "should return count number of broadcasts", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
253
+ broadcast_list = broadcast.all :count => 2
254
+ expect(broadcast_list).to be_an_instance_of OpenTok::BroadcastList
255
+ expect(broadcast_list.count).to eq 2
256
+ expect(broadcast_list.count).to eq 2
257
+ end
258
+
259
+ it "should return part of the broadcasts when using offset and count", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
260
+ broadcast_list = broadcast.all :count => 4, :offset => 2
261
+ expect(broadcast_list).to be_an_instance_of OpenTok::BroadcastList
262
+ expect(broadcast_list.count).to eq 4
263
+ expect(broadcast_list.count).to eq 4
264
+ end
265
+
266
+ it "should return session broadcasts", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
267
+ broadcast_list = broadcast.all :sessionId => session_id
268
+ expect(broadcast_list).to be_an_instance_of OpenTok::BroadcastList
269
+ expect(broadcast_list.total).to eq 3
270
+ expect(broadcast_list.count).to eq 3
271
+ end
272
+ end
226
273
  end
@@ -35,4 +35,4 @@ describe OpenTok::Connections do
35
35
  response = connection.forceDisconnect(session_id, connection_id)
36
36
  expect(response).not_to be_nil
37
37
  end
38
- end
38
+ end
@@ -12,20 +12,51 @@ describe OpenTok::Sip do
12
12
  let(:api_key) { "123456" }
13
13
  let(:api_secret) { "1234567890abcdef1234567890abcdef1234567890" }
14
14
  let(:session_id) { "SESSIONID" }
15
+ let(:connection_id) { "CONNID" }
15
16
  let(:expiring_token) { "TOKENID" }
16
17
  let(:sip_uri) { "sip:+15128675309@acme.pstn.example.com;transport=tls" }
17
18
  let(:sip_username) { "bob" }
18
19
  let(:sip_password) { "abc123" }
19
20
  let(:opentok) { OpenTok::OpenTok.new api_key, api_secret }
20
21
  let(:sip) { opentok.sip }
22
+ let(:valid_dtmf_digits) { "0123456789*#p" }
23
+ let(:invalid_dtmf_digits) { "0123456789*#pabc" }
21
24
  subject { sip }
22
25
 
23
26
  it "receives a valid response", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
24
27
  opts = { "auth" => { "username" => sip_username,
25
28
  "password" => sip_password },
26
- "secure" => "true"
29
+ "secure" => "true",
30
+ "video" => "true",
31
+ "observe_force_mute" => "true"
27
32
  }
28
33
  response = sip.dial(session_id, expiring_token, sip_uri, opts)
29
34
  expect(response).not_to be_nil
30
35
  end
36
+
37
+ describe "#play_dtmf_to_connection" do
38
+ it "raises an ArgumentError when passed an invalid dtmf digit string" do
39
+ expect {
40
+ sip.play_dtmf_to_connection(session_id, connection_id, invalid_dtmf_digits)
41
+ }.to raise_error(ArgumentError)
42
+ end
43
+
44
+ it "returns a 200 response code when passed a valid dtmf digit string", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
45
+ response = sip.play_dtmf_to_connection(session_id, connection_id, valid_dtmf_digits)
46
+ expect(response.code).to eq(200)
47
+ end
48
+ end
49
+
50
+ describe "#play_dtmf_to_session" do
51
+ it "raises an ArgumentError when passed an invalid dtmf digit string" do
52
+ expect {
53
+ sip.play_dtmf_to_session(session_id, invalid_dtmf_digits)
54
+ }.to raise_error(ArgumentError)
55
+ end
56
+
57
+ it "returns a 200 response code when passed a valid dtmf digit string", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
58
+ response = sip.play_dtmf_to_session(session_id, valid_dtmf_digits)
59
+ expect(response.code).to eq(200)
60
+ end
61
+ end
31
62
  end
@@ -72,4 +72,24 @@ describe OpenTok::Streams do
72
72
  response = streams.layout(session_id, streams_list)
73
73
  expect(response).not_to be_nil
74
74
  end
75
- end
75
+
76
+ it "forces the specified stream to be muted", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
77
+ response = streams.force_mute(session_id, stream_id)
78
+ expect(response.code).to eq(200)
79
+ end
80
+
81
+ it "forces all current and future streams in a session to be muted", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
82
+ response = streams.force_mute_all(session_id)
83
+ expect(response.code).to eq(200)
84
+ end
85
+
86
+ it "forces all current and future streams in a session to be muted except specified excluded streams", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
87
+ response = streams.force_mute_all(session_id, { "excludedStreams" => ["b1963d15-537f-459a-be89-e00fc310b82b"] })
88
+ expect(response.code).to eq(200)
89
+ end
90
+
91
+ it "disables the 'mute state' of a session", :vcr => { :erb => { :version => OpenTok::VERSION + "-Ruby-Version-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"} } do
92
+ response = streams.disable_force_mute(session_id)
93
+ expect(response.code).to eq(200)
94
+ end
95
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentok
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stijn Mathysen
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2021-01-28 00:00:00.000000000 Z
15
+ date: 2022-02-02 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler
@@ -34,14 +34,14 @@ dependencies:
34
34
  requirements:
35
35
  - - "~>"
36
36
  - !ruby/object:Gem::Version
37
- version: 12.0.0
37
+ version: 12.3.3
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  requirements:
42
42
  - - "~>"
43
43
  - !ruby/object:Gem::Version
44
- version: 12.0.0
44
+ version: 12.3.3
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: rspec
47
47
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +174,7 @@ files:
174
174
  - ".github/workflows/metrics.yml"
175
175
  - ".gitignore"
176
176
  - ".yardopts"
177
+ - CHANGES.md
177
178
  - CODE_OF_CONDUCT.md
178
179
  - CONTRIBUTING.md
179
180
  - DEVELOPING.md
@@ -186,6 +187,7 @@ files:
186
187
  - lib/opentok/archive_list.rb
187
188
  - lib/opentok/archives.rb
188
189
  - lib/opentok/broadcast.rb
190
+ - lib/opentok/broadcast_list.rb
189
191
  - lib/opentok/broadcasts.rb
190
192
  - lib/opentok/client.rb
191
193
  - lib/opentok/connections.rb
@@ -222,6 +224,7 @@ files:
222
224
  - sample/Broadcast/public/css/sample.css
223
225
  - sample/Broadcast/public/js/host.js
224
226
  - sample/Broadcast/public/js/participant.js
227
+ - sample/Broadcast/views/all.erb
225
228
  - sample/Broadcast/views/host.erb
226
229
  - sample/Broadcast/views/index.erb
227
230
  - sample/Broadcast/views/layout.erb
@@ -231,9 +234,11 @@ files:
231
234
  - sample/HelloWorld/hello_world.rb
232
235
  - sample/HelloWorld/public/js/helloworld.js
233
236
  - sample/HelloWorld/views/index.erb
237
+ - spec/cassettes/OpenTok_Archives/adds_a_stream_to_an_archive.yml
234
238
  - spec/cassettes/OpenTok_Archives/calls_layout_on_archive_object.yml
235
239
  - spec/cassettes/OpenTok_Archives/changes_the_layout_of_an_archive.yml
236
240
  - spec/cassettes/OpenTok_Archives/http_client_errors/.yml
241
+ - spec/cassettes/OpenTok_Archives/removes_a_stream_from_an_archive.yml
237
242
  - spec/cassettes/OpenTok_Archives/should_create_archives.yml
238
243
  - spec/cassettes/OpenTok_Archives/should_create_audio_only_archives.yml
239
244
  - spec/cassettes/OpenTok_Archives/should_create_custom_layout_archives.yml
@@ -252,10 +257,17 @@ files:
252
257
  - spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_count_number_of_archives.yml
253
258
  - spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_part_of_the_archives_when_using_offset_and_count.yml
254
259
  - spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_session_archives.yml
260
+ - spec/cassettes/OpenTok_Broadcasts/adds_a_stream_to_a_broadcast.yml
255
261
  - spec/cassettes/OpenTok_Broadcasts/calls_layout_on_broadcast_object.yml
256
262
  - spec/cassettes/OpenTok_Broadcasts/changes_the_layout_of_a_broadcast.yml
257
263
  - spec/cassettes/OpenTok_Broadcasts/fetches_a_hls_broadcast_url.yml
258
264
  - spec/cassettes/OpenTok_Broadcasts/finds_a_broadcast.yml
265
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_all_broadcasts.yml
266
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_broadcasts_with_an_offset.yml
267
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_count_number_of_broadcasts.yml
268
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_part_of_the_broadcasts_when_using_offset_and_count.yml
269
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_session_broadcasts.yml
270
+ - spec/cassettes/OpenTok_Broadcasts/removes_a_stream_from_a_broadcast.yml
259
271
  - spec/cassettes/OpenTok_Broadcasts/starts_a_rtmp_broadcast.yml
260
272
  - spec/cassettes/OpenTok_Broadcasts/stops_a_broadcast.yml
261
273
  - spec/cassettes/OpenTok_Connections/forces_a_connection_to_be_terminated.yml
@@ -270,7 +282,13 @@ files:
270
282
  - spec/cassettes/OpenTok_OpenTok/when_initialized_properly/with_an_addendum_to_the_user_agent_string/should_append_the_addendum_to_the_user_agent_header.yml
271
283
  - spec/cassettes/OpenTok_Signals/receives_a_valid_response_for_a_connection.yml
272
284
  - spec/cassettes/OpenTok_Signals/receives_a_valid_response_for_all_connections.yml
285
+ - spec/cassettes/OpenTok_Sip/_play_dtmf_to_connection/returns_a_200_response_code_when_passed_a_valid_dtmf_digit_string.yml
286
+ - spec/cassettes/OpenTok_Sip/_play_dtmf_to_session/returns_a_200_response_code_when_passed_a_valid_dtmf_digit_string.yml
273
287
  - spec/cassettes/OpenTok_Sip/receives_a_valid_response.yml
288
+ - spec/cassettes/OpenTok_Streams/disables_the_mute_state_of_a_session.yml
289
+ - spec/cassettes/OpenTok_Streams/forces_all_current_and_future_streams_in_a_session_to_be_muted.yml
290
+ - spec/cassettes/OpenTok_Streams/forces_all_current_and_future_streams_in_a_session_to_be_muted_except_specified_excluded_streams.yml
291
+ - spec/cassettes/OpenTok_Streams/forces_the_specified_stream_to_be_muted.yml
274
292
  - spec/cassettes/OpenTok_Streams/get_all_streams_information.yml
275
293
  - spec/cassettes/OpenTok_Streams/get_specific_stream_information.yml
276
294
  - spec/cassettes/OpenTok_Streams/layout_working_on_two_stream_list.yml
@@ -306,14 +324,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
306
324
  - !ruby/object:Gem::Version
307
325
  version: '0'
308
326
  requirements: []
309
- rubygems_version: 3.1.4
327
+ rubygems_version: 3.3.6
310
328
  signing_key:
311
329
  specification_version: 4
312
330
  summary: Ruby gem for the OpenTok API
313
331
  test_files:
332
+ - spec/cassettes/OpenTok_Archives/adds_a_stream_to_an_archive.yml
314
333
  - spec/cassettes/OpenTok_Archives/calls_layout_on_archive_object.yml
315
334
  - spec/cassettes/OpenTok_Archives/changes_the_layout_of_an_archive.yml
316
335
  - spec/cassettes/OpenTok_Archives/http_client_errors/.yml
336
+ - spec/cassettes/OpenTok_Archives/removes_a_stream_from_an_archive.yml
317
337
  - spec/cassettes/OpenTok_Archives/should_create_archives.yml
318
338
  - spec/cassettes/OpenTok_Archives/should_create_audio_only_archives.yml
319
339
  - spec/cassettes/OpenTok_Archives/should_create_custom_layout_archives.yml
@@ -332,10 +352,17 @@ test_files:
332
352
  - spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_count_number_of_archives.yml
333
353
  - spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_part_of_the_archives_when_using_offset_and_count.yml
334
354
  - spec/cassettes/OpenTok_Archives/when_many_archives_are_created/should_return_session_archives.yml
355
+ - spec/cassettes/OpenTok_Broadcasts/adds_a_stream_to_a_broadcast.yml
335
356
  - spec/cassettes/OpenTok_Broadcasts/calls_layout_on_broadcast_object.yml
336
357
  - spec/cassettes/OpenTok_Broadcasts/changes_the_layout_of_a_broadcast.yml
337
358
  - spec/cassettes/OpenTok_Broadcasts/fetches_a_hls_broadcast_url.yml
338
359
  - spec/cassettes/OpenTok_Broadcasts/finds_a_broadcast.yml
360
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_all_broadcasts.yml
361
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_broadcasts_with_an_offset.yml
362
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_count_number_of_broadcasts.yml
363
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_part_of_the_broadcasts_when_using_offset_and_count.yml
364
+ - spec/cassettes/OpenTok_Broadcasts/for_many_broadcasts/should_return_session_broadcasts.yml
365
+ - spec/cassettes/OpenTok_Broadcasts/removes_a_stream_from_a_broadcast.yml
339
366
  - spec/cassettes/OpenTok_Broadcasts/starts_a_rtmp_broadcast.yml
340
367
  - spec/cassettes/OpenTok_Broadcasts/stops_a_broadcast.yml
341
368
  - spec/cassettes/OpenTok_Connections/forces_a_connection_to_be_terminated.yml
@@ -350,7 +377,13 @@ test_files:
350
377
  - spec/cassettes/OpenTok_OpenTok/when_initialized_properly/with_an_addendum_to_the_user_agent_string/should_append_the_addendum_to_the_user_agent_header.yml
351
378
  - spec/cassettes/OpenTok_Signals/receives_a_valid_response_for_a_connection.yml
352
379
  - spec/cassettes/OpenTok_Signals/receives_a_valid_response_for_all_connections.yml
380
+ - spec/cassettes/OpenTok_Sip/_play_dtmf_to_connection/returns_a_200_response_code_when_passed_a_valid_dtmf_digit_string.yml
381
+ - spec/cassettes/OpenTok_Sip/_play_dtmf_to_session/returns_a_200_response_code_when_passed_a_valid_dtmf_digit_string.yml
353
382
  - spec/cassettes/OpenTok_Sip/receives_a_valid_response.yml
383
+ - spec/cassettes/OpenTok_Streams/disables_the_mute_state_of_a_session.yml
384
+ - spec/cassettes/OpenTok_Streams/forces_all_current_and_future_streams_in_a_session_to_be_muted.yml
385
+ - spec/cassettes/OpenTok_Streams/forces_all_current_and_future_streams_in_a_session_to_be_muted_except_specified_excluded_streams.yml
386
+ - spec/cassettes/OpenTok_Streams/forces_the_specified_stream_to_be_muted.yml
354
387
  - spec/cassettes/OpenTok_Streams/get_all_streams_information.yml
355
388
  - spec/cassettes/OpenTok_Streams/get_specific_stream_information.yml
356
389
  - spec/cassettes/OpenTok_Streams/layout_working_on_two_stream_list.yml