wgif 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 08ba1fa0dea8df89d940f74671f882a6f04b7de4
4
- data.tar.gz: 4e319bbe54c49195f12bc8d070192b577403862e
3
+ metadata.gz: 1a6f0bf2c4be9fa392a29d9ce4288c56a364fdb9
4
+ data.tar.gz: 54fb5cf82fec17aaea7d81533109ea02c6c29c8f
5
5
  SHA512:
6
- metadata.gz: eb5c9ff428ece0732552bf17509f6dafb724b409bed0b2f084c2b160f878a906799a5dcbce021b8e7721842698b52d63ed3bf339f0b3c11a05afdbf2e8ee85e8
7
- data.tar.gz: debd5d76c29ef58f137f44380a9d1e313779be1b0a759bff994402a4495d1c170183e604e0e060ae5299ad0ccf2fbed07eccdb85a6ca293d5ab549c888076c98
6
+ metadata.gz: ffbd2b1b20e9a716e82d1210baf8fed2abc58a554e0ad27ce653ae8d8a629ca461900b18c5910a1b4ab118778450a1ba68de0e50f426db1d088aa203ab6a91a8
7
+ data.tar.gz: e9868668f1d15ed8bc8c908bbc12f670f8d8b0395312d069dfa4f55a12f336241857e48d8a70b3c5f955e3b03d8c7a5d2b688d7ea52383498be04b442e73a797
data/README.md CHANGED
@@ -114,6 +114,8 @@ And here it is:
114
114
  ### "You shouldn't let poets lie to you."
115
115
 
116
116
  ## Changes
