active_encode 0.0.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.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +16 -0
  4. data/.rubocop.yml +76 -0
  5. data/.travis.yml +10 -0
  6. data/Gemfile +11 -0
  7. data/LICENSE +202 -0
  8. data/README.md +106 -0
  9. data/Rakefile +38 -0
  10. data/active_encode.gemspec +28 -0
  11. data/lib/active_encode.rb +2 -0
  12. data/lib/active_encode/base.rb +16 -0
  13. data/lib/active_encode/callbacks.rb +69 -0
  14. data/lib/active_encode/core.rb +79 -0
  15. data/lib/active_encode/engine_adapter.rb +51 -0
  16. data/lib/active_encode/engine_adapters.rb +27 -0
  17. data/lib/active_encode/engine_adapters/active_job_adapter.rb +23 -0
  18. data/lib/active_encode/engine_adapters/inline_adapter.rb +42 -0
  19. data/lib/active_encode/engine_adapters/matterhorn_adapter.rb +312 -0
  20. data/lib/active_encode/engine_adapters/shingoncoder_adapter.rb +56 -0
  21. data/lib/active_encode/engine_adapters/test_adapter.rb +38 -0
  22. data/lib/active_encode/engine_adapters/zencoder_adapter.rb +143 -0
  23. data/lib/active_encode/status.rb +38 -0
  24. data/lib/active_encode/technical_metadata.rb +11 -0
  25. data/lib/active_encode/version.rb +3 -0
  26. data/spec/fixtures/Bars_512kb.mp4 +0 -0
  27. data/spec/fixtures/matterhorn/cancelled_response.xml +323 -0
  28. data/spec/fixtures/matterhorn/completed_response.xml +4 -0
  29. data/spec/fixtures/matterhorn/create_response.xml +300 -0
  30. data/spec/fixtures/matterhorn/delete_track_response.xml +2 -0
  31. data/spec/fixtures/matterhorn/failed_response.xml +4 -0
  32. data/spec/fixtures/matterhorn/purged_response.xml +342 -0
  33. data/spec/fixtures/matterhorn/running_response.xml +1 -0
  34. data/spec/fixtures/matterhorn/stop_completed_response.xml +228 -0
  35. data/spec/fixtures/matterhorn/stop_running_response.xml +339 -0
  36. data/spec/fixtures/zencoder/job_create.json +1 -0
  37. data/spec/fixtures/zencoder/job_details_cancelled.json +1 -0
  38. data/spec/fixtures/zencoder/job_details_completed.json +1 -0
  39. data/spec/fixtures/zencoder/job_details_create.json +1 -0
  40. data/spec/fixtures/zencoder/job_details_failed.json +73 -0
  41. data/spec/fixtures/zencoder/job_details_running.json +1 -0
  42. data/spec/fixtures/zencoder/job_progress_cancelled.json +13 -0
  43. data/spec/fixtures/zencoder/job_progress_completed.json +13 -0
  44. data/spec/fixtures/zencoder/job_progress_create.json +1 -0
  45. data/spec/fixtures/zencoder/job_progress_failed.json +13 -0
  46. data/spec/fixtures/zencoder/job_progress_running.json +1 -0
  47. data/spec/integration/matterhorn_adapter_spec.rb +186 -0
  48. data/spec/integration/shingoncoder_adapter_spec.rb +152 -0
  49. data/spec/integration/zencoder_adapter_spec.rb +152 -0
  50. data/spec/spec_helper.rb +12 -0
  51. data/spec/units/callbacks_spec.rb +66 -0
  52. data/spec/units/engine_adapter_spec.rb +78 -0
  53. data/spec/units/status_spec.rb +62 -0
  54. metadata +210 -0
