vzaar_api 2.0.0 → 2.0.1

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 (56) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/README.md +2 -2
  4. data/lib/vzaar_api/abstract.rb +1 -1
  5. data/lib/vzaar_api/lib/active_object.rb +9 -4
  6. data/lib/vzaar_api/lib/api.rb +2 -1
  7. data/lib/vzaar_api/lib/has_resource_url.rb +7 -4
  8. data/lib/vzaar_api/lib/paged_resource.rb +7 -2
  9. data/lib/vzaar_api/lib/will_paginate.rb +5 -1
  10. data/lib/vzaar_api/playlist.rb +1 -1
  11. data/lib/vzaar_api/signature/abstract.rb +17 -4
  12. data/lib/vzaar_api/signature/multipart.rb +1 -1
  13. data/lib/vzaar_api/signature/single.rb +1 -1
  14. data/lib/vzaar_api/strategy/image/abstract.rb +25 -0
  15. data/lib/vzaar_api/strategy/image/create.rb +21 -0
  16. data/lib/vzaar_api/strategy/image/update.rb +11 -0
  17. data/lib/vzaar_api/strategy/subtitle/create.rb +36 -0
  18. data/lib/vzaar_api/upload/s3.rb +2 -4
  19. data/lib/vzaar_api/version.rb +1 -1
  20. data/lib/vzaar_api/video/subtitle.rb +38 -0
  21. data/lib/vzaar_api/video.rb +8 -1
  22. data/lib/vzaar_api.rb +5 -0
  23. data/spec/fixtures/vcr_cassettes/signature/multipart_201.yml +20 -20
  24. data/spec/fixtures/vcr_cassettes/signature/multipart_422.yml +12 -12
  25. data/spec/fixtures/vcr_cassettes/signature/single_201.yml +20 -20
  26. data/spec/fixtures/vcr_cassettes/signature/single_422.yml +11 -11
  27. data/spec/fixtures/vcr_cassettes/subtitles/create_201.yml +58 -0
  28. data/spec/fixtures/vcr_cassettes/subtitles/create_422.yml +48 -0
  29. data/spec/fixtures/vcr_cassettes/subtitles/create_from_file_201.yml +63 -0
  30. data/spec/fixtures/vcr_cassettes/subtitles/delete_204.yml +52 -0
  31. data/spec/fixtures/vcr_cassettes/subtitles/paginate.yml +58 -0
  32. data/spec/fixtures/vcr_cassettes/subtitles/paginate_first.yml +58 -0
  33. data/spec/fixtures/vcr_cassettes/subtitles/paginate_last.yml +113 -0
  34. data/spec/fixtures/vcr_cassettes/subtitles/paginate_next.yml +113 -0
  35. data/spec/fixtures/vcr_cassettes/subtitles/update_200.yml +113 -0
  36. data/spec/fixtures/vcr_cassettes/subtitles/update_422.yml +104 -0
  37. data/spec/fixtures/vcr_cassettes/upload/multipart_201.yml +162 -144
  38. data/spec/fixtures/vcr_cassettes/upload/multipart_403.yml +12 -116545
  39. data/spec/fixtures/vcr_cassettes/upload/single_201.yml +12 -23353
  40. data/spec/fixtures/vcr_cassettes/upload/single_403.yml +12 -23341
  41. data/spec/fixtures/vcr_cassettes/videos/create/link_201.yml +24 -22
  42. data/spec/fixtures/vcr_cassettes/videos/create/path_201.yml +55 -23394
  43. data/spec/fixtures/vcr_cassettes/videos/image_frame_202.yml +61 -0
  44. data/spec/fixtures/vcr_cassettes/videos/image_frame_422.yml +48 -0
  45. data/spec/fixtures/vcr_cassettes/videos/image_upload_frame_202.yml +62 -0
  46. data/spec/fixtures/vcr_cassettes/videos/image_upload_frame_422.yml +49 -0
  47. data/spec/support/files/drex.jpg +0 -0
  48. data/spec/support/files/fr.vtt +4 -0
  49. data/spec/support/helpers.rb +2 -3
  50. data/spec/support/shared_examples.rb +23 -0
  51. data/spec/vzaar_api/signature/multipart_spec.rb +34 -21
  52. data/spec/vzaar_api/signature/single_spec.rb +27 -16
  53. data/spec/vzaar_api/subtitle_spec.rb +206 -0
  54. data/spec/vzaar_api/upload/s3_spec.rb +40 -37
  55. data/spec/vzaar_api/video_spec.rb +55 -2
  56. metadata +45 -4
