wgif 0.0.1 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d808e6c96d0dfe1070dbcdc750412e5b4f84c862
4
- data.tar.gz: 242b7baf97aa7968e7e082af1de2ea6c933a24d7
3
+ metadata.gz: 4c2b920dfa55567f79e781514cdbec115e06c044
4
+ data.tar.gz: 9e8dea99fdfd3f316538be45f6f5508e77470aed
5
5
  SHA512:
6
- metadata.gz: b0e44313b6eb58f5c8adae849d3466eed79131707d9a107494e6ec3cf425bc9cd774ea5fdd7f34c5c2101d836e537cc8bcafe85349afef2b12f0bff5788c0455
7
- data.tar.gz: 8241d6bb255012480ffb84b79f6bea5adf6b4182eb8d0d680f7c971859bd5fd03a4b28500c9ec51fe310240c5c73d10a8a17c013bc01a6761aa02346db968505
6
+ metadata.gz: 2eeab9f6ee176bf8b412f72a722dfd9dcc8156107f760591602465a63bbee4f86dc8ae0ad7ba3d7c9c1ddbd0d282b763015eb5ba060ed61d8116be542811b9a5
7
+ data.tar.gz: e5c3125c238f0b92b25531371287170b87084ee7e80392521c32134f4c4e8082f03fd6a9bcee811f6bae6115b423310be3fd46fce64aacca6975d3b52310634a
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # WGif
2
- ![Travis Build](https://travis-ci.org/ecmendenhall/wgif.png?branch=master)
2
+ [![Build Status](https://travis-ci.org/ecmendenhall/wgif.svg?branch=master)](https://travis-ci.org/ecmendenhall/wgif)
3
3
 
4
4
  WGif is a command line tool for creating animated GIFs from YouTube videos.
5
5
 
@@ -10,11 +10,12 @@ Usage: wgif [YouTube URL] [output file] [options]
10
10
  -f, --frames N Number of frames in the final gif. (Default 20)
11
11
  -s, --start HH:MM:SS Start creating gif from input video at this timestamp. (Default 00:00:00)
12
12
  -d, --duration seconds Number of seconds of input video to capture. (Default 1)
13
+ -u, --upload Upload finished GIF to Imgur
13
14
  -w, --width pixels Width of the gif in pixels. (Default 480px)
14
15
 
15
16
  Example:
16
17
 
17
- $ wgif https://www.youtube.com/watch?v=1A78yTvIY1k bjork.gif -s 00:03:30 -d 2 -w 400
18
+ $ wgif https://www.youtube.com/watch?v=1A78yTvIY1k bjork.gif -s 00:03:30 -d 2 -w 400 --upload
18
19
  ```
19
20
 
20
21
  ## Installation (Mac OS X)
@@ -33,7 +34,7 @@ $ gem build wgif.gemspec
33
34
  and
34
35
 
35
36
  ```sh
36
- $ gem install wgif-0.0.1.pre.gem
37
+ $ gem install wgif-0.2.0.gem
37
38
  ```
38
39
 
39
40
  to install the executable.
@@ -78,11 +79,21 @@ with the `-w` or `--width` flag:
78
79
  $ wgif https://www.youtube.com/watch?v=1A78yTvIY1k bjork.gif --start 00:03:30 -d 2 -f 18 --width 350
79
80
  ```
80
81
 
82
+ And finally, now that everything's completed add the `--upload` flag to automatically post it to Imgur:
83
+
84
+ ```sh
85
+ $ wgif https://www.youtube.com/watch?v=1A78yTvIY1k bjork.gif --start 00:03:30 -d 2 -f 18 --width 350 --upload
86
+ Finished. GIF uploaded to Imgur at http://i.imgur.com/iA28DuR.gif
87
+ ```
88
+
81
89
  And here it is:
82
90
 
83
- ![Bjork](http://i.imgur.com/NZXWwey.gif)
91
+ ![Bjork](http://i.imgur.com/iA28DUR.gif)
84
92
  ### "You shouldn't let poets lie to you."
85
93
 
94
+ ## Changes
95
+ - v0.2.0, 2014/4/11: Add automatic upload to Imgur with `--upload` flag.
96
+
86
97
  ## Contributions
87
98
  Are welcome via pull request.
88
99
 
@@ -4,6 +4,7 @@ require "wgif/downloader"
4
4
  require "wgif/exceptions"
5
5
  require "wgif/gif_maker"
6
6
  require "wgif/installer"
7
+ require "wgif/uploader"
7
8
  require "wgif/version"
8
9
  require "wgif/video"
9
10
  require "wgif/video_cache"
@@ -35,6 +35,11 @@ module WGif
35
35
  'Width of the gif in pixels. (Default 500px)') {
36
36
  |gs| @options[:dimensions] = gs
37
37
  }
38
+ opts.on('-u',
39
+ '--upload',
40
+ 'Upload finished GIF to Imgur') {
41
+ |u| @options[:upload] = !!u
42
+ }
38
43
 
39
44
  opts.on_tail('-h',
40
45
  '--help',
@@ -65,6 +70,7 @@ module WGif
65
70
  WGif::Installer.new.run if cli_args[0] == 'install'
66
71
  require 'wgif/downloader'
67
72
  require 'wgif/gif_maker'
73
+ require 'wgif/uploader'
68
74
  rescue_errors do
69
75
  args = parse_args cli_args
70
76
  validate_args(args)
@@ -72,6 +78,10 @@ module WGif
72
78
  clip = video.trim(args[:trim_from], args[:duration])
73
79
  frames = clip.to_frames(frames: args[:frames])
74
80
  GifMaker.new.make_gif(frames, args[:output], args[:dimensions])
81
+ if args[:upload]
82
+ url = Uploader.new('d2321b02db7ba15').upload(args[:output])
83
+ puts "Finished. GIF uploaded to Imgur at #{url}"
84
+ end
75
85
  end
76
86
  end
77
87
 
@@ -90,6 +100,12 @@ module WGif
90
100
  print_error "WGif can't find a valid YouTube video at that URL."
91
101
  rescue WGif::ClipEncodingException
92
102
  print_error "WGif encountered an error transcoding the video."
103
+ rescue WGif::ImgurException => e
104
+ print_error <<-error
105
+ WGif couldn't upload your GIF to Imgur. The Imgur error was:
106
+
107
+ #{e}
108
+ error
93
109
  rescue SystemExit => e
94
110
  raise e
95
111
  rescue Exception => e
@@ -21,4 +21,7 @@ module WGif
21
21
  class ClipEncodingException < Exception
22
22
  end
23
23
 
24
+ class ImgurException < Exception
25
+ end
26
+
24
27
  end
@@ -0,0 +1,38 @@
1
+ require 'json'
2
+ require 'typhoeus'
3
+ require 'wgif/exceptions'
4
+
5
+ module WGif
6
+ class Uploader
7
+
8
+ UPLOAD_ENDPOINT = 'https://api.imgur.com/3/image'
9
+
10
+ def initialize(client_id)
11
+ @client_id = client_id
12
+ end
13
+
14
+ def upload(filename)
15
+ File.open(filename, 'r') do |file|
16
+ response = Typhoeus.post(UPLOAD_ENDPOINT,
17
+ body: {image: file},
18
+ headers: auth_header)
19
+ raise WGif::ImgurException, error_message(response) unless response.success?
20
+ image_url(response)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def image_url(response)
27
+ JSON.parse(response.body)['data']['link']
28
+ end
29
+
30
+ def error_message(response)
31
+ JSON.parse(response.body)['data']['error']
32
+ end
33
+
34
+ def auth_header
35
+ {Authorization: "Client-ID #{@client_id}"}
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module WGif
2
- VERSION = "0.0.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -59,6 +59,16 @@ describe WGif::CLI do
59
59
  expect(options[:dimensions]).to eq("300")
60
60
  end
61
61
 
62
+ it 'parses the short upload option' do
63
+ options = cli.parse_options ["-u"]
64
+ expect(options[:upload]).to eq(true)
65
+ end
66
+
67
+ it 'parses the long upload option' do
68
+ options = cli.parse_options ["--upload"]
69
+ expect(options[:upload]).to eq(true)
70
+ end
71
+
62
72
  it 'handles args in wacky order' do
63
73
  args = cli.parse_args([
64
74
  "-d",
@@ -164,6 +174,12 @@ describe WGif::CLI do
164
174
  expect_help_with_message(@mock_stdout.string, "WGif encountered an error transcoding the video.")
165
175
  end
166
176
 
177
+ it 'catches upload errors' do
178
+ OptionParser.any_instance.stub(:parse!).and_raise(WGif::ImgurException, "Imgur error")
179
+ expect{ cli.make_gif([]) }.to raise_error(SystemExit)
180
+ expect_help_with_message(@mock_stdout.string, "Imgur error")
181
+ end
182
+
167
183
  it 'raises SystemExit when thrown' do
168
184
  OptionParser.any_instance.stub(:parse!).and_raise(SystemExit)
169
185
  expect{ cli.make_gif([]) }.to raise_error(SystemExit)
@@ -0,0 +1,44 @@
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) { Typhoeus::Response.new(
10
+ response_code: 200,
11
+ return_code: :ok,
12
+ body: {data: {link: 'foo'}}.to_json)
13
+ }
14
+
15
+ let(:failure) { Typhoeus::Response.new(
16
+ response_code: 400,
17
+ return_code: :error,
18
+ body: {data: {error: 'You should be ashamed of yourself.'}}.to_json )
19
+ }
20
+ let(:tempfile) { Tempfile.new('whatever') }
21
+ let(:request_params) { {body: {image: tempfile},
22
+ headers: {Authorization: "Client-ID #{api_key}"}} }
23
+
24
+ it 'sends an authorized POST request to Imgur with image file data' do
25
+ File.stub(:open).and_yield(tempfile)
26
+ expect(Typhoeus).to receive(:post).
27
+ with('https://api.imgur.com/3/image', request_params).and_return(success)
28
+ uploader.upload(tempfile.path)
29
+ end
30
+
31
+ it 'raises an exception if request is not successful' do
32
+ Typhoeus.stub(/http/).and_return(failure)
33
+ expect{ uploader.upload(tempfile.path) }.
34
+ to raise_error(WGif::ImgurException, 'You should be ashamed of yourself.')
35
+ end
36
+
37
+ it 'returns the url when successful' do
38
+ File.stub(:open).and_yield(tempfile)
39
+ expect(Typhoeus).to receive(:post).
40
+ with('https://api.imgur.com/3/image', request_params).and_return(success)
41
+ expect(uploader.upload(tempfile.path)).to eq("foo")
42
+ end
43
+
44
+ end
@@ -13,9 +13,8 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "https://github.com/ecmendenhall/wgif"
14
14
  spec.license = "MIT"
15
15
 
16
- spec.files = `git ls-files`.split($/)
16
+ spec.files = `git ls-files`.split($/) << 'lib/wgif/uploader.rb'
17
17
  spec.executables = ["wgif"]
18
- #spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
19
  spec.require_paths = ["lib"]
21
20
 
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.0.1
4
+ version: 0.2.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-03-08 00:00:00.000000000 Z
11
+ date: 2014-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rmagick
@@ -174,6 +174,7 @@ files:
174
174
  - lib/wgif/exceptions.rb
175
175
  - lib/wgif/gif_maker.rb
176
176
  - lib/wgif/installer.rb
177
+ - lib/wgif/uploader.rb
177
178
  - lib/wgif/version.rb
178
179
  - lib/wgif/video.rb
179
180
  - lib/wgif/video_cache.rb
@@ -183,6 +184,7 @@ files:
183
184
  - spec/wgif/downloader_spec.rb
184
185
  - spec/wgif/gif_maker_spec.rb
185
186
  - spec/wgif/installer_spec.rb
187
+ - spec/wgif/uploader_spec.rb
186
188
  - spec/wgif/video_cache_spec.rb
187
189
  - spec/wgif/video_spec.rb
188
190
  - wgif.gemspec
@@ -218,5 +220,6 @@ test_files:
218
220
  - spec/wgif/downloader_spec.rb
219
221
  - spec/wgif/gif_maker_spec.rb
220
222
  - spec/wgif/installer_spec.rb
223
+ - spec/wgif/uploader_spec.rb
221
224
  - spec/wgif/video_cache_spec.rb
222
225
  - spec/wgif/video_spec.rb