wgif 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +27 -10
- data/Rakefile +8 -3
- data/lib/wgif.rb +10 -10
- data/lib/wgif/argument_parser.rb +94 -0
- data/lib/wgif/cli.rb +31 -87
- data/lib/wgif/download_bar.rb +0 -1
- data/lib/wgif/downloader.rb +23 -27
- data/lib/wgif/exceptions.rb +8 -25
- data/lib/wgif/gif_maker.rb +3 -1
- data/lib/wgif/installer.rb +2 -3
- data/lib/wgif/uploader.rb +7 -4
- data/lib/wgif/version.rb +1 -1
- data/lib/wgif/video.rb +17 -16
- data/lib/wgif/video_cache.rb +1 -4
- data/spec/integration/empty_image_list_spec.rb +18 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/unit/wgif/argument_parser_spec.rb +153 -0
- data/spec/unit/wgif/cli_spec.rb +98 -0
- data/spec/{wgif → unit/wgif}/download_bar_spec.rb +0 -0
- data/spec/{wgif → unit/wgif}/downloader_spec.rb +14 -9
- data/spec/{wgif → unit/wgif}/gif_maker_spec.rb +0 -0
- data/spec/{wgif → unit/wgif}/installer_spec.rb +45 -35
- data/spec/unit/wgif/uploader_spec.rb +48 -0
- data/spec/{wgif → unit/wgif}/video_cache_spec.rb +0 -0
- data/spec/{wgif → unit/wgif}/video_spec.rb +27 -22
- data/wgif.gemspec +22 -22
- metadata +37 -18
- data/spec/wgif/cli_spec.rb +0 -207
- data/spec/wgif/uploader_spec.rb +0 -44
File without changes
|
@@ -22,12 +22,14 @@ describe WGif::Downloader do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'throws an error if the video is not found' do
|
25
|
-
ViddlRb.should_receive(:get_urls).with(clip_url)
|
26
|
-
|
25
|
+
ViddlRb.should_receive(:get_urls).with(clip_url)
|
26
|
+
.and_return(['http://lol.wut'])
|
27
|
+
expect { downloader.get_video(clip_url) }
|
28
|
+
.to raise_error(WGif::VideoNotFoundException)
|
27
29
|
end
|
28
30
|
|
29
31
|
it 'extracts a YouTube ID from a URL' do
|
30
|
-
downloader.video_id(
|
32
|
+
downloader.video_id('http://lol.wut?v=id').should eq('id')
|
31
33
|
end
|
32
34
|
|
33
35
|
context 'downloading videos' do
|
@@ -36,7 +38,8 @@ describe WGif::Downloader do
|
|
36
38
|
ViddlRb.stub(:get_urls).and_return([clip_url])
|
37
39
|
fake_request = double('Typhoeus::Request')
|
38
40
|
fake_response = double('Typhoeus::Response')
|
39
|
-
Typhoeus::Request.should_receive(:new).once
|
41
|
+
Typhoeus::Request.should_receive(:new).once
|
42
|
+
.with(clip_url).and_return(fake_request)
|
40
43
|
fake_request.should_receive(:on_headers)
|
41
44
|
fake_request.should_receive(:on_body)
|
42
45
|
fake_request.should_receive(:run).and_return(fake_response)
|
@@ -45,9 +48,9 @@ describe WGif::Downloader do
|
|
45
48
|
|
46
49
|
it 'downloads a clip' do
|
47
50
|
video = double(name: 'video')
|
48
|
-
WGif::Video.should_receive(:new)
|
49
|
-
and_return(video)
|
50
|
-
|
51
|
+
WGif::Video.should_receive(:new)
|
52
|
+
.with('roflcopter', '/tmp/wgif/roflcopter').and_return(video)
|
53
|
+
downloader.get_video(clip_url)
|
51
54
|
end
|
52
55
|
|
53
56
|
it 'does not download the clip when already cached' do
|
@@ -60,11 +63,13 @@ describe WGif::Downloader do
|
|
60
63
|
|
61
64
|
it 'throws an exception when the download URL is not found' do
|
62
65
|
ViddlRb.stub(:get_urls).and_raise(RuntimeError)
|
63
|
-
expect{ downloader.video_url('invalid url') }
|
66
|
+
expect { downloader.video_url('invalid url') }
|
67
|
+
.to raise_error(WGif::VideoNotFoundException)
|
64
68
|
end
|
65
69
|
|
66
70
|
it 'throws an exception when the download URL is invalid' do
|
67
|
-
expect{ downloader.video_id(nil) }
|
71
|
+
expect { downloader.video_id(nil) }
|
72
|
+
.to raise_error(WGif::InvalidUrlException)
|
68
73
|
end
|
69
74
|
|
70
75
|
end
|
File without changes
|
@@ -16,14 +16,14 @@ describe WGif::Installer do
|
|
16
16
|
context 'checking for Homebrew' do
|
17
17
|
|
18
18
|
it 'finds Homebrew when it exists' do
|
19
|
-
expect(Kernel).to receive(:system).with('brew info > /dev/null')
|
20
|
-
and_return(true)
|
19
|
+
expect(Kernel).to receive(:system).with('brew info > /dev/null')
|
20
|
+
.and_return(true)
|
21
21
|
expect(installer.homebrew_installed?).to eq(true)
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'returns false when Homebrew does not exist' do
|
25
|
-
expect(Kernel).to receive(:system).with('brew info > /dev/null')
|
26
|
-
and_return(false)
|
25
|
+
expect(Kernel).to receive(:system).with('brew info > /dev/null')
|
26
|
+
.and_return(false)
|
27
27
|
expect(installer.homebrew_installed?).to eq(false)
|
28
28
|
end
|
29
29
|
|
@@ -32,18 +32,18 @@ describe WGif::Installer do
|
|
32
32
|
context 'checking for dependencies' do
|
33
33
|
|
34
34
|
it 'returns true if dependencies are installed' do
|
35
|
-
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
36
|
-
and_return(true)
|
37
|
-
expect(Kernel).to receive(:system).with('which convert > /dev/null')
|
38
|
-
and_return(true)
|
35
|
+
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
36
|
+
.and_return(true)
|
37
|
+
expect(Kernel).to receive(:system).with('which convert > /dev/null')
|
38
|
+
.and_return(true)
|
39
39
|
expect(installer.dependencies_installed?).to eq(true)
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'returns false if dependencies are not installed' do
|
43
|
-
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
44
|
-
and_return(true)
|
45
|
-
expect(Kernel).to receive(:system).with('which convert > /dev/null')
|
46
|
-
and_return(false)
|
43
|
+
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
44
|
+
.and_return(true)
|
45
|
+
expect(Kernel).to receive(:system).with('which convert > /dev/null')
|
46
|
+
.and_return(false)
|
47
47
|
expect(installer.dependencies_installed?).to eq(false)
|
48
48
|
end
|
49
49
|
|
@@ -52,23 +52,23 @@ describe WGif::Installer do
|
|
52
52
|
context 'installing dependencies' do
|
53
53
|
|
54
54
|
it 'does not install dependencies if they are found' do
|
55
|
-
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
56
|
-
and_return(true)
|
55
|
+
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
56
|
+
.and_return(true)
|
57
57
|
expect(Kernel).not_to receive(:system).with('brew install ffmpeg')
|
58
58
|
installer.install('ffmpeg', 'ffmpeg')
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'installs dependencies' do
|
62
|
-
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
63
|
-
and_return(false)
|
62
|
+
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
63
|
+
.and_return(false)
|
64
64
|
expect(Kernel).to receive(:system).with('brew install ffmpeg')
|
65
65
|
installer.install('ffmpeg', 'ffmpeg')
|
66
66
|
end
|
67
67
|
|
68
68
|
it 'has a list of its dependencies' do
|
69
|
-
expect(installer.class::DEPENDENCIES)
|
70
|
-
to eq([['ffmpeg', 'ffmpeg'],
|
71
|
-
|
69
|
+
expect(installer.class::DEPENDENCIES)
|
70
|
+
.to eq([['ffmpeg', 'ffmpeg'],
|
71
|
+
['imagemagick', 'convert']])
|
72
72
|
end
|
73
73
|
|
74
74
|
it 'checks if a dependency exists' do
|
@@ -81,26 +81,36 @@ describe WGif::Installer do
|
|
81
81
|
context 'running' do
|
82
82
|
|
83
83
|
it 'installs all dependencies' do
|
84
|
-
expect(Kernel).to receive(:system).with('brew info > /dev/null')
|
85
|
-
and_return(true)
|
86
|
-
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null').twice
|
87
|
-
and_return(true)
|
88
|
-
expect(Kernel).to receive(:system).with('which convert > /dev/null').twice
|
89
|
-
and_return(false)
|
84
|
+
expect(Kernel).to receive(:system).with('brew info > /dev/null')
|
85
|
+
.and_return(true)
|
86
|
+
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null').twice
|
87
|
+
.and_return(true)
|
88
|
+
expect(Kernel).to receive(:system).with('which convert > /dev/null').twice
|
89
|
+
.and_return(false)
|
90
90
|
expect(Kernel).to receive(:system).with('brew install imagemagick')
|
91
|
-
expect{ installer.run }.to raise_error(SystemExit)
|
91
|
+
expect { installer.run }.to raise_error(SystemExit)
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'prints a helpful error if homebrew is not found' do
|
95
|
-
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
96
|
-
and_return(true)
|
97
|
-
expect(Kernel).to receive(:system).with('which convert > /dev/null')
|
98
|
-
and_return(false)
|
99
|
-
expect(Kernel).to receive(:system).with('brew info > /dev/null')
|
100
|
-
and_return(false)
|
101
|
-
expect{ installer.run }.to raise_error(SystemExit)
|
102
|
-
expect(@mock_stdout.string)
|
95
|
+
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
96
|
+
.and_return(true)
|
97
|
+
expect(Kernel).to receive(:system).with('which convert > /dev/null')
|
98
|
+
.and_return(false)
|
99
|
+
expect(Kernel).to receive(:system).with('brew info > /dev/null')
|
100
|
+
.and_return(false)
|
101
|
+
expect { installer.run }.to raise_error(SystemExit)
|
102
|
+
expect(@mock_stdout.string)
|
103
|
+
.to eq("WGif can't find Homebrew. Visit http://brew.sh/ to get it.\n")
|
103
104
|
end
|
104
|
-
end
|
105
105
|
|
106
|
+
it 'prints a helpful message if all dependencies are installed' do
|
107
|
+
expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null')
|
108
|
+
.and_return(true)
|
109
|
+
expect(Kernel).to receive(:system).with('which convert > /dev/null')
|
110
|
+
.and_return(true)
|
111
|
+
expect { installer.run }.to raise_error(SystemExit)
|
112
|
+
expect(@mock_stdout.string)
|
113
|
+
.to eq("All dependencies are installed. Go make a gif.\n")
|
114
|
+
end
|
115
|
+
end
|
106
116
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'typhoeus'
|
4
|
+
require 'wgif/uploader'
|
5
|
+
|
6
|
+
describe WGif::Uploader do
|
7
|
+
let(:api_key) { 'api-key' }
|
8
|
+
let(:uploader) { WGif::Uploader.new(api_key) }
|
9
|
+
let(:success) do
|
10
|
+
Typhoeus::Response.new(
|
11
|
+
response_code: 200,
|
12
|
+
return_code: :ok,
|
13
|
+
body: { data: { link: 'foo' } }.to_json
|
14
|
+
)
|
15
|
+
end
|
16
|
+
let(:failure) do
|
17
|
+
Typhoeus::Response.new(
|
18
|
+
response_code: 400,
|
19
|
+
return_code: :error,
|
20
|
+
body: { data: { error: 'You broke everything!' } }.to_json
|
21
|
+
)
|
22
|
+
end
|
23
|
+
let(:tempfile) { Tempfile.new('whatever') }
|
24
|
+
let(:request_params) do
|
25
|
+
{ body: { image: tempfile },
|
26
|
+
headers: { Authorization: "Client-ID #{api_key}" } }
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'sends an authorized POST request to Imgur with image file data' do
|
30
|
+
File.stub(:open).and_yield(tempfile)
|
31
|
+
expect(Typhoeus).to receive(:post)
|
32
|
+
.with('https://api.imgur.com/3/image', request_params).and_return(success)
|
33
|
+
uploader.upload(tempfile.path)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'raises an exception if request is not successful' do
|
37
|
+
Typhoeus.stub(/http/).and_return(failure)
|
38
|
+
expect { uploader.upload(tempfile.path) }
|
39
|
+
.to raise_error(WGif::ImgurException, 'You broke everything!')
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns the url when successful' do
|
43
|
+
File.stub(:open).and_yield(tempfile)
|
44
|
+
expect(Typhoeus).to receive(:post)
|
45
|
+
.with('https://api.imgur.com/3/image', request_params).and_return(success)
|
46
|
+
expect(uploader.upload(tempfile.path)).to eq('foo')
|
47
|
+
end
|
48
|
+
end
|
File without changes
|
@@ -10,36 +10,37 @@ describe WGif::Video do
|
|
10
10
|
|
11
11
|
it 'has a name and filepath' do
|
12
12
|
clip.stub(:path).and_return('/tmp/wgif/bjork.mp4')
|
13
|
-
video = described_class.new
|
14
|
-
video.name.should eq(
|
15
|
-
video.clip.path.should eq(
|
13
|
+
video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
|
14
|
+
video.name.should eq('bjork')
|
15
|
+
video.clip.path.should eq('/tmp/wgif/bjork.mp4')
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'sets up a logger' do
|
19
|
-
video = described_class.new
|
20
|
-
video.logger.instance_variable_get(:@logdev).filename
|
19
|
+
video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
|
20
|
+
video.logger.instance_variable_get(:@logdev).filename
|
21
|
+
.should eq('/tmp/wgif/bjork.log')
|
21
22
|
end
|
22
23
|
|
23
24
|
it 'redirects FFMPEG log output to a file' do
|
24
25
|
expect(FFMPEG).to receive(:logger=).with(an_instance_of(Logger))
|
25
|
-
|
26
|
+
described_class.new 'penguin', 'spec/fixtures/penguin.mp4'
|
26
27
|
end
|
27
28
|
|
28
29
|
it 'is trimmable' do
|
29
30
|
clip.stub(:duration).and_return(5.0)
|
30
31
|
expect(clip).to receive(:transcode)
|
31
|
-
video = described_class.new
|
32
|
-
video = video.trim(
|
32
|
+
video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
|
33
|
+
video = video.trim('00:00:00', 5.0)
|
33
34
|
video.clip.duration.should eq(5.0)
|
34
35
|
end
|
35
36
|
|
36
37
|
it 'returns its frames' do
|
37
38
|
expect(clip).to receive(:transcode)
|
38
39
|
FileUtils.stub(:rm)
|
39
|
-
fake_frames = [
|
40
|
-
expect(Dir).to receive(:glob).with('/tmp/wgif/frames/*.png').twice
|
41
|
-
and_return(fake_frames)
|
42
|
-
video = described_class.new
|
40
|
+
fake_frames = ['one', 'two', 'three']
|
41
|
+
expect(Dir).to receive(:glob).with('/tmp/wgif/frames/*.png').twice
|
42
|
+
.and_return(fake_frames)
|
43
|
+
video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
|
43
44
|
frames = video.to_frames
|
44
45
|
frames.count.should eq(3)
|
45
46
|
end
|
@@ -51,26 +52,30 @@ describe WGif::Video do
|
|
51
52
|
FileUtils.stub(:rm)
|
52
53
|
expect(clip).to receive(:duration).and_return 2
|
53
54
|
expect(Dir).to receive(:glob).with('/tmp/wgif/frames/*.png').twice
|
54
|
-
video = described_class.new
|
55
|
-
|
55
|
+
video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
|
56
|
+
video.to_frames(frames: 10)
|
56
57
|
end
|
57
58
|
|
58
59
|
it 'catches transcode errors and raises an exception' do
|
59
60
|
expect(clip).to receive(:transcode).and_raise(FFMPEG::Error)
|
60
|
-
video = described_class.new
|
61
|
-
expect{ video.trim(
|
61
|
+
video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
|
62
|
+
expect { video.trim('00:00:00', 5.0) }
|
63
|
+
.to raise_error(WGif::ClipEncodingException)
|
62
64
|
end
|
63
65
|
|
64
66
|
it 'silences transcode errors from ripping frames' do
|
65
|
-
expect(clip).to receive(:transcode)
|
66
|
-
|
67
|
-
|
67
|
+
expect(clip).to receive(:transcode)
|
68
|
+
.and_raise(FFMPEG::Error.new 'no output file created')
|
69
|
+
video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
|
70
|
+
expect { video.trim('00:00:00', 5.0) }
|
71
|
+
.not_to raise_error
|
68
72
|
end
|
69
73
|
|
70
74
|
it 'silences transcode errors from ripping frames when input is invalid' do
|
71
|
-
message =
|
75
|
+
message = 'no output file created. Invalid data found when processing input'
|
72
76
|
expect(clip).to receive(:transcode).and_raise(FFMPEG::Error.new message)
|
73
|
-
video = described_class.new
|
74
|
-
expect{ video.trim(
|
77
|
+
video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
|
78
|
+
expect { video.trim('00:00:00', 5.0) }
|
79
|
+
.to raise_error(WGif::ClipEncodingException)
|
75
80
|
end
|
76
81
|
end
|
data/wgif.gemspec
CHANGED
@@ -4,30 +4,30 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'wgif/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'wgif'
|
8
8
|
spec.version = WGif::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.description = %q
|
12
|
-
spec.summary = %q
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
9
|
+
spec.authors = ['Connor Mendenhall']
|
10
|
+
spec.email = ['ecmendenhall@gmail.com']
|
11
|
+
spec.description = %q(A command-line tool for creating animated GIFs.)
|
12
|
+
spec.summary = %q(A command-line tool for creating animated GIFs from YouTube videos. Uses FFmpeg and ImageMagick.)
|
13
|
+
spec.homepage = 'https://github.com/ecmendenhall/wgif'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split($/)
|
17
|
-
spec.executables = [
|
18
|
-
spec.test_files = spec.files.grep(
|
19
|
-
spec.require_paths = [
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = ['wgif']
|
18
|
+
spec.test_files = spec.files.grep(/^(test|spec|features)\//)
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
+
spec.add_dependency 'rmagick'
|
22
|
+
spec.add_dependency 'ruby-progressbar'
|
23
|
+
spec.add_dependency 'streamio-ffmpeg'
|
24
|
+
spec.add_dependency 'typhoeus', '~> 0.6'
|
25
|
+
spec.add_dependency 'viddl-rb'
|
21
26
|
|
22
|
-
spec.
|
23
|
-
spec.
|
24
|
-
spec.
|
25
|
-
spec.
|
26
|
-
spec.
|
27
|
-
|
28
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
29
|
-
spec.add_development_dependency "pry"
|
30
|
-
spec.add_development_dependency "rake"
|
31
|
-
spec.add_development_dependency "rspec", "~> 2.14"
|
32
|
-
spec.add_development_dependency "simplecov"
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
28
|
+
spec.add_development_dependency 'codeclimate-test-reporter'
|
29
|
+
spec.add_development_dependency 'pry'
|
30
|
+
spec.add_development_dependency 'rake'
|
31
|
+
spec.add_development_dependency 'rspec', '~> 2.14'
|
32
|
+
spec.add_development_dependency 'simplecov'
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wgif
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Connor Mendenhall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rmagick
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.3'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: codeclimate-test-reporter
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: pry
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,6 +182,7 @@ files:
|
|
168
182
|
- Rakefile
|
169
183
|
- bin/wgif
|
170
184
|
- lib/wgif.rb
|
185
|
+
- lib/wgif/argument_parser.rb
|
171
186
|
- lib/wgif/cli.rb
|
172
187
|
- lib/wgif/download_bar.rb
|
173
188
|
- lib/wgif/downloader.rb
|
@@ -178,15 +193,17 @@ files:
|
|
178
193
|
- lib/wgif/version.rb
|
179
194
|
- lib/wgif/video.rb
|
180
195
|
- lib/wgif/video_cache.rb
|
196
|
+
- spec/integration/empty_image_list_spec.rb
|
181
197
|
- spec/spec_helper.rb
|
182
|
-
- spec/wgif/
|
183
|
-
- spec/wgif/
|
184
|
-
- spec/wgif/
|
185
|
-
- spec/wgif/
|
186
|
-
- spec/wgif/
|
187
|
-
- spec/wgif/
|
188
|
-
- spec/wgif/
|
189
|
-
- spec/wgif/
|
198
|
+
- spec/unit/wgif/argument_parser_spec.rb
|
199
|
+
- spec/unit/wgif/cli_spec.rb
|
200
|
+
- spec/unit/wgif/download_bar_spec.rb
|
201
|
+
- spec/unit/wgif/downloader_spec.rb
|
202
|
+
- spec/unit/wgif/gif_maker_spec.rb
|
203
|
+
- spec/unit/wgif/installer_spec.rb
|
204
|
+
- spec/unit/wgif/uploader_spec.rb
|
205
|
+
- spec/unit/wgif/video_cache_spec.rb
|
206
|
+
- spec/unit/wgif/video_spec.rb
|
190
207
|
- wgif.gemspec
|
191
208
|
homepage: https://github.com/ecmendenhall/wgif
|
192
209
|
licenses:
|
@@ -214,12 +231,14 @@ specification_version: 4
|
|
214
231
|
summary: A command-line tool for creating animated GIFs from YouTube videos. Uses
|
215
232
|
FFmpeg and ImageMagick.
|
216
233
|
test_files:
|
234
|
+
- spec/integration/empty_image_list_spec.rb
|
217
235
|
- spec/spec_helper.rb
|
218
|
-
- spec/wgif/
|
219
|
-
- spec/wgif/
|
220
|
-
- spec/wgif/
|
221
|
-
- spec/wgif/
|
222
|
-
- spec/wgif/
|
223
|
-
- spec/wgif/
|
224
|
-
- spec/wgif/
|
225
|
-
- spec/wgif/
|
236
|
+
- spec/unit/wgif/argument_parser_spec.rb
|
237
|
+
- spec/unit/wgif/cli_spec.rb
|
238
|
+
- spec/unit/wgif/download_bar_spec.rb
|
239
|
+
- spec/unit/wgif/downloader_spec.rb
|
240
|
+
- spec/unit/wgif/gif_maker_spec.rb
|
241
|
+
- spec/unit/wgif/installer_spec.rb
|
242
|
+
- spec/unit/wgif/uploader_spec.rb
|
243
|
+
- spec/unit/wgif/video_cache_spec.rb
|
244
|
+
- spec/unit/wgif/video_spec.rb
|