@@ -1,9 +1,17 @@
1
1
  module VzaarApi
2
2
  module Upload
3
3
  describe S3 do
4
-
5
4
  subject { described_class.new attrs, signature }
6
5
 
6
+ shared_examples "handling AWS error" do |cassette_name|
7
+ it 'handles an AWS 403 error' do
8
+ VCR.use_cassette(cassette_name) do
9
+ err_msg = 'X-Amz-Date must be formated via ISO8601 Long format'
10
+ expect { subject.execute }.to raise_error(Error, err_msg)
11
+ end
12
+ end
13
+ end
14
+
7
15
  describe '#execute' do
8
16
  context 'when multipart' do
9
17
  let(:attrs) do
@@ -12,27 +20,29 @@ module VzaarApi
12
20
 
13
21
  let(:signature_attrs) do
14
22
  {
15
- access_key_id: 'access_key_id',
16
- key: 'vzaar/t22/063/source/t22063bd228834adc8b9c7d5fb320b2b3o/${filename}',
23
+ key: "vzaar/tEW/AYG/source/tEWAYGhS8O5M/${filename}",
17
24
  acl: 'private',
18
- policy: 'policy',
19
- signature: 'signature',
25
+ policy: "policy",
20
26
  success_action_status: '201',
21
- content_type: 'binary/octet-stream',
22
- guid: 't22063bd228834adc8b9c7d5fb320b2b3o',
27
+ guid: "tEWAYGhS8O5M",
23
28
  bucket: 'vzaar-upload-development',
24
29
  upload_hostname: 'https://vzaar-upload-development.s3.amazonaws.com',
25
30
  part_size: '5MB',
26
31
  part_size_in_bytes: 5242880,
27
- parts: 3
28
- }
32
+ parts: 3,
33
+ :"x-amz-credential"=>"xxx/us-east-1/s3/aws4_request",
34
+ :"x-amz-algorithm"=>"AWS4-HMAC-SHA256",
35
+ :"x-amz-date"=>"date",
36
+ :"x-amz-signature"=>"sig"}
29
37
  end
30
38
 
31
- let(:signature) { Signature::Multipart.new signature_attrs.merge(signature_attrs) }
39
+ let(:signature) do
40
+ Signature::Multipart.new signature_attrs.merge(signature_attrs)
41
+ end
32
42
 
33
43
  context 'when successful' do
34
44
  let(:expected_result) do
35
- { guid: 't22063bd228834adc8b9c7d5fb320b2b3o', title: 'video-title' }
45
+ { guid: "tEWAYGhS8O5M", title: 'video-title' }
36
46
  end
37
47
 
38
48
  it 'uploads the video file' do
@@ -43,15 +53,11 @@ module VzaarApi
43
53
  end
44
54
 
45
55
  context 'when unsuccessful' do
46
- it 'handles an AWS 403 error' do
47
- VCR.use_cassette('upload/multipart_403') do
48
- expect { subject.execute }.to raise_error(
49
- Error, 'The AWS Access Key Id you provided does not exist in our records.')
50
- end
51
- end
56
+ it_behaves_like "handling AWS error", 'upload/multipart_403'
52
57
 
53
58
  it 'handles an unexpected error' do
54
- allow(subject).to receive(:http_client).and_raise(SocketError, 'error message')
59
+ allow(subject)
60
+ .to receive(:http_client).and_raise(SocketError, 'error message')
55
61
  expect { subject.execute }.to raise_error(Error, 'error message')
56
62
  end
57
63
  end
@@ -61,19 +67,19 @@ module VzaarApi
61
67
  let(:attrs) do
62
68
  { path: 'spec/support/files/video-1.0MB.mp4', title: 'video-title' }
63
69
  end
64
-
65
70
  let(:signature_attrs) do
66
71
  {
67
- access_key_id: 'access_key_id',
68
- key: "vzaar/t20/d72/source/t20d722afb9294989bda5f7cf01b11346v/${filename}",
72
+ key: "vzaar/tDQ/Upo/source/tDQUpoW-63JI/${filename}",
69
73
  acl: 'private',
70
- policy: 'policy',
71
- signature: 'signature',
72
- success_action_status: "201",
73
- content_type: "binary/octet-stream",
74
- guid: "t20d722afb9294989bda5f7cf01b11346v",
75
- bucket: "vzaar-upload-development",
76
- upload_hostname: "https://vzaar-upload-development.s3.amazonaws.com"
74
+ policy: "policy",
75
+ success_action_status: '201',
76
+ guid: "tDQUpoW-63JI",
77
+ bucket: 'vzaar-upload-development',
78
+ upload_hostname: 'https://vzaar-upload-development.s3.amazonaws.com',
79
+ :"x-amz-credential"=> "xxxxx/us-east-1/s3/aws4_request",
80
+ :"x-amz-algorithm"=>"AWS4-HMAC-SHA256",
81
+ :"x-amz-date"=>"date",
82
+ :"x-amz-signature"=>"signature"
77
83
  }