@@ -0,0 +1,152 @@
1
+ require 'spec_helper'
2
+ require 'zencoder'
3
+ require 'json'
4
+
5
+ describe ActiveEncode::EngineAdapters::ZencoderAdapter do
6
+ before(:all) do
7
+ ActiveEncode::Base.engine_adapter = :zencoder
8
+ end
9
+ after(:all) do
10
+ ActiveEncode::Base.engine_adapter = :inline
11
+ end
12
+
13
+ let(:create_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_create.json'))) }
14
+
15
+ before do
16
+ allow(Zencoder::Job).to receive(:create).and_return(create_response)
17
+ end
18
+
19
+ let(:file) { "file://#{File.absolute_path('spec/fixtures/Bars_512kb.mp4')}" }
20
+
21
+ describe "#create" do
22
+ before do
23
+ allow(Zencoder::Job).to receive(:details).and_return(details_response)
24
+ allow(Zencoder::Job).to receive(:progress).and_return(progress_response)
25
+ end
26
+
27
+ let(:details_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_details_create.json'))) }
28
+ let(:progress_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_progress_create.json'))) }
29
+ let(:create_output) { [{ id: "511404522", url: "https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20150610/c09b61e4d130ddf923f0653418a80b9c/399ae101c3f99b4f318635e78a4e587a.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=GY/9LMkQAiDOrMQwS5BkmOE200s%3D&Expires=1434033527", label: nil }] }
30
+
31
+ subject { ActiveEncode::Base.create(file) }
32
+ it { is_expected.to be_a ActiveEncode::Base }
33
+ its(:id) { is_expected.not_to be_empty }
34
+ it { is_expected.to be_running }
35
+ its(:output) { is_expected.to eq create_output }
36
+ its(:current_operations) { is_expected.to be_empty }
37
+ its(:percent_complete) { is_expected.to eq 0 }
38
+ its(:errors) { is_expected.to be_empty }
39
+ its(:tech_metadata) { is_expected.to be_empty }
40
+ end
41
+
42
+ describe "#find" do
43
+ before do
44
+ allow(Zencoder::Job).to receive(:details).and_return(details_response)
45
+ allow(Zencoder::Job).to receive(:progress).and_return(progress_response)
46
+ end
47
+
48
+ context "a running encode" do
49
+ let(:details_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_details_running.json'))) }
50
+ let(:progress_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_progress_running.json'))) }
51
+ let(:running_output) { [{ id: "510582971", url: "https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20150609/48a6907086c012f68b9ca43461280515/1726d7ec3e24f2171bd07b2abb807b6c.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=vSvlxU94wlQLEbpG3Zs8ibp4MoY%3D&Expires=1433953106", label: nil }] }
52
+ let(:running_tech_metadata) { { audio_bitrate: "52", audio_codec: "aac", audio_channels: "2", duration: "57992", mime_type: "mpeg4", video_framerate: "29.97", height: "240", video_bitrate: "535", video_codec: "h264", width: "320" } }
53
+
54
+ subject { ActiveEncode::Base.find('166019107') }
55
+ it { is_expected.to be_a ActiveEncode::Base }
56
+ its(:id) { is_expected.to eq '166019107' }
57
+ it { is_expected.to be_running }
58
+ its(:output) { is_expected.to eq running_output }
59
+ its(:current_operations) { is_expected.to be_empty }
60
+ its(:percent_complete) { is_expected.to eq 30.0 }
61
+ its(:errors) { is_expected.to be_empty }
62
+ its(:tech_metadata) { is_expected.to eq running_tech_metadata }
63
+ end
64
+
65
+ context "a cancelled encode" do
66
+ let(:details_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_details_cancelled.json'))) }
67
+ let(:progress_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_progress_cancelled.json'))) }
68
+
69
+ subject { ActiveEncode::Base.find('165866551') }
70
+ it { is_expected.to be_a ActiveEncode::Base }
71
+ its(:id) { is_expected.to eq '165866551' }
72
+ it { is_expected.to be_cancelled }
73
+ its(:current_operations) { is_expected.to be_empty }
74
+ its(:percent_complete) { is_expected.to eq 0 }
75
+ its(:errors) { is_expected.to be_empty }
76
+ its(:tech_metadata) { is_expected.to be_empty }
77
+ end
78
+
79
+ context "a completed encode" do
80
+ let(:details_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_details_completed.json'))) }
81
+ let(:progress_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_progress_completed.json'))) }
82
+ let(:completed_output) { { id: "509856876", audio_bitrate: "53", audio_codec: "aac", audio_channels: "2", duration: "5000", mime_type: "mpeg4", video_framerate: "29.97", height: "240", video_bitrate: "549", video_codec: "h264", width: "320", url: "https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20150608/ebbe865f8ef1b960d7c2bb0663b88a12/0f1948dcb2fd701fba30ff21908fe460.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=1LgIyl/el9E7zeyPxzd/%2BNwez6Y%3D&Expires=1433873646", label: nil } }
83
+ let(:completed_tech_metadata) { { audio_bitrate: "52", audio_codec: "aac", audio_channels: "2", duration: "57992", mime_type: "mpeg4", video_framerate: "29.97", height: "240", video_bitrate: "535", video_codec: "h264", width: "320" } }
84
+
85
+ subject { ActiveEncode::Base.find('165839139') }
86
+ it { is_expected.to be_a ActiveEncode::Base }
87
+ its(:id) { is_expected.to eq '165839139' }
88
+ it { is_expected.to be_completed }
89
+ its(:output) { is_expected.to include completed_output }
90
+ its(:current_operations) { is_expected.to be_empty }
91
+ its(:percent_complete) { is_expected.to eq 100 }
92
+ its(:errors) { is_expected.to be_empty }
93
+ its(:tech_metadata) { is_expected.to eq completed_tech_metadata }
94
+ end
95
+
96
+ context "a failed encode" do
97
+ let(:details_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_details_failed.json'))) }
98
+ let(:progress_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_progress_failed.json'))) }
99
+ let(:failed_tech_metadata) { { mime_type: "video/mp4", checksum: "7ae24368ccb7a6c6422a14ff73f33c9a", duration: "6314", audio_codec: "AAC", audio_channels: "2", audio_bitrate: "171030.0", video_codec: "AVC", video_bitrate: "74477.0", video_framerate: "23.719", width: "200", height: "110" } }
100
+ let(:failed_errors) { "The file is an XML file, and doesn't contain audio or video tracks." }
101
+
102
+ subject { ActiveEncode::Base.find('166079902') }
103
+ it { is_expected.to be_a ActiveEncode::Base }
104
+ its(:id) { is_expected.to eq '166079902' }
105
+ it { is_expected.to be_failed }
106
+ its(:current_operations) { is_expected.to be_empty }
107
+ its(:percent_complete) { is_expected.to eq 0 }
108
+ its(:errors) { is_expected.to include failed_errors }
109
+ its(:tech_metadata) { is_expected.to be_empty }
110
+ end
111
+ end
112
+
113
+ describe "#cancel!" do
114
+ before do
115
+ allow(Zencoder::Job).to receive(:cancel).and_return(cancel_response)
116
+ allow(Zencoder::Job).to receive(:details).and_return(details_response)
117
+ allow(Zencoder::Job).to receive(:progress).and_return(progress_response)
118
+ end
119
+
120
+ let(:cancel_response) { Zencoder::Response.new(code: 200) } # TODO: check that this is the correct response code for a successful cancel
121
+ let(:details_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_details_cancelled.json'))) }
122
+ let(:progress_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_progress_cancelled.json'))) }
123
+
124
+ let(:encode) { ActiveEncode::Base.create(file) }
125
+ subject { encode.cancel! }
126
+ it { is_expected.to be_a ActiveEncode::Base }
127
+ its(:id) { is_expected.to eq '165866551' }
128
+ it { is_expected.to be_cancelled }
129
+ end
130
+
131
+ describe "reload" do
132
+ before do
133
+ allow(Zencoder::Job).to receive(:details).and_return(details_response)
134
+ allow(Zencoder::Job).to receive(:progress).and_return(progress_response)
135
+ end
136
+
137
+ let(:details_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_details_running.json'))) }
138
+ let(:progress_response) { Zencoder::Response.new(body: JSON.parse(File.read('spec/fixtures/zencoder/job_progress_running.json'))) }
139
+ let(:reload_output) { [{ id: "510582971", url: "https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20150609/48a6907086c012f68b9ca43461280515/1726d7ec3e24f2171bd07b2abb807b6c.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=vSvlxU94wlQLEbpG3Zs8ibp4MoY%3D&Expires=1433953106", label: nil }] }
140
+ let(:reload_tech_metadata) { { audio_bitrate: "52", audio_codec: "aac", audio_channels: "2", duration: "57992", mime_type: "mpeg4", video_framerate: "29.97", height: "240", video_bitrate: "535", video_codec: "h264", width: "320" } }
141
+
142
+ subject { ActiveEncode::Base.find('166019107').reload }
143
+ it { is_expected.to be_a ActiveEncode::Base }
144
+ its(:id) { is_expected.to eq '166019107' }
145
+ it { is_expected.to be_running }
146
+ its(:output) { is_expected.to eq reload_output }
147
+ its(:current_operations) { is_expected.to be_empty }
148
+ its(:percent_complete) { is_expected.to eq 30.0 }
149
+ its(:errors) { is_expected.to be_empty }
150
+ its(:tech_metadata) { is_expected.to eq reload_tech_metadata }
151
+ end
152
+ end
@@ -0,0 +1,12 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ require 'bundler/setup'
5
+ Bundler.setup
6
+
7
+ require 'byebug'
8
+ require 'rspec/its'
9
+ require 'active_encode'
10
+
11
+ RSpec.configure do |_config|
12
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveEncode::Callbacks do
4
+ before do
5
+ class CallbackEncode < ActiveEncode::Base
6
+ before_create ->(encode) { encode.history << "CallbackEncode ran before_create" }
7
+ after_create ->(encode) { encode.history << "CallbackEncode ran after_create" }
8
+
9
+ before_cancel ->(encode) { encode.history << "CallbackEncode ran before_cancel" }
10
+ after_cancel ->(encode) { encode.history << "CallbackEncode ran after_cancel" }
11
+
12
+ before_purge ->(encode) { encode.history << "CallbackEncode ran before_purge" }
13
+ after_purge ->(encode) { encode.history << "CallbackEncode ran after_purge" }
14
+
15
+ around_create do |encode, block|
16
+ encode.history << "CallbackEncode ran around_create_start"
17
+ block.call
18
+ encode.history << "CallbackEncode ran around_create_stop"
19
+ end
20
+
21
+ around_cancel do |encode, block|
22
+ encode.history << "CallbackEncode ran around_cancel_start"
23
+ block.call
24
+ encode.history << "CallbackEncode ran around_cancel_stop"
25
+ end
26
+
27
+ around_purge do |encode, block|
28
+ encode.history << "CallbackEncode ran around_purge_start"
29
+ block.call
30
+ encode.history << "CallbackEncode ran around_purge_stop"
31
+ end
32
+
33
+ def history
34
+ @history ||= []
35
+ end
36
+ end
37
+ end
38
+
39
+ after do
40
+ Object.send(:remove_const, :CallbackEncode)
41
+ end
42
+
43
+ describe 'create callbacks' do
44
+ subject { CallbackEncode.create("sample.mp4").history }
45
+ it { is_expected.to include("CallbackEncode ran before_create") }
46
+ it { is_expected.to include("CallbackEncode ran after_create") }
47
+ it { is_expected.to include("CallbackEncode ran around_create_start") }
48
+ it { is_expected.to include("CallbackEncode ran around_create_stop") }
49
+ end
50
+
51
+ describe 'cancel callbacks' do
52
+ subject { CallbackEncode.create("sample.mp4").cancel!.history }
53
+ it { is_expected.to include("CallbackEncode ran before_cancel") }
54
+ it { is_expected.to include("CallbackEncode ran after_cancel") }
55
+ it { is_expected.to include("CallbackEncode ran around_cancel_start") }
56
+ it { is_expected.to include("CallbackEncode ran around_cancel_stop") }
57
+ end
58
+
59
+ describe 'purge callbacks' do
60
+ subject { CallbackEncode.create("sample.mp4").purge!.history }
61
+ it { is_expected.to include("CallbackEncode ran before_purge") }
62
+ it { is_expected.to include("CallbackEncode ran after_purge") }
63
+ it { is_expected.to include("CallbackEncode ran around_purge_start") }
64
+ it { is_expected.to include("CallbackEncode ran around_purge_stop") }
65
+ end
66
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveEncode::EngineAdapter do
4
+ before do
5
+ module ActiveEncode
6
+ module EngineAdapters
7
+ class StubOneAdapter
8
+ def create(_); end
9
+
10
+ def find(_, _ = {}); end
11
+
12
+ def list(*); end
13
+
14
+ def cancel(_encode); end
15
+
16
+ def purge(_encode); end
17
+
18
+ def remove_output(_encode, _output_id); end
19
+ end
20
+
21
+ class StubTwoAdapter
22
+ def create(_encode); end
23
+
24
+ def find(_id, _opts = {}); end
25
+
26
+ def list(*); end
27
+
28
+ def cancel(_encode); end
29
+
30
+ def purge(_encode); end
31
+
32
+ def remove_output(_encode, _output_id); end
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ after do
39
+ ActiveEncode::EngineAdapters.send(:remove_const, :StubOneAdapter)
40
+ ActiveEncode::EngineAdapters.send(:remove_const, :StubTwoAdapter)
41
+ end
42
+
43
+ it 'does not allow classes as arguments' do
44
+ expect { ActiveEncode::Base.engine_adapter = ActiveEncode::EngineAdapters::StubOneAdapter }.to raise_error(ArgumentError)
45
+ end
46
+
47
+ it 'does not allow arguments that are not engine adapters' do
48
+ expect { ActiveEncode::Base.engine_adapter = Mutex.new }.to raise_error(ArgumentError)
49
+ end
50
+
51
+ context 'overriding' do
52
+ let(:base_engine_adapter) { ActiveEncode::Base.engine_adapter }
53
+
54
+ it 'does not affect the parent' do
55
+ child_encode_one = Class.new(ActiveEncode::Base)
56
+ child_encode_one.engine_adapter = :stub_one
57
+
58
+ expect(child_encode_one.engine_adapter).not_to eq base_engine_adapter
59
+ expect(child_encode_one.engine_adapter).to be_kind_of ActiveEncode::EngineAdapters::StubOneAdapter
60
+ expect(ActiveEncode::Base.engine_adapter).to eq base_engine_adapter
61
+ end
62
+
63
+ it 'does not affect its sibling' do
64
+ child_encode_one = Class.new(ActiveEncode::Base)
65
+ child_encode_one.engine_adapter = :stub_one
66
+ child_encode_two = Class.new(ActiveEncode::Base)
67
+ child_encode_two.engine_adapter = :stub_two
68
+
69
+ expect(child_encode_two.engine_adapter).not_to eq base_engine_adapter
70
+ expect(child_encode_two.engine_adapter).to be_kind_of ActiveEncode::EngineAdapters::StubTwoAdapter
71
+ # child_encode_one's engine adapter should remain unchanged
72
+ expect(child_encode_one.engine_adapter).to be_kind_of ActiveEncode::EngineAdapters::StubOneAdapter
73
+ expect(ActiveEncode::Base.engine_adapter).to eq base_engine_adapter
74
+ # new encodes should not be affected
75
+ expect(Class.new(ActiveEncode::Base).engine_adapter).to eq base_engine_adapter
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveEncode::Status do
4
+ subject { ActiveEncode::Base.new(nil) }
5
+
6
+ context 'new object' do
7
+ subject { ActiveEncode::Base.new(nil) }
8
+ it { is_expected.not_to be_created }
9
+ it { is_expected.not_to be_running }
10
+ it { is_expected.not_to be_cancelled }
11
+ it { is_expected.not_to be_completed }
12
+ it { is_expected.not_to be_failed }
13
+ end
14
+
15
+ context 'running job' do
16
+ before do
17
+ subject.id = 1
18
+ subject.state = :running
19
+ end
20
+ it { is_expected.to be_created }
21
+ it { is_expected.to be_running }
22
+ it { is_expected.not_to be_cancelled }
23
+ it { is_expected.not_to be_completed }
24
+ it { is_expected.not_to be_failed }
25
+ end
26
+
27
+ context 'cancelled job' do
28
+ before do
29
+ subject.id = 1
30
+ subject.state = :cancelled
31
+ end
32
+ it { is_expected.to be_created }
33
+ it { is_expected.not_to be_running }
34
+ it { is_expected.to be_cancelled }
35
+ it { is_expected.not_to be_completed }
36
+ it { is_expected.not_to be_failed }
37
+ end
38
+
39
+ context 'completed job' do
40
+ before do
41
+ subject.id = 1
42
+ subject.state = :completed
43
+ end
44
+ it { is_expected.to be_created }
45
+ it { is_expected.not_to be_running }
46
+ it { is_expected.not_to be_cancelled }
47
+ it { is_expected.to be_completed }
48
+ it { is_expected.not_to be_failed }
49
+ end
50
+
51
+ context 'failed job' do
52
+ before do
53
+ subject.id = 1
54
+ subject.state = :failed
55
+ end
56
+ it { is_expected.to be_created }
57
+ it { is_expected.not_to be_running }
58
+ it { is_expected.not_to be_cancelled }
59
+ it { is_expected.not_to be_completed }
60
+ it { is_expected.to be_failed }
61
+ end
62
+ end
metadata ADDED
@@ -0,0 +1,210 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_encode
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Michael Klein, Chris Colvard
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: coveralls
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-its
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.2'
97
+ description: This gem serves as the basis for the interface between a Ruby (Rails)
98
+ application and a provider of transcoding services such as Opencast Matterhorn,
99
+ Zencoder, and Amazon Elastic Transcoder.
100
+ email:
101
+ - mbklein@gmail.com, chris.colvard@gmail.com
102
+ executables: []
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - ".coveralls.yml"
107
+ - ".gitignore"
108
+ - ".rubocop.yml"
109
+ - ".travis.yml"
110
+ - Gemfile
111
+ - LICENSE
112
+ - README.md
113
+ - Rakefile
114
+ - active_encode.gemspec
115
+ - lib/active_encode.rb
116
+ - lib/active_encode/base.rb
117
+ - lib/active_encode/callbacks.rb
118
+ - lib/active_encode/core.rb
119
+ - lib/active_encode/engine_adapter.rb
120
+ - lib/active_encode/engine_adapters.rb
121
+ - lib/active_encode/engine_adapters/active_job_adapter.rb
122
+ - lib/active_encode/engine_adapters/inline_adapter.rb
123
+ - lib/active_encode/engine_adapters/matterhorn_adapter.rb
124
+ - lib/active_encode/engine_adapters/shingoncoder_adapter.rb
125
+ - lib/active_encode/engine_adapters/test_adapter.rb
126
+ - lib/active_encode/engine_adapters/zencoder_adapter.rb
127
+ - lib/active_encode/status.rb
128
+ - lib/active_encode/technical_metadata.rb
129
+ - lib/active_encode/version.rb
130
+ - spec/fixtures/Bars_512kb.mp4
131
+ - spec/fixtures/matterhorn/cancelled_response.xml
132
+ - spec/fixtures/matterhorn/completed_response.xml
133
+ - spec/fixtures/matterhorn/create_response.xml
134
+ - spec/fixtures/matterhorn/delete_track_response.xml
135
+ - spec/fixtures/matterhorn/failed_response.xml
136
+ - spec/fixtures/matterhorn/purged_response.xml
137
+ - spec/fixtures/matterhorn/running_response.xml
138
+ - spec/fixtures/matterhorn/stop_completed_response.xml
139
+ - spec/fixtures/matterhorn/stop_running_response.xml
140
+ - spec/fixtures/zencoder/job_create.json
141
+ - spec/fixtures/zencoder/job_details_cancelled.json
142
+ - spec/fixtures/zencoder/job_details_completed.json
143
+ - spec/fixtures/zencoder/job_details_create.json
144
+ - spec/fixtures/zencoder/job_details_failed.json
145
+ - spec/fixtures/zencoder/job_details_running.json
146
+ - spec/fixtures/zencoder/job_progress_cancelled.json
147
+ - spec/fixtures/zencoder/job_progress_completed.json
148
+ - spec/fixtures/zencoder/job_progress_create.json
149
+ - spec/fixtures/zencoder/job_progress_failed.json
150
+ - spec/fixtures/zencoder/job_progress_running.json
151
+ - spec/integration/matterhorn_adapter_spec.rb
152
+ - spec/integration/shingoncoder_adapter_spec.rb
153
+ - spec/integration/zencoder_adapter_spec.rb
154
+ - spec/spec_helper.rb
155
+ - spec/units/callbacks_spec.rb
156
+ - spec/units/engine_adapter_spec.rb
157
+ - spec/units/status_spec.rb
158
+ homepage: ''
159
+ licenses:
160
+ - MIT
161
+ metadata: {}
162
+ post_install_message:
163
+ rdoc_options: []
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 2.4.7
179
+ signing_key:
180
+ specification_version: 4
181
+ summary: Declare encode job classes that can be run by a variety of encoding services
182
+ test_files:
183
+ - spec/fixtures/Bars_512kb.mp4
184
+ - spec/fixtures/matterhorn/cancelled_response.xml
185
+ - spec/fixtures/matterhorn/completed_response.xml
186
+ - spec/fixtures/matterhorn/create_response.xml
187
+ - spec/fixtures/matterhorn/delete_track_response.xml
188
+ - spec/fixtures/matterhorn/failed_response.xml
189
+ - spec/fixtures/matterhorn/purged_response.xml
190
+ - spec/fixtures/matterhorn/running_response.xml
191
+ - spec/fixtures/matterhorn/stop_completed_response.xml
192
+ - spec/fixtures/matterhorn/stop_running_response.xml
193
+ - spec/fixtures/zencoder/job_create.json
194
+ - spec/fixtures/zencoder/job_details_cancelled.json
195
+ - spec/fixtures/zencoder/job_details_completed.json
196
+ - spec/fixtures/zencoder/job_details_create.json
197
+ - spec/fixtures/zencoder/job_details_failed.json
198
+ - spec/fixtures/zencoder/job_details_running.json
199
+ - spec/fixtures/zencoder/job_progress_cancelled.json
200
+ - spec/fixtures/zencoder/job_progress_completed.json
201
+ - spec/fixtures/zencoder/job_progress_create.json
202
+ - spec/fixtures/zencoder/job_progress_failed.json
203
+ - spec/fixtures/zencoder/job_progress_running.json
204
+ - spec/integration/matterhorn_adapter_spec.rb
205
+ - spec/integration/shingoncoder_adapter_spec.rb
206
+ - spec/integration/zencoder_adapter_spec.rb
207
+ - spec/spec_helper.rb
208
+ - spec/units/callbacks_spec.rb
209
+ - spec/units/engine_adapter_spec.rb
210
+ - spec/units/status_spec.rb