wgif 0.0.1.pre

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.
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require 'wgif/gif_maker'
3
+ require 'wgif/video'
4
+
5
+ describe WGif::GifMaker do
6
+ let(:gif_maker) { described_class.new }
7
+ let(:image) { double(Magick::Image) }
8
+ let(:images) { double(Magick::ImageList, each: nil) }
9
+
10
+ before do
11
+ Magick::ImageList.stub(:new).and_return(images)
12
+ end
13
+
14
+ it 'converts a directory of frames to a gif' do
15
+ images.should_receive(:coalesce)
16
+ images.should_receive(:optimize_layers)
17
+ images.should_receive(:write).with('bjork.gif')
18
+ gif_maker.make_gif([], 'bjork.gif', '500')
19
+ end
20
+
21
+ it 'resizes the image' do
22
+ expect(image).to receive(:change_geometry).with('500')
23
+ gif_maker.resize([image], '500')
24
+ end
25
+
26
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+ require 'wgif/installer'
3
+
4
+ describe WGif::Installer do
5
+ let(:installer) { described_class.new }
6
+
7
+ before do
8
+ @mock_stdout = StringIO.new
9
+ @real_stdout, $stdout = $stdout, @mock_stdout
10
+ end
11
+
12
+ after do
13
+ $stdout = @real_stdout
14
+ end
15
+
16
+ context 'checking for Homebrew' do
17
+
18
+ it 'finds Homebrew when it exists' do
19
+ expect(Kernel).to receive(:system).with('brew info > /dev/null').
20
+ and_return(true)
21
+ expect(installer.homebrew_installed?).to eq(true)
22
+ end
23
+
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)
27
+ expect(installer.homebrew_installed?).to eq(false)
28
+ end
29
+
30
+ end
31
+
32
+ context 'installing dependencies' do
33
+
34
+ it 'does not install dependencies if they are found' do
35
+ expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null').
36
+ and_return(true)
37
+ expect(Kernel).not_to receive(:system).with('brew install ffmpeg > /dev/null')
38
+ installer.install('ffmpeg', 'ffmpeg')
39
+ end
40
+
41
+ it 'installs dependencies' do
42
+ expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null').
43
+ and_return(false)
44
+ expect(Kernel).to receive(:system).with('brew install ffmpeg > /dev/null')
45
+ installer.install('ffmpeg', 'ffmpeg')
46
+ end
47
+
48
+ it 'has a list of its dependencies' do
49
+ expect(installer.class::DEPENDENCIES).
50
+ to eq([['ffmpeg', 'ffmpeg'],
51
+ ['imagemagick', 'convert']])
52
+ end
53
+
54
+ it 'checks if a dependency exists' do
55
+ expect(Kernel).to receive(:system).with('which convert > /dev/null')
56
+ installer.installed?('convert')
57
+ end
58
+
59
+ end
60
+
61
+ context 'running' do
62
+
63
+ it 'installs all dependencies' do
64
+ expect(Kernel).to receive(:system).with('brew info > /dev/null').
65
+ and_return(true)
66
+ expect(Kernel).to receive(:system).with('which ffmpeg > /dev/null').
67
+ and_return(true)
68
+ expect(Kernel).to receive(:system).with('which convert > /dev/null').
69
+ and_return(false)
70
+ expect(Kernel).to receive(:system).with('brew install imagemagick > /dev/null')
71
+ installer.run
72
+ end
73
+
74
+ it 'prints a helpful error if homebrew is not found' do
75
+ expect(Kernel).to receive(:system).with('brew info > /dev/null').
76
+ and_return(false)
77
+ expect{ installer.run }.to raise_error(SystemExit)
78
+ expect(@mock_stdout.string).to eq("WGif can't find Homebrew. Visit http://brew.sh/ to get it.\n")
79
+ end
80
+ end
81
+
82
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+ require 'wgif/video_cache'
3
+
4
+ describe WGif::VideoCache do
5
+
6
+ let(:cache) { described_class.new }
7
+
8
+ it 'checks for existing video files in /tmp' do
9
+ pathname = double(Pathname)
10
+ expect(Pathname).to receive(:new).and_return(pathname)
11
+ expect(pathname).to receive(:exist?).and_return(true)
12
+ expect(WGif::Video).to receive(:new).with('video', '/tmp/wgif/video')
13
+ cache.get('video')
14
+ end
15
+
16
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+ require 'wgif/video'
3
+
4
+ describe WGif::Video do
5
+ let(:clip) { double(FFMPEG::Movie) }
6
+
7
+ before do
8
+ FFMPEG::Movie.stub(:new).and_return(clip)
9
+ end
10
+
11
+ it 'has a name and filepath' do
12
+ clip.stub(:path).and_return('/tmp/wgif/bjork.mp4')
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
+ end
17
+
18
+ it 'sets up a logger' do
19
+ video = described_class.new "bjork", "/tmp/wgif/bjork.mp4"
20
+ video.logger.instance_variable_get(:@logdev).filename.should eq("/tmp/wgif/bjork.log")
21
+ end
22
+
23
+ it 'redirects FFMPEG log output to a file' do
24
+ expect(FFMPEG).to receive(:logger=).with(an_instance_of(Logger))
25
+ video = described_class.new "penguin", "spec/fixtures/penguin.mp4"
26
+ end
27
+
28
+ it 'is trimmable' do
29
+ clip.stub(:duration).and_return(5.0)
30
+ expect(clip).to receive(:transcode)
31
+ video = described_class.new "bjork", "/tmp/wgif/bjork.mp4"
32
+ video = video.trim("00:00:00", 5.0)
33
+ video.clip.duration.should eq(5.0)
34
+ end
35
+
36
+ it 'returns its frames' do
37
+ expect(clip).to receive(:transcode)
38
+ FileUtils.stub(:rm)
39
+ fake_frames = ["one", "two", "three"]
40
+ expect(Dir).to receive(:glob).with('/tmp/wgif/frames/*.png').twice.
41
+ and_return(fake_frames)
42
+ video = described_class.new "bjork", "/tmp/wgif/bjork.mp4"
43
+ frames = video.to_frames
44
+ frames.count.should eq(3)
45
+ end
46
+
47
+ it 'returns a specific number of frames' do
48
+ frames = '/tmp/wgif/frames/%2d.png'
49
+ options = '-vf fps=5'
50
+ expect(clip).to receive(:transcode).with(frames, options)
51
+ FileUtils.stub(:rm)
52
+ expect(clip).to receive(:duration).and_return 2
53
+ expect(Dir).to receive(:glob).with('/tmp/wgif/frames/*.png').twice
54
+ video = described_class.new "bjork", "/tmp/wgif/bjork.mp4"
55
+ frames = video.to_frames(frames: 10)
56
+ end
57
+
58
+ it 'catches transcode errors and raises an exception' do
59
+ expect(clip).to receive(:transcode).and_raise(FFMPEG::Error)
60
+ video = described_class.new "bjork", "/tmp/wgif/bjork.mp4"
61
+ expect{ video.trim("00:00:00", 5.0) }.to raise_error(WGif::ClipEncodingException)
62
+ end
63
+
64
+ it 'silences transcode errors from ripping frames' do
65
+ expect(clip).to receive(:transcode).and_raise(FFMPEG::Error.new "no output file created")
66
+ video = described_class.new "bjork", "/tmp/wgif/bjork.mp4"
67
+ expect{ video.trim("00:00:00", 5.0) }.not_to raise_error
68
+ end
69
+
70
+ it 'silences transcode errors from ripping frames when input is invalid' do
71
+ message = "no output file created. Invalid data found when processing input"
72
+ expect(clip).to receive(:transcode).and_raise(FFMPEG::Error.new message)
73
+ video = described_class.new "bjork", "/tmp/wgif/bjork.mp4"
74
+ expect{ video.trim("00:00:00", 5.0) }.to raise_error(WGif::ClipEncodingException)
75
+ end
76
+ end
data/wgif.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'wgif/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "wgif"
8
+ spec.version = WGif::VERSION
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
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = ["wgif"]
18
+ #spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+
23
+ spec.add_dependency "rmagick"
24
+ spec.add_dependency "ruby-progressbar"
25
+ spec.add_dependency "streamio-ffmpeg"
26
+ spec.add_dependency "typhoeus", "~> 0.6"
27
+ spec.add_dependency "viddl-rb"
28
+
29
+ spec.add_development_dependency "bundler", "~> 1.3"
30
+ spec.add_development_dependency "pry"
31
+ spec.add_development_dependency "rake"
32
+ spec.add_development_dependency "rspec", "~> 2.14"
33
+ spec.add_development_dependency "simplecov"
34
+ end
metadata ADDED
@@ -0,0 +1,222 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wgif
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.pre
5
+ platform: ruby
6
+ authors:
7
+ - Connor Mendenhall
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rmagick
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: ruby-progressbar
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: streamio-ffmpeg
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
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: typhoeus
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.6'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: viddl-rb
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '1.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
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'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: '2.14'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: '2.14'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: A command-line tool for creating animated GIFs.
154
+ email:
155
+ - ecmendenhall@gmail.com
156
+ executables:
157
+ - wgif
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - .gitignore
162
+ - .ruby-version
163
+ - .travis.yml
164
+ - Brewfile
165
+ - Gemfile
166
+ - LICENSE.txt
167
+ - README.md
168
+ - Rakefile
169
+ - bin/wgif
170
+ - lib/wgif.rb
171
+ - lib/wgif/cli.rb
172
+ - lib/wgif/download_bar.rb
173
+ - lib/wgif/downloader.rb
174
+ - lib/wgif/exceptions.rb
175
+ - lib/wgif/gif_maker.rb
176
+ - lib/wgif/installer.rb
177
+ - lib/wgif/version.rb
178
+ - lib/wgif/video.rb
179
+ - lib/wgif/video_cache.rb
180
+ - spec/spec_helper.rb
181
+ - spec/wgif/cli_spec.rb
182
+ - spec/wgif/download_bar_spec.rb
183
+ - spec/wgif/downloader_spec.rb
184
+ - spec/wgif/gif_maker_spec.rb
185
+ - spec/wgif/installer_spec.rb
186
+ - spec/wgif/video_cache_spec.rb
187
+ - spec/wgif/video_spec.rb
188
+ - wgif.gemspec
189
+ homepage: https://github.com/ecmendenhall/wgif
190
+ licenses:
191
+ - MIT
192
+ metadata: {}
193
+ post_install_message:
194
+ rdoc_options: []
195
+ require_paths:
196
+ - lib
197
+ required_ruby_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - '>'
205
+ - !ruby/object:Gem::Version
206
+ version: 1.3.1
207
+ requirements: []
208
+ rubyforge_project:
209
+ rubygems_version: 2.0.3
210
+ signing_key:
211
+ specification_version: 4
212
+ summary: A command-line tool for creating animated GIFs from YouTube videos. Uses
213
+ FFmpeg and ImageMagick.
214
+ test_files:
215
+ - spec/spec_helper.rb
216
+ - spec/wgif/cli_spec.rb
217
+ - spec/wgif/download_bar_spec.rb
218
+ - spec/wgif/downloader_spec.rb
219
+ - spec/wgif/gif_maker_spec.rb
220
+ - spec/wgif/installer_spec.rb
221
+ - spec/wgif/video_cache_spec.rb
222
+ - spec/wgif/video_spec.rb