78
84
  end
79
85
 
@@ -81,7 +87,7 @@ module VzaarApi
81
87
 
82
88
  context 'when successful' do
83
89
  let(:expected_result) do
84
- { guid: 't20d722afb9294989bda5f7cf01b11346v', title: 'video-title' }
90
+ { guid: "tDQUpoW-63JI", title: 'video-title' }
85
91
  end
86
92
 
87
93
  it 'uploads the video file' do
@@ -92,21 +98,18 @@ module VzaarApi
92
98
  end
93
99
 
94
100
  context 'when unsuccessful' do
95
- it 'handles an AWS 403 error' do
96
- VCR.use_cassette('upload/single_403') do
97
- expect { subject.execute }.to raise_error(
98
- Error, 'The AWS Access Key Id you provided does not exist in our records.')
99
- end
100
- end
101
+ it_behaves_like "handling AWS error", 'upload/single_403'
101
102
 
102
103
  it 'handles an unexpected error' do
103
- allow(subject).to receive(:http_client).and_raise(SocketError, 'error message')
104
+ allow(subject)
105
+ .to(receive(:http_client))
106
+ .and_raise(SocketError, 'error message')
107
+
104
108
  expect { subject.execute }.to raise_error(Error, 'error message')
105
109
  end
106
110
  end
107
111
  end
108
112
  end
109
-
110
113
  end
111
114
  end
112
115
  end
@@ -154,7 +154,7 @@ module VzaarApi
154
154
  it 'returns the new video' do
155
155
  VCR.use_cassette('videos/create/path_201') do
156
156
  video = described_class.create(attrs)
157
- expect(video.id).to eq 7574827
157
+ expect(video.id).to eq 1293123212
158
158
  end
159
159
  end
160
160
  end
@@ -169,7 +169,7 @@ module VzaarApi
169
169
  it 'returns the new video' do
170
170
  VCR.use_cassette('videos/create/link_201') do
171
171
  video = described_class.create(attrs)
172
- expect(video.id).to eq 7574826
172
+ expect(video.id).to eq 1293123213
173
173
  end
174
174
  end
175
175
  end
@@ -244,5 +244,58 @@ module VzaarApi
244
244
  end
245
245
  end
246
246
 
247
+ describe ".set_image_frame" do
248
+ let(:video_id) { 18322783 }
249
+
250
+ context "when params are valid" do
251
+ it 'returns the existing video' do
252
+ VCR.use_cassette('videos/image_frame_202') do
253
+ video = described_class.set_image_frame(video_id, time: 3)
254
+ expect(video.id).to eq video_id
255
+ end
256
+ end
257
+ end
258
+
259
+ context 'when invalid params are provided' do
260
+ it 'raises an error' do
261
+ VCR.use_cassette('videos/image_frame_422') do
262
+ expect { described_class.set_image_frame(video_id, {}) }
263
+ .to raise_error(Error, 'Invalid parameters: time is missing')
264
+ end
265
+ end
266
+ end
267
+ end
268
+
269
+ describe ".upload_image_frame" do
270
+ let(:video_id) { 18322783 }
271
+ let(:path) { 'spec/support/files/drex.jpg' }
272
+
273
+ context "when params are valid" do
274
+ it 'returns the existing video' do
275
+ VCR.use_cassette('videos/image_upload_frame_202') do
276
+ video = described_class.upload_image_frame(video_id, path: path)
277
+ expect(video.id).to eq video_id
278
+ end
279
+ end
280
+ end
281
+
282
+ context 'when path param is missing' do
283
+ it 'raises an error' do
284
+ expect { described_class.upload_image_frame(video_id, {}) }
285
+ .to raise_error(Error, 'Invalid parameters: path is missing')
286
+ end
287
+ end
288
+
289
+ context 'when file is too big' do
290
+ let(:path) { 'spec/support/files/video-12.0MB.mp4' }
291
+
292
+ it 'raises an error' do
293
+ VCR.use_cassette('videos/image_upload_frame_422') do
294
+ expect { described_class.upload_image_frame(video_id, path: path) }
295
+ .to raise_error(Error, 'File size exceeded: Max 10MB allowed')
296
+ end
297
+ end
298
+ end
299
+ end
247
300
  end
