uencode 0.0.1 → 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.
data/README.md CHANGED
@@ -33,7 +33,7 @@ capture = UEncode::CaptureOutput.new :destination => "http://whatever.com/foo.zi
33
33
  job.add_capture capture
34
34
 
35
35
  request = UEncode::Request.new job
36
- puts job.to_xml
36
+
37
37
  response = request.send
38
38
 
39
39
  puts response.code # => 'Ok'
@@ -46,12 +46,16 @@ puts response.userdata # => 'This is a simple test'
46
46
 
47
47
  Currently all the uEncode API parameters are supported (or so I think :)
48
48
 
49
- Currently the gem does not validate parameters' values, so pay attention at the API docs.
49
+ Currently the gem does not validate parameters values, so pay attention to the API docs.
50
50
 
51
51
  You can see the whole list of accepted parameters in the [uEncode API documentation](http://www.uencode.com/api/300#response_codes).
52
52
 
53
53
  For the UEncode classes that map to each complex API parameters (like Crop, Size, FrameRate, etc) take a look at the spec file at /spec/elements_spec.rb or read the docs.
54
54
 
55
+ ## Credits
56
+
57
+ This gem was created during my work to integrate the uEncode API in our application at [DailyDigital](http://www.dailydigital.com). Thanks for letting me open source it!
58
+
55
59
  ## Running the specs
56
60
 
57
61
  * bundle install
@@ -111,11 +111,40 @@ module UEncode
111
111
 
112
112
  # Medium is a single video to transcode
113
113
  class Medium
114
+ attr_reader :video_config, :audio_config
115
+
114
116
  def initialize
115
117
  @video_config = VideoConfig.new
116
118
  @audio_config = AudioConfig.new
117
119
  end
118
120
 
121
+ # Configures the transcoding using a nested hash with the following format:
122
+ #
123
+ # config = {"video" => { ... }, "audio" => { ... }
124
+ #
125
+ # The keys for the "video" hash can be any of the following: bitrate, codec, cbr, crop,
126
+ # deinterlace, framerate, height, keyframe_interval, maxbitrate, par, profile, passes,
127
+ # stretch, width.
128
+ #
129
+ # The "framerate" and "par" values must be also hashes, with the following format:
130
+ #
131
+ # {"numerator" => 10, "denominator" => 11}
132
+ #
133
+ # The keys for the "audio" hash can be any of the following:
134
+ # codec, bitrate, channels, samplerate.
135
+ #
136
+ def configure(hash)
137
+ video = hash["video"]
138
+ audio = hash["audio"]
139
+ configure_video do |c|
140
+ video.each_pair { |key, value| c.send("#{key}=", value) }
141
+ end
142
+
143
+ configure_audio do |c|
144
+ audio.each_pair { |key, value| c.send("#{key}=", value) }
145
+ end
146
+ end
147
+
119
148
  def configure_video
120
149
  yield @video_config
121
150
  end
@@ -186,6 +215,10 @@ module UEncode
186
215
 
187
216
  include Enumerable
188
217
 
218
+ def self.from_hash(hash)
219
+ new({})
220
+ end
221
+
189
222
  def initialize(options)
190
223
  @video_output = VideoOutput.new options[:video_output] || {}
191
224
  @captures = []
@@ -1,3 +1,3 @@
1
1
  module UEncode
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -31,6 +31,9 @@ describe UEncode::Medium do
31
31
 
32
32
  describe "#configure_video" do
33
33
  let(:medium) { UEncode::Medium.new }
34
+ let(:config) { YAML::load_file("spec/fixtures/configuration.yaml") }
35
+ let(:video_config) { config["video"] }
36
+ let(:audio_config) { config["audio"] }
34
37
 
35
38
  it { medium.video.bitrate.should == 10000 }
36
39
  it { medium.video.codec.should == "mp4" }
@@ -46,6 +49,36 @@ describe UEncode::Medium do
46
49
  it { medium.video.passes.should == 1 }
47
50
  it { medium.video.stretch.should == false }
48
51
  it { medium.video.width.should == 400 }
52
+
53
+ context "from a hash (video parameters)" do
54
+ before { medium.configure config }
55
+ subject { medium.video_config }
56
+
57
+ its(:bitrate) { should == video_config["bitrate"] }
58
+ its(:codec) { should == video_config["codec"] }
59
+ its(:cbr) { should == video_config["cbr"] }
60
+ its(:crop) { should == video_config["crop"] }
61
+ its(:deinterlace) { should == video_config["deinterlace"] }
62
+ its(:framerate) { should == video_config["framerate"] }
63
+ its(:height) { should == video_config["height"] }
64
+ its(:keyframe_interval) { should == video_config["keyframe_interval"] }
65
+ its(:maxbitrate) { should == video_config["maxbitrate"] }
66
+ its(:par) { should == video_config["par"] }
67
+ its(:profile) { should == video_config["profile"] }
68
+ its(:passes) { should == video_config["passes"] }
69
+ its(:stretch) { should == video_config["stretch"] }
70
+ its(:width) { should == video_config["width"] }
71
+ end
72
+
73
+ context "from a hash (audio parameters)" do
74
+ before { medium.configure config }
75
+ subject { medium.audio_config }
76
+
77
+ its(:codec) { should == audio_config["codec"] }
78
+ its(:bitrate) { should == audio_config["bitrate"] }
79
+ its(:channels) { should == audio_config["channels"] }
80
+ its(:samplerate) { should == audio_config["samplerate"] }
81
+ end
49
82
  end
50
83
 
51
84
  describe "#configure_audio" do
@@ -0,0 +1,23 @@
1
+ video:
2
+ bitrate: 4500000
3
+ codec: "mp4"
4
+ width: 1920
5
+ height: 1080
6
+ passes: 1
7
+ maxbitrate: 2000000
8
+ deinterlace: false
9
+ cbr: false
10
+ stretch: false
11
+ profile: "baseline"
12
+ framerate:
13
+ numerator: 30000
14
+ denominator: 1001
15
+ par:
16
+ numerator: 1
17
+ denominator: 1
18
+ keyframe_interval: 60
19
+ audio:
20
+ codec: "aac"
21
+ bitrate: 256000
22
+ channels: 2
23
+ samplerate: 44100
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,6 @@ require 'rspec'
3
3
  require 'rspec/autorun'
4
4
  require "vcr"
5
5
 
6
-
7
6
  VCR.config do |c|
8
7
  library_dir = File.join(File.dirname(__FILE__), 'fixtures/')
9
8
  c.cassette_library_dir = library_dir
data/uencode.gemspec CHANGED
@@ -29,4 +29,5 @@ Gem::Specification.new do |s|
29
29
 
30
30
  s.add_dependency "nokogiri", "1.4.4"
31
31
  s.add_dependency "httparty"
32
+ s.add_dependency "rake"
32
33
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: uencode
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - "C\xC3\xA1ssio Marques"
@@ -10,12 +10,11 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-18 00:00:00 -03:00
13
+ date: 2011-07-07 00:00:00 -03:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
18
- prerelease: false
19
18
  requirement: &id001 !ruby/object:Gem::Requirement
20
19
  none: false
21
20
  requirements:
@@ -23,10 +22,10 @@ dependencies:
23
22
  - !ruby/object:Gem::Version
24
23
  version: 2.6.0
25
24
  type: :development
25
+ prerelease: false
26
26
  version_requirements: *id001
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: vcr
29
- prerelease: false
30
29
  requirement: &id002 !ruby/object:Gem::Requirement
31
30
  none: false
32
31
  requirements:
@@ -34,10 +33,10 @@ dependencies:
34
33
  - !ruby/object:Gem::Version
35
34
  version: 1.9.0
36
35
  type: :development
36
+ prerelease: false
37
37
  version_requirements: *id002
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: guard
40
- prerelease: false
41
40
  requirement: &id003 !ruby/object:Gem::Requirement
42
41
  none: false
43
42
  requirements:
@@ -45,10 +44,10 @@ dependencies:
45
44
  - !ruby/object:Gem::Version
46
45
  version: "0"
47
46
  type: :development
47
+ prerelease: false
48
48
  version_requirements: *id003
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: guard-rspec
51
- prerelease: false
52
51
  requirement: &id004 !ruby/object:Gem::Requirement
53
52
  none: false
54
53
  requirements:
@@ -56,10 +55,10 @@ dependencies:
56
55
  - !ruby/object:Gem::Version
57
56
  version: "0"
58
57
  type: :development
58
+ prerelease: false
59
59
  version_requirements: *id004
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: growl
62
- prerelease: false
63
62
  requirement: &id005 !ruby/object:Gem::Requirement
64
63
  none: false
65
64
  requirements:
@@ -67,10 +66,10 @@ dependencies:
67
66
  - !ruby/object:Gem::Version
68
67
  version: "0"
69
68
  type: :development
69
+ prerelease: false
70
70
  version_requirements: *id005
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rb-fsevent
73
- prerelease: false
74
73
  requirement: &id006 !ruby/object:Gem::Requirement
75
74
  none: false
76
75
  requirements:
@@ -78,10 +77,10 @@ dependencies:
78
77
  - !ruby/object:Gem::Version
79
78
  version: "0"
80
79
  type: :development
80
+ prerelease: false
81
81
  version_requirements: *id006
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: webmock
84
- prerelease: false
85
84
  requirement: &id007 !ruby/object:Gem::Requirement
86
85
  none: false
87
86
  requirements:
@@ -89,10 +88,10 @@ dependencies:
89
88
  - !ruby/object:Gem::Version
90
89
  version: "0"
91
90
  type: :development
91
+ prerelease: false
92
92
  version_requirements: *id007
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: nokogiri
95
- prerelease: false
96
95
  requirement: &id008 !ruby/object:Gem::Requirement
97
96
  none: false
98
97
  requirements:
@@ -100,10 +99,10 @@ dependencies:
100
99
  - !ruby/object:Gem::Version
101
100
  version: 1.4.4
102
101
  type: :runtime
102
+ prerelease: false
103
103
  version_requirements: *id008
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: httparty
106
- prerelease: false
107
106
  requirement: &id009 !ruby/object:Gem::Requirement
108
107
  none: false
109
108
  requirements:
@@ -111,7 +110,19 @@ dependencies:
111
110
  - !ruby/object:Gem::Version
112
111
  version: "0"
113
112
  type: :runtime
113
+ prerelease: false
114
114
  version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
116
+ name: rake
117
+ requirement: &id010 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: *id010
115
126
  description: UEncode API client
116
127
  email:
117
128
  - cassiommc@gmail.com
@@ -134,6 +145,7 @@ files:
134
145
  - lib/uencode/response.rb
135
146
  - lib/uencode/version.rb
136
147
  - spec/elements_spec.rb
148
+ - spec/fixtures/configuration.yaml
137
149
  - spec/fixtures/job_with_one_video_and_no_capture.yml
138
150
  - spec/request_spec.rb
139
151
  - spec/response_spec.rb
@@ -154,12 +166,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
166
  requirements:
155
167
  - - ">="
156
168
  - !ruby/object:Gem::Version
169
+ hash: 2924149938077751902
170
+ segments:
171
+ - 0
157
172
  version: "0"
158
173
  required_rubygems_version: !ruby/object:Gem::Requirement
159
174
  none: false
160
175
  requirements:
161
176
  - - ">="
162
177
  - !ruby/object:Gem::Version
178
+ hash: 2924149938077751902
179
+ segments:
180
+ - 0
163
181
  version: "0"
164
182
  requirements: []
165
183
 
@@ -170,6 +188,7 @@ specification_version: 3
170
188
  summary: Simple UEncode API client written in Ruby
171
189
  test_files:
172
190
  - spec/elements_spec.rb
191
+ - spec/fixtures/configuration.yaml
173
192
  - spec/fixtures/job_with_one_video_and_no_capture.yml
174
193
  - spec/request_spec.rb
175
194
  - spec/response_spec.rb