117
+ - v0.5.2, 2015/1/24: Use `/usr/bin/env ruby` in binary.
118
+ - v0.5.1, 2014/8/15: Lock down dependency versions.
117
119
  - v0.5.0, 2014/8/15: Add support for sub-second timestamps in `--start` and `--duration` flags ([Issue #13](https://github.com/ecmendenhall/wgif/issues/13)).
118
120
  - v0.4.0, 2014/5/30: Show file size with `--info` flag. (Thanks, [justalisteningman](https://github.com/justalisteningman)!)
119
121
  - v0.3.1, 2014/5/10: Fixes frame order for gifs with more than 100 frames. ([Issue #14](https://github.com/ecmendenhall/wgif/issues/14))
data/bin/wgif CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env/ruby
1
+ #!/usr/bin/env ruby
2
2
 
3
3
  require 'wgif/cli'
4
4
  WGif::CLI.new.make_gif ARGV
@@ -6,6 +6,7 @@ require 'wgif/gif_maker'
6
6
  require 'wgif/installer'
7
7
  require 'wgif/info_displayer'
8
8
  require 'wgif/uploader'
9
+ require 'wgif/validator'
9
10
  require 'wgif/version'
10
11
  require 'wgif/video'
11
12
  require 'wgif/video_cache'
@@ -1,19 +1,17 @@
1
1
  require 'optparse'
2
- require 'wgif/exceptions'
2
+ require 'wgif/validator'
3
3
 
4
4
  module WGif
5
5
  class ArgumentParser
6
6
 
7
- URL = %r{\Ahttps?://.*\z}
8
- TIMESTAMP = /\A\d{1,2}(?::\d{2})+(?:\.\d*)?\z/
7
+ DEFAULTS = {
8
+ trim_from: '00:00:00',
9
+ duration: 1.0,
10
+ dimensions: '480'
11
+ }
9
12
 
10
13
  def initialize
11
14
  @options = {}
12
- @defaults = {
13
- trim_from: '00:00:00',
14
- duration: 1.0,
15
- dimensions: '480'
16
- }
17
15
  @parser = OptionParser.new do |opts|
18
16
  opts.on('-f N',
19
17
  '--frames N',
@@ -61,16 +59,20 @@ module WGif
61
59
 
62
60
  def parse(args)
63
61
  options = parse_args(args)
64
- validate_args(options)
62
+ validate(options)
65
63
  options
66
64
  end
67
65
 
66
+ def validate(args)
67
+ WGif::Validator.new(args).validate
68
+ end
69
+
68
70
  def argument_summary
69
71
  @parser.summarize
70
72
  end
71
73
 
72
74
  def parse_args(args)
73
- options = @defaults.merge(parse_options args)
75
+ options = DEFAULTS.merge(parse_options args)
74
76
  options.merge(url: args[0], output: args[1])
75
77
  end
76
78
 
@@ -79,12 +81,6 @@ module WGif
79
81
  @options
80
82
  end
81
83
 
82
- def validate_args(args)
83
- fail WGif::InvalidUrlException unless args[:url] =~ URL
84
- fail WGif::InvalidTimestampException unless args[:trim_from] =~ TIMESTAMP
85
- fail WGif::MissingOutputFileException unless args[:output]
86
- end
87
-
88
84
  def print_help
89
85
  puts 'Usage: wgif [YouTube URL] [output file] [options]', "\n"
90
86
  puts argument_summary, "\n"
@@ -1,8 +1,8 @@
1
1
  module WGif
2
2
  class InfoDisplayer
3
3
 
4
- GIGA_SIZE = 1073741824.0
5
- MEGA_SIZE = 1048576.0
4
+ GIGA_SIZE = 1_073_741_824.0
5
+ MEGA_SIZE = 1_048_576.0
6
6
  KILO_SIZE = 1024.0
7
7
 
8
8
  def display(file_name)
@@ -13,16 +13,16 @@ module WGif
13
13
  def readable_file_size(size)
14
14
 
15
15
  if size < KILO_SIZE
16
- abb, div = "Bytes", 1
16
+ abb, div = 'Bytes', 1
17
17
  elsif size < MEGA_SIZE
18
- abb, div = "KB", KILO_SIZE
18
+ abb, div = 'KB', KILO_SIZE
19
19
  elsif size < GIGA_SIZE
20
- abb, div = "MB", MEGA_SIZE
20
+ abb, div = 'MB', MEGA_SIZE
21
21
  else
22
- abb, div = "GB", GIGA_SIZE
22
+ abb, div = 'GB', GIGA_SIZE
23
23
  end
24
24
 
25
- "%.3f #{abb}" % (size / div)
25
+ format "%.3f #{abb}", (size / div)
26
26
  end
27
27
  end
28
28
  end
@@ -0,0 +1,22 @@
1
+ require 'wgif/exceptions'
2
+
3
+ module WGif
4
+ class Validator
5
+ URL = %r{\Ahttps?://.*\z}
6
+ TIMESTAMP = /\A\d{1,2}(?::\d{2})+(?:\.\d*)?\z/
7
+
8
+ def initialize(args)
9
+ @args = args
10
+ end
11
+
12
+ def validate
13
+ fail WGif::InvalidUrlException unless args[:url] =~ URL
14
+ fail WGif::InvalidTimestampException unless args[:trim_from] =~ TIMESTAMP
15
+ fail WGif::MissingOutputFileException unless args[:output]
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :args
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module WGif
2
- VERSION = '0.5.1'
2
+ VERSION = '0.5.2'
3
3
  end
@@ -17,7 +17,7 @@ module WGif
17
17
  options = {
18
18
  audio_codec: 'copy',
19
19
  video_codec: 'copy',
20
- custom: "-ss #{start_timestamp} -t 00:00:#{'%06.3f' % duration}"
20
+ custom: "-ss #{start_timestamp} -t 00:00:#{format('%06.3f', duration)}"
21
21
  }
22
22
  transcode(@clip, "/tmp/wgif/#{@name}-clip.mov", options)
23
23
  WGif::Video.new "#{@name}-clip", "/tmp/wgif/#{@name}-clip.mov"
@@ -13,7 +13,7 @@ describe 'frame order bug', regression: true do
13
13
  '170']
14
14
  WGif::CLI.new.make_gif(args)
15
15
  frames = Dir.entries('/tmp/wgif/frames')
16
- filenames = (1..170).map {|n| sprintf "%05d.png", n }
17
- expect(frames).to eq([".", ".."] + filenames)
16
+ filenames = (1..170).map { |n| sprintf '%05d.png', n }
17
+ expect(frames).to eq(['.', '..'] + filenames)
18
18
  end
19
19
  end
@@ -4,49 +4,44 @@ require 'wgif/argument_parser'
4
4
  describe WGif::ArgumentParser do
5
5
  let(:parser) { described_class.new }
6
6
 
7
- it 'parses a URL from command line args' do
8
- args = parser.parse_args ['http://example.com']
9
- args[:url].should eq('http://example.com')
10
- end
11
-
12
7
  it 'starts at 0s by default' do
13
8
  args = parser.parse_args ['http://example.com']
14
- args[:trim_from].should eq('00:00:00')
9
+ expect(args[:trim_from]).to eq('00:00:00')
15
10
  end
16
11
 
17
- it 'trims parserps to 1s by default' do
12
+ it 'trims clips to 1s by default' do
18
13
  args = parser.parse_args ['http://example.com']
19
- args[:duration].should eq(1)
14
+ expect(args[:duration]).to eq(1)
20
15
  end
21
16
 
22
17
  it 'parses the short frame count option' do
23
18
  options = parser.parse_options ['-f', '40']
24
- options[:frames].should eq(40)
19
+ expect(options[:frames]).to eq(40)
25
20
  end
26
21
 
27
22
  it 'parses the long frame count option' do
28
23
  options = parser.parse_options ['--frames', '40']
29
- options[:frames].should eq(40)
24
+ expect(options[:frames]).to eq(40)
30
25
  end
31
26
 
32
27
  it 'parses the short start time option' do
33
28
  options = parser.parse_options ['-s', '00:00:05']
34
- options[:trim_from].should eq('00:00:05')
29
+ expect(options[:trim_from]).to eq('00:00:05')
35
30
  end
36
31
 
37
32
  it 'parses the long start time option' do
38
33
  options = parser.parse_options ['--start', '00:00:05']
39
- options[:trim_from].should eq('00:00:05')
34
+ expect(options[:trim_from]).to eq('00:00:05')
40
35
  end
41
36
 
42
37
  it 'parses the short duration option' do
43
38
  options = parser.parse_options ['-d', '1.43']
44
- options[:duration].should eq(1.43)
39
+ expect(options[:duration]).to eq(1.43)
45
40
  end
46
41
 
47
42
  it 'parses the long duration option' do
48
43
  options = parser.parse_options ['--duration', '5.3']
49
- options[:duration].should eq(5.3)
44
+ expect(options[:duration]).to eq(5.3)
50
45
  end
51
46
 
52
47
  it 'parses the short dimensions option' do
@@ -83,7 +78,7 @@ describe WGif::ArgumentParser do
83
78
  options = parser.parse_options ['-i']
84
79
  expect(options[:info]).to eq(true)
85
80
  end
86
-
81
+
87
82
  it 'parses the long output option' do
88
83
  options = parser.parse_options ['--info']
89
84
  expect(options[:info]).to eq(true)
@@ -112,52 +107,4 @@ describe WGif::ArgumentParser do
112
107
  upload: true,
113
108
  preview: true)
114
109
  end
115
-
116
- context 'validating args' do
117
-
118
- it 'checks for a missing output file' do
119
- args = parser.parse_args(['http://example.com'])
120
- expect { parser.validate_args args }
121
- .to raise_error(WGif::MissingOutputFileException)
122
- end
123
-
124
- it 'checks for an invalid URL' do
125
- args = parser.parse_args(['crazy nonsense', 'output.gif'])
126
- expect { parser.validate_args args }
127
- .to raise_error(WGif::InvalidUrlException)
128
- end
129
-
130
- it 'checks for an invalid timestamp' do
131
- args = parser.parse_args([
132
- 'http://lol.wut',
133
- 'output.gif',
134
- '-s',
135
- 'rofl'
136
- ])
137
- expect { parser.validate_args args }
138
- .to raise_error(WGif::InvalidTimestampException)
139
- end
140
-
141
- it 'returns true when args are OK' do
142
- args = parser.parse_args([
143
- 'https://crazynonsense.info',
144
- 'output.gif'
145
- ])
146
- expect { parser.validate_args args }.not_to raise_error
147
- end
148
- end
149
-
150
- it 'parses and validates' do
151
- expect { parser.parse(['http://lol.wut']) }
152
- .to raise_error(WGif::MissingOutputFileException)
153
- end
154
-
155
- it 'returns parsed arguments' do
156
- args = parser.parse(['http://lol.wut', 'out.gif'])
157
- expect(args).to eq({dimensions: '480',
158
- duration: 1.0,
159
- output: 'out.gif',
160
- trim_from: '00:00:00',
161
- url: 'http://lol.wut'})
162
- end
163
- end
110
+ end
@@ -26,7 +26,7 @@ describe WGif::CLI do
26
26
  end
27
27
 
28
28
  it 'catches invalid URLs' do
29
- WGif::ArgumentParser.any_instance.stub(:parse)
29
+ allow_any_instance_of(WGif::ArgumentParser).to receive(:parse)
30
30
  .and_raise(WGif::InvalidUrlException)
31
31
  expect { cli.make_gif([]) }.to raise_error(SystemExit)
32
32
  message = 'That looks like an invalid URL. Check the syntax.'
@@ -34,7 +34,7 @@ describe WGif::CLI do
34
34
  end
35
35
 
36
36
  it 'catches invalid timestamps' do
37
- WGif::ArgumentParser.any_instance.stub(:parse)
37
+ allow_any_instance_of(WGif::ArgumentParser).to receive(:parse)
38
38
  .and_raise(WGif::InvalidTimestampException)
39
39
  expect { cli.make_gif([]) }.to raise_error(SystemExit)
40
40
  message = 'That looks like an invalid timestamp. Check the syntax.'
@@ -42,7 +42,7 @@ describe WGif::CLI do
42
42
  end
43
43
 
44
44
  it 'catches missing output args' do
45
- WGif::ArgumentParser.any_instance.stub(:parse)
45
+ allow_any_instance_of(WGif::ArgumentParser).to receive(:parse)
46
46
  .and_raise(WGif::MissingOutputFileException)
47
47
  expect { cli.make_gif([]) }.to raise_error(SystemExit)
48
48
  message = 'Please specify an output file.'
@@ -50,7 +50,7 @@ describe WGif::CLI do
50
50
  end
51
51
 
52
52
  it 'catches missing videos' do
53
- WGif::ArgumentParser.any_instance.stub(:parse)
53
+ allow_any_instance_of(WGif::ArgumentParser).to receive(:parse)
54
54
  .and_raise(WGif::VideoNotFoundException)
55
55
  expect { cli.make_gif([]) }.to raise_error(SystemExit)
56
56
  message = "WGif can't find a valid YouTube video at that URL."
@@ -58,7 +58,7 @@ describe WGif::CLI do
58
58
  end
59
59
 
60
60
  it 'catches encoding exceptions' do
61
- WGif::ArgumentParser.any_instance.stub(:parse)
61
+ allow_any_instance_of(WGif::ArgumentParser).to receive(:parse)
62
62
  .and_raise(WGif::ClipEncodingException)
63
63
  expect { cli.make_gif([]) }.to raise_error(SystemExit)
64
64
  message = 'WGif encountered an error transcoding the video.'
@@ -66,20 +66,21 @@ describe WGif::CLI do
66
66
  end
67
67
 
68
68
  it 'catches upload errors' do
69
- WGif::ArgumentParser.any_instance.stub(:parse)
69
+ allow_any_instance_of(WGif::ArgumentParser).to receive(:parse)
70
70
  .and_raise(WGif::ImgurException, 'Imgur error')
71
71
  expect { cli.make_gif([]) }.to raise_error(SystemExit)
72
72
  expect_help_with_message(@mock_stdout.string, 'Imgur error')
73
73
  end
74
74
 
75
75
  it 'raises SystemExit when thrown' do
76
- WGif::ArgumentParser.any_instance.stub(:parse).and_raise(SystemExit)
76
+ allow_any_instance_of(WGif::ArgumentParser).to receive(:parse)
77
77
  expect { cli.make_gif([]) }.to raise_error(SystemExit)
78
78
  end
79
79
 
80
80
  it 'Prints the backtrace for all other exceptions' do
81
81
  exception = StandardError.new 'crazy error'
82
- WGif::ArgumentParser.any_instance.stub(:parse).and_raise(exception)
82
+ allow_any_instance_of(WGif::ArgumentParser).to receive(:parse)
83
+ .and_raise(exception)
83
84
  expect { cli.make_gif([]) }.to raise_error(SystemExit)
84
85
  message = 'Something went wrong creating your GIF. The details:'
85
86
  expect_help_with_message(@mock_stdout.string, message)
@@ -9,7 +9,7 @@ describe WGif::DownloadBar do
9
9
  let(:mock_progress_bar) { double(ProgressBar) }
10
10
 
11
11
  before do
12
- ProgressBar.stub(:create).and_return(mock_progress_bar)
12
+ allow(ProgressBar).to receive(:create).and_return(mock_progress_bar)
13
13
  end
14
14
 
15
15
  it 'creates a ProgressBar with the correct format, smoothing, and size' do
@@ -9,46 +9,46 @@ describe WGif::Downloader do
9
9
  before do
10
10
  FileUtils.rm_rf('/tmp/wgif')
11
11
  download_bar = double(WGif::DownloadBar).as_null_object
12
- WGif::DownloadBar.stub(:new).and_return(download_bar)
12
+ allow(WGif::DownloadBar).to receive(:new).and_return(download_bar)
13
13
  end
14
14
 
15
15
  it 'retrieves a YouTube download URL' do
16
- ViddlRb.should_receive(:get_urls).with(clip_url).and_return(['clip url'])
17
- downloader.video_url(clip_url).should eq('clip url')
16
+ expect(ViddlRb).to receive(:get_urls).with(clip_url).and_return(['clip url'])
17
+ expect(downloader.video_url clip_url).to eq('clip url')
18
18
  end
19
19
 
20
20
  it 'retrieves a YouTube video ID' do
21
- downloader.video_id(clip_url).should eq('roflcopter')
21
+ expect(downloader.video_id clip_url).to eq('roflcopter')
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)
25
+ expect(ViddlRb).to receive(:get_urls).with(clip_url)
26
26
  .and_return(['http://lol.wut'])
27
27
  expect { downloader.get_video(clip_url) }
28
28
  .to raise_error(WGif::VideoNotFoundException)
29
29
  end
30
30
 
31
31
  it 'extracts a YouTube ID from a URL' do
32
- downloader.video_id('http://lol.wut?v=id').should eq('id')
32
+ expect(downloader.video_id 'http://lol.wut?v=id').to eq('id')
33
33
  end
34
34
 
35
35
  context 'downloading videos' do
36
36
 
37
37
  before do
38
- ViddlRb.stub(:get_urls).and_return([clip_url])
38
+ allow(ViddlRb).to receive(:get_urls).and_return([clip_url])
39
39
  fake_request = double('Typhoeus::Request')
40
40
  fake_response = double('Typhoeus::Response')
41
- Typhoeus::Request.should_receive(:new).once
41
+ expect(Typhoeus::Request).to receive(:new).once
42
42
  .with(clip_url).and_return(fake_request)
43
- fake_request.should_receive(:on_headers)
44
- fake_request.should_receive(:on_body)
45
- fake_request.should_receive(:run).and_return(fake_response)
46
- fake_response.should_receive(:response_code).and_return(200)
43
+ expect(fake_request).to receive(:on_headers)
44
+ expect(fake_request).to receive(:on_body)
45
+ expect(fake_request).to receive(:run).and_return(fake_response)
46
+ expect(fake_response).to receive(:response_code).and_return(200)
47
47
  end
48
48
 
49
49
  it 'downloads a clip' do
50
50
  video = double(name: 'video')
51
- WGif::Video.should_receive(:new)
51
+ expect(WGif::Video).to receive(:new)
52
52
  .with('roflcopter', '/tmp/wgif/roflcopter').and_return(video)
53
53
  downloader.get_video(clip_url)
54
54
  end
@@ -62,7 +62,7 @@ describe WGif::Downloader do
62
62
  context 'errors' do
63
63
 
64
64
  it 'throws an exception when the download URL is not found' do
65
- ViddlRb.stub(:get_urls).and_raise(RuntimeError)
65
+ allow(ViddlRb).to receive(:get_urls).and_raise(RuntimeError)
66
66
  expect { downloader.video_url('invalid url') }
67
67
  .to raise_error(WGif::VideoNotFoundException)
68
68
  end
@@ -8,13 +8,13 @@ describe WGif::GifMaker do
8
8
  let(:images) { double(Magick::ImageList, each: nil) }
9
9
 
10
10
  before do
11
- Magick::ImageList.stub(:new).and_return(images)
11
+ allow(Magick::ImageList).to receive(:new).and_return(images)
12
12
  end
13
13
 
14
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')
15
+ expect(images).to receive(:coalesce)
16
+ expect(images).to receive(:optimize_layers)
17
+ expect(images).to receive(:write).with('bjork.gif')
18
18
  gif_maker.make_gif([], 'bjork.gif', '500')
19
19
  end
20
20
 
@@ -16,7 +16,7 @@ describe WGif::InfoDisplayer do
16
16
 
17
17
  it 'prints out a file size to the command line' do
18
18
  file_name = "fake_file_name.rb"
19
- File.stub(:size).with(file_name).and_return("1048576")
19
+ allow(File).to receive(:size).with(file_name).and_return('1048576')
20
20
  cache.display(file_name)
21
21
  expect(@mock_stdout.string).to match(/1.000 MB/)
22
22
  end
@@ -27,7 +27,7 @@ describe WGif::Uploader do
27
27
  end
28
28
 
29
29
  it 'sends an authorized POST request to Imgur with image file data' do
30
- File.stub(:open).and_yield(tempfile)
30
+ allow(File).to receive(:open).and_yield(tempfile)
31
31
  expect(Typhoeus).to receive(:post)
32
32
  .with('https://api.imgur.com/3/image', request_params).and_return(success)
33
33
  uploader.upload(tempfile.path)
@@ -40,7 +40,7 @@ describe WGif::Uploader do
40
40
  end
41
41
 
42
42
  it 'returns the url when successful' do
43
- File.stub(:open).and_yield(tempfile)
43
+ allow(File).to receive(:open).and_yield(tempfile)
44
44
  expect(Typhoeus).to receive(:post)
45
45
  .with('https://api.imgur.com/3/image', request_params).and_return(success)
46
46
  expect(uploader.upload(tempfile.path)).to eq('foo')
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'wgif/validator'
3
+
4
+ describe WGif::Validator do
5
+ let(:valid_args) do
6
+ {
7
+ url: 'https://crazynonsense.info',
8
+ output: 'output.gif',
9
+ trim_from: '00:00:01'
10
+ }
11
+ end
12
+
13
+ it 'checks for a missing output file' do
14
+ args = valid_args.merge(output: nil)
15
+ expect { described_class.new(args).validate }
16
+ .to raise_error(WGif::MissingOutputFileException)
17
+ end
18
+
19
+ it 'checks for an invalid URL' do
20
+ args = valid_args.merge(url: 'crazy nonsense')
21
+ expect { described_class.new(args).validate }
22
+ .to raise_error(WGif::InvalidUrlException)
23
+ end
24
+
25
+ it 'checks for an invalid timestamp' do
26
+ args = valid_args.merge(trim_from: 'rofl')
27
+ expect { described_class.new(args).validate }
28
+ .to raise_error(WGif::InvalidTimestampException)
29
+ end
30
+
31
+ it 'returns true when args are OK' do
32
+ expect { described_class.new(valid_args).validate }
33
+ .not_to raise_error
34
+ end
35
+ end
@@ -5,20 +5,20 @@ describe WGif::Video do
5
5
  let(:clip) { double(FFMPEG::Movie) }
6
6
 
7
7
  before do
8
- FFMPEG::Movie.stub(:new).and_return(clip)
8
+ allow(FFMPEG::Movie).to receive(:new).and_return(clip)
9
9
  end
10
10
 
11
11
  it 'has a name and filepath' do
12
- clip.stub(:path).and_return('/tmp/wgif/bjork.mp4')
12
+ expect(clip).to receive(:path).and_return('/tmp/wgif/bjork.mp4')
13
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')
14
+ expect(video.name).to eq('bjork')
15
+ expect(video.clip.path).to eq('/tmp/wgif/bjork.mp4')
16
16
  end
17
17
 
18
18
  it 'sets up a logger' do
19
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')
20
+ expect(video.logger.instance_variable_get(:@logdev).filename)
21
+ .to eq('/tmp/wgif/bjork.log')
22
22
  end
23
23
 
24
24
  it 'redirects FFMPEG log output to a file' do
@@ -27,29 +27,29 @@ describe WGif::Video do
27
27
  end
28
28
 
29
29
  it 'is trimmable' do
30
- clip.stub(:duration).and_return(5.0)
30
+ expect(clip).to receive(:duration).and_return(5.0)
31
31
  expect(clip).to receive(:transcode)
32
32
  video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
33
33
  video = video.trim('00:00:00', 5.0)
34
- video.clip.duration.should eq(5.0)
34
+ expect(video.clip.duration).to eq(5.0)
35
35
  end
36
36
 
37
37
  it 'returns its frames' do
38
38
  expect(clip).to receive(:transcode)
39
- FileUtils.stub(:rm)
39
+ allow(FileUtils).to receive(:rm)
40
40
  fake_frames = ['one', 'two', 'three']
41
41
  expect(Dir).to receive(:glob).with('/tmp/wgif/frames/*.png').twice
42
42
  .and_return(fake_frames)
43
43
  video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
44
44
  frames = video.to_frames
45
- frames.count.should eq(3)
45
+ expect(frames.count).to eq(3)
46
46
  end
47
47
 
48
48
  it 'returns a specific number of frames' do
49
49
  frames = '/tmp/wgif/frames/%5d.png'
50
50
  options = '-vf fps=5'
51
51
  expect(clip).to receive(:transcode).with(frames, options)
52
- FileUtils.stub(:rm)
52
+ allow(FileUtils).to receive(:rm)
53
53
  expect(clip).to receive(:duration).and_return 2
54
54
  expect(Dir).to receive(:glob).with('/tmp/wgif/frames/*.png').twice
55
55
  video = described_class.new 'bjork', '/tmp/wgif/bjork.mp4'
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.5.1
4
+ version: 0.5.2
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-08-15 00:00:00.000000000 Z
11
+ date: 2015-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rmagick
@@ -191,6 +191,7 @@ files:
191
191
  - lib/wgif/info_displayer.rb
192
192
  - lib/wgif/installer.rb
193
193
  - lib/wgif/uploader.rb
194
+ - lib/wgif/validator.rb
194
195
  - lib/wgif/version.rb
195
196
  - lib/wgif/video.rb
196
197
  - lib/wgif/video_cache.rb
@@ -205,6 +206,7 @@ files:
205
206
  - spec/unit/wgif/info_displayer_spec.rb
206
207
  - spec/unit/wgif/installer_spec.rb
207
208
  - spec/unit/wgif/uploader_spec.rb
209
+ - spec/unit/wgif/validator_spec.rb
208
210
  - spec/unit/wgif/video_cache_spec.rb
209
211
  - spec/unit/wgif/video_spec.rb
210
212
  - wgif.gemspec
@@ -245,5 +247,6 @@ test_files:
245
247
  - spec/unit/wgif/info_displayer_spec.rb
246
248
  - spec/unit/wgif/installer_spec.rb
247
249
  - spec/unit/wgif/uploader_spec.rb
250
+ - spec/unit/wgif/validator_spec.rb
248
251
  - spec/unit/wgif/video_cache_spec.rb
249
252
  - spec/unit/wgif/video_spec.rb