248
301
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vzaar_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - vzaar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-13 00:00:00.000000000 Z
11
+ date: 2019-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -221,11 +221,16 @@ files:
221
221
  - lib/vzaar_api/signature/factory.rb
222
222
  - lib/vzaar_api/signature/multipart.rb
223
223
  - lib/vzaar_api/signature/single.rb
224
+ - lib/vzaar_api/strategy/image/abstract.rb
225
+ - lib/vzaar_api/strategy/image/create.rb
226
+ - lib/vzaar_api/strategy/image/update.rb
227
+ - lib/vzaar_api/strategy/subtitle/create.rb
224
228
  - lib/vzaar_api/strategy/video/create.rb
225
229
  - lib/vzaar_api/upload/s3.rb
226
230
  - lib/vzaar_api/upload/virtual_file.rb
227
231
  - lib/vzaar_api/version.rb
228
232
  - lib/vzaar_api/video.rb
233
+ - lib/vzaar_api/video/subtitle.rb
229
234
  - spec/fixtures/vcr_cassettes/categories/each_item.yml
230
235
  - spec/fixtures/vcr_cassettes/categories/find.yml
231
236
  - spec/fixtures/vcr_cassettes/categories/find_404.yml
@@ -269,6 +274,16 @@ files:
269
274
  - spec/fixtures/vcr_cassettes/signature/multipart_422.yml
270
275
  - spec/fixtures/vcr_cassettes/signature/single_201.yml
271
276
  - spec/fixtures/vcr_cassettes/signature/single_422.yml
277
+ - spec/fixtures/vcr_cassettes/subtitles/create_201.yml
278
+ - spec/fixtures/vcr_cassettes/subtitles/create_422.yml
279
+ - spec/fixtures/vcr_cassettes/subtitles/create_from_file_201.yml
280
+ - spec/fixtures/vcr_cassettes/subtitles/delete_204.yml
281
+ - spec/fixtures/vcr_cassettes/subtitles/paginate.yml
282
+ - spec/fixtures/vcr_cassettes/subtitles/paginate_first.yml
283
+ - spec/fixtures/vcr_cassettes/subtitles/paginate_last.yml
284
+ - spec/fixtures/vcr_cassettes/subtitles/paginate_next.yml
285
+ - spec/fixtures/vcr_cassettes/subtitles/update_200.yml
286
+ - spec/fixtures/vcr_cassettes/subtitles/update_422.yml
272
287
  - spec/fixtures/vcr_cassettes/upload/multipart_201.yml
273
288
  - spec/fixtures/vcr_cassettes/upload/multipart_403.yml
274
289
  - spec/fixtures/vcr_cassettes/upload/single_201.yml
@@ -282,16 +297,23 @@ files:
282
297
  - spec/fixtures/vcr_cassettes/videos/delete_204.yml
283
298
  - spec/fixtures/vcr_cassettes/videos/find.yml
284
299
  - spec/fixtures/vcr_cassettes/videos/find_404.yml
300
+ - spec/fixtures/vcr_cassettes/videos/image_frame_202.yml
301
+ - spec/fixtures/vcr_cassettes/videos/image_frame_422.yml
302
+ - spec/fixtures/vcr_cassettes/videos/image_upload_frame_202.yml
303
+ - spec/fixtures/vcr_cassettes/videos/image_upload_frame_422.yml
285
304
  - spec/fixtures/vcr_cassettes/videos/paginate_first.yml
286
305
  - spec/fixtures/vcr_cassettes/videos/paginate_last.yml
287
306
  - spec/fixtures/vcr_cassettes/videos/paginate_next.yml
288
307
  - spec/fixtures/vcr_cassettes/videos/paginate_previous.yml
289
308
  - spec/spec_helper.rb
309
+ - spec/support/files/drex.jpg
310
+ - spec/support/files/fr.vtt
290
311
  - spec/support/files/video-1.0MB.mp4
291
312
  - spec/support/files/video-12.0MB.mp4
292
313
  - spec/support/files/video-4.9MB.mp4
293
314
  - spec/support/files/video-5.0MB.mp4
294
315
  - spec/support/helpers.rb
316
+ - spec/support/shared_examples.rb
295
317
  - spec/vzaar_api/category_spec.rb
296
318
  - spec/vzaar_api/encoding_preset_spec.rb
297
319
  - spec/vzaar_api/ingest_recipe_spec.rb
@@ -301,6 +323,7 @@ files:
301
323
  - spec/vzaar_api/signature/factory_spec.rb
302
324
  - spec/vzaar_api/signature/multipart_spec.rb
