handbrake 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +10 -0
- data/lib/handbrake/cli.rb +45 -8
- data/lib/handbrake/version.rb +1 -1
- data/spec/handbrake/cli_spec.rb +20 -1
- metadata +10 -10
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
0.3.1
|
2
|
+
=====
|
3
|
+
|
4
|
+
- Add `:dry_run` option for {HandBrake::CLI}. When true, the commands
|
5
|
+
that would be executed otherwise are printed to standard out
|
6
|
+
instead.
|
7
|
+
- Ensure that the directories needed by a call to
|
8
|
+
{HandBrake::CLI#output} exist before writing to them.
|
9
|
+
- Ensure that the options hash passed into #output is not modified.
|
10
|
+
|
1
11
|
0.3.0
|
2
12
|
=====
|
3
13
|
|
data/lib/handbrake/cli.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'handbrake'
|
2
|
+
require 'fileutils'
|
2
3
|
|
3
4
|
module HandBrake
|
4
5
|
##
|
@@ -18,18 +19,28 @@ module HandBrake
|
|
18
19
|
# @return [Boolean]
|
19
20
|
attr_writer :trace
|
20
21
|
|
22
|
+
##
|
23
|
+
# Set whether dry_run mode is selected.
|
24
|
+
#
|
25
|
+
# @return [Boolean]
|
26
|
+
attr_writer :dry_run
|
27
|
+
|
21
28
|
##
|
22
29
|
# @param [Hash] options
|
23
30
|
# @option options [String] :bin_path ('HandBrakeCLI') the full
|
24
31
|
# path to the executable to use
|
25
32
|
# @option options [Boolean] :trace (false) whether {#trace?} is
|
26
33
|
# enabled
|
34
|
+
# @option options [Boolean] :dry_run (false) if true, nothing will
|
35
|
+
# actually be executed. The commands that would have been
|
36
|
+
# executed will be printed to standard out.
|
27
37
|
# @option options [#run] :runner (a PopenRunner instance) the class
|
28
38
|
# encapsulating the execution method for HandBrakeCLI. You
|
29
39
|
# shouldn't usually need to replace this.
|
30
40
|
def initialize(options={})
|
31
41
|
@bin_path = options[:bin_path] || 'HandBrakeCLI'
|
32
42
|
@trace = options[:trace].nil? ? false : options[:trace]
|
43
|
+
@dry_run = options[:dry_run] || false
|
33
44
|
@runner = options[:runner] || PopenRunner.new(self)
|
34
45
|
|
35
46
|
@args = []
|
@@ -55,14 +66,32 @@ module HandBrake
|
|
55
66
|
@trace
|
56
67
|
end
|
57
68
|
|
69
|
+
##
|
70
|
+
# Is this instance in `dry_run` mode?
|
71
|
+
#
|
72
|
+
# If it is, then no commands will actually be executed. The
|
73
|
+
# constructed `HandBrakeCLI` invocations will be printed to
|
74
|
+
# standard out, instead.
|
75
|
+
def dry_run?
|
76
|
+
@dry_run
|
77
|
+
end
|
78
|
+
|
79
|
+
def fileutils_options
|
80
|
+
{
|
81
|
+
:noop => dry_run?,
|
82
|
+
:verbose => trace? || dry_run?
|
83
|
+
}
|
84
|
+
end
|
85
|
+
private :fileutils_options
|
86
|
+
|
58
87
|
##
|
59
88
|
# Performs a conversion. This method immediately begins the
|
60
89
|
# transcoding process; set all other options first.
|
61
90
|
#
|
62
91
|
# @param [String] filename the desired name for the final output
|
63
|
-
# file
|
92
|
+
# file.
|
64
93
|
# @param [Hash] options additional options to control the behavior
|
65
|
-
# of the output process
|
94
|
+
# of the output process. The provided hash will not be modified.
|
66
95
|
# @option options [Boolean,:ignore] :overwrite (true) determines
|
67
96
|
# the behavior if the desired output file already exists. If
|
68
97
|
# `true`, the file is replaced. If `false`, an exception is
|
@@ -84,6 +113,7 @@ module HandBrake
|
|
84
113
|
#
|
85
114
|
# @return [void]
|
86
115
|
def output(filename, options={})
|
116
|
+
options = options.dup
|
87
117
|
overwrite = options.delete :overwrite
|
88
118
|
case overwrite
|
89
119
|
when true, nil
|
@@ -116,6 +146,7 @@ module HandBrake
|
|
116
146
|
raise "Unknown options for output: #{options.keys.inspect}"
|
117
147
|
end
|
118
148
|
|
149
|
+
FileUtils.mkdir_p(File.dirname(interim_filename), fileutils_options)
|
119
150
|
run('--output', interim_filename)
|
120
151
|
|
121
152
|
if filename != interim_filename
|
@@ -135,7 +166,8 @@ module HandBrake
|
|
135
166
|
else
|
136
167
|
true
|
137
168
|
end
|
138
|
-
FileUtils.
|
169
|
+
FileUtils.mkdir_p(File.dirname(filename), fileutils_options)
|
170
|
+
FileUtils.mv(interim_filename, filename, fileutils_options) if replace
|
139
171
|
end
|
140
172
|
end
|
141
173
|
|
@@ -280,13 +312,18 @@ module HandBrake
|
|
280
312
|
cmd = "'" + arguments.unshift(@cli.bin_path).join("' '") + "' 2>&1"
|
281
313
|
|
282
314
|
$stderr.puts "Spawning HandBrakeCLI using #{cmd.inspect}" if @cli.trace?
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
315
|
+
if @cli.dry_run?
|
316
|
+
puts cmd
|
317
|
+
RunnerResult.new('', 0)
|
318
|
+
else
|
319
|
+
IO.popen(cmd) do |io|
|
320
|
+
while line = io.read(60)
|
321
|
+
output << line
|
322
|
+
$stderr.write(line) if @cli.trace?
|
323
|
+
end
|
287
324
|
end
|
325
|
+
RunnerResult.new(output, $?)
|
288
326
|
end
|
289
|
-
RunnerResult.new(output, $?)
|
290
327
|
end
|
291
328
|
end
|
292
329
|
|
data/lib/handbrake/version.rb
CHANGED
data/spec/handbrake/cli_spec.rb
CHANGED
@@ -96,6 +96,18 @@ module HandBrake
|
|
96
96
|
should raise_error('Unknown options for output: [:quux]')
|
97
97
|
end
|
98
98
|
|
99
|
+
it 'does not directly modify the passed-in options hash' do
|
100
|
+
options = { :overwrite => true }
|
101
|
+
cli.output(filename, options)
|
102
|
+
options[:overwrite].should be_true
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'creates the target directory when it does not exist' do
|
106
|
+
new_dir = File.join(tmpdir, 'quux')
|
107
|
+
cli.output(File.join(new_dir, 'baz.m4v'))
|
108
|
+
File.directory?(new_dir).should be_true
|
109
|
+
end
|
110
|
+
|
99
111
|
describe ':overwrite' do
|
100
112
|
context 'true' do
|
101
113
|
it 'executes when the file does not exist' do
|
@@ -179,12 +191,19 @@ module HandBrake
|
|
179
191
|
File.read(filename).should == 'This is the file created by --output'
|
180
192
|
end
|
181
193
|
|
194
|
+
it 'creates the directory for the desired filename if necessary' do
|
195
|
+
new_dir = File.join(tmpdir, 'quux')
|
196
|
+
cli.output(File.join(new_dir, 'baz.m4v'), :atomic => atomic_option_value)
|
197
|
+
File.directory?(new_dir).should be_true
|
198
|
+
end
|
199
|
+
|
182
200
|
it 'removes the temporary file' do
|
183
201
|
cli.output(filename, :atomic => atomic_option_value)
|
184
202
|
File.exist?(expected_temporary_file).should be_false
|
185
203
|
end
|
186
204
|
|
187
205
|
it 'overwrites the temporary file if it exists' do
|
206
|
+
FileUtils.mkdir_p File.dirname(expected_temporary_file)
|
188
207
|
FileUtils.touch expected_temporary_file
|
189
208
|
cli.output(filename, :atomic => atomic_option_value)
|
190
209
|
it_should_have_run(expected_temporary_file)
|
@@ -242,7 +261,7 @@ module HandBrake
|
|
242
261
|
end
|
243
262
|
|
244
263
|
context 'an alternate path' do
|
245
|
-
let(:atomic_option_value) { tmpdir
|
264
|
+
let(:atomic_option_value) { File.join(tmpdir, 'somewhere/else') } # not mkdir'd
|
246
265
|
let(:expected_temporary_file) { File.join(atomic_option_value, "foo.handbraking.m4v") }
|
247
266
|
let(:expected_no_extension_temporary_filename) {
|
248
267
|
File.join(atomic_option_value, 'foo.handbraking')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: handbrake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
12
|
+
date: 2011-08-21 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubytree
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152476560 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.8.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152476560
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152476060 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.5'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152476060
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152475600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.9.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152475600
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: yard
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152475140 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 0.7.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152475140
|
58
58
|
description: A lightweight literate ruby wrapper for HandBrakeCLI, the command-line
|
59
59
|
interface for the HandBrake video transcoder.
|
60
60
|
email:
|