303
325
  - spec/vzaar_api/signature/single_spec.rb
326
+ - spec/vzaar_api/subtitle_spec.rb
304
327
  - spec/vzaar_api/upload/s3_spec.rb
305
328
  - spec/vzaar_api/video_spec.rb
306
329
  - spec/vzaar_api/vzaar_api_spec.rb
@@ -327,10 +350,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
327
350
  version: '0'
328
351
  requirements: []
329
352
  rubyforge_project:
330
- rubygems_version: 2.6.12
353
+ rubygems_version: 2.7.6
331
354
  signing_key:
332
355
  specification_version: 4
333
- summary: vzaar-2.0.0
356
+ summary: vzaar-2.0.1
334
357
  test_files:
335
358
  - spec/fixtures/vcr_cassettes/categories/each_item.yml
336
359
  - spec/fixtures/vcr_cassettes/categories/find.yml
@@ -375,6 +398,16 @@ test_files:
375
398
  - spec/fixtures/vcr_cassettes/signature/multipart_422.yml
376
399
  - spec/fixtures/vcr_cassettes/signature/single_201.yml
377
400
  - spec/fixtures/vcr_cassettes/signature/single_422.yml
401
+ - spec/fixtures/vcr_cassettes/subtitles/create_201.yml
402
+ - spec/fixtures/vcr_cassettes/subtitles/create_422.yml
403
+ - spec/fixtures/vcr_cassettes/subtitles/create_from_file_201.yml
404
+ - spec/fixtures/vcr_cassettes/subtitles/delete_204.yml
405
+ - spec/fixtures/vcr_cassettes/subtitles/paginate.yml
406
+ - spec/fixtures/vcr_cassettes/subtitles/paginate_first.yml
407
+ - spec/fixtures/vcr_cassettes/subtitles/paginate_last.yml
408
+ - spec/fixtures/vcr_cassettes/subtitles/paginate_next.yml
409
+ - spec/fixtures/vcr_cassettes/subtitles/update_200.yml
410
+ - spec/fixtures/vcr_cassettes/subtitles/update_422.yml
378
411
  - spec/fixtures/vcr_cassettes/upload/multipart_201.yml
379
412
  - spec/fixtures/vcr_cassettes/upload/multipart_403.yml
380
413
  - spec/fixtures/vcr_cassettes/upload/single_201.yml
@@ -388,16 +421,23 @@ test_files:
388
421
  - spec/fixtures/vcr_cassettes/videos/delete_204.yml
389
422
  - spec/fixtures/vcr_cassettes/videos/find.yml
390
423
  - spec/fixtures/vcr_cassettes/videos/find_404.yml
424
+ - spec/fixtures/vcr_cassettes/videos/image_frame_202.yml
425
+ - spec/fixtures/vcr_cassettes/videos/image_frame_422.yml
426
+ - spec/fixtures/vcr_cassettes/videos/image_upload_frame_202.yml
427
+ - spec/fixtures/vcr_cassettes/videos/image_upload_frame_422.yml
391
428
  - spec/fixtures/vcr_cassettes/videos/paginate_first.yml
392
429
  - spec/fixtures/vcr_cassettes/videos/paginate_last.yml
393
430
  - spec/fixtures/vcr_cassettes/videos/paginate_next.yml
394
431
  - spec/fixtures/vcr_cassettes/videos/paginate_previous.yml
395
432
  - spec/spec_helper.rb
433
+ - spec/support/files/drex.jpg
434
+ - spec/support/files/fr.vtt
396
435
  - spec/support/files/video-1.0MB.mp4
397
436
  - spec/support/files/video-12.0MB.mp4
398
437
  - spec/support/files/video-4.9MB.mp4
399
438
  - spec/support/files/video-5.0MB.mp4
400
439
  - spec/support/helpers.rb
440
+ - spec/support/shared_examples.rb
401
441
  - spec/vzaar_api/category_spec.rb
402
442
  - spec/vzaar_api/encoding_preset_spec.rb
403
443
  - spec/vzaar_api/ingest_recipe_spec.rb
@@ -407,6 +447,7 @@ test_files:
407
447
  - spec/vzaar_api/signature/factory_spec.rb
408
448
  - spec/vzaar_api/signature/multipart_spec.rb
409
449
  - spec/vzaar_api/signature/single_spec.rb
450
+ - spec/vzaar_api/subtitle_spec.rb
410
451
  - spec/vzaar_api/upload/s3_spec.rb
411
452
  - spec/vzaar_api/video_spec.rb
412
453
  - spec/vzaar_api/vzaar_api_spec.rb