gif 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/gif +3 -3
  3. data/lib/gif.rb +68 -17
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3fba3f0b2273c689eaff3d6af71bb01ef4ac9616
4
- data.tar.gz: c9163c1bb0d9895d607a002032e65c25618b208a
3
+ metadata.gz: 8869c437022a0d8199476ad435f1200563d1a16a
4
+ data.tar.gz: 81469f59ee98dc1525f3e026b2006fb85c3bb877
5
5
  SHA512:
6
- metadata.gz: 56ddf09a34630832f7e2162b07ba88503466c9007fbe58d65be7a9a742c9381f156db2bb6c033620c146c75cdfe1dd7f9e12e457bfdc2d05c0295d86e1cfd0b9
7
- data.tar.gz: d844b4ebceac64e82fc179406c22bfd0275cfaf4b8c5d7e339650eb32d83daed979163fd6f836cdcb069e550a64a7cf17136643033d27bfc4b82a82be7432598
6
+ metadata.gz: 1c87ebb3a86b7d7e900d0a777cf899faeeab0b34e18638067b6c3952e5f84f0d601009548c43ef4cc7158ad2b9dcb47e6019379a856842147eb384e722021a01
7
+ data.tar.gz: c9fe378ceaef64ad9439c5c974bbb054235706eece9531a23127849acd1c9cc387d1eb9dc1921ae0efef43d23d9cdb0b63dd40ba749b0abce4b79e4d070db74f
data/bin/gif CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  require 'gif'
4
4
 
5
- gif = Gif::CLI.new
6
- tags = ARGV.join("+")
7
- gif.search(tags)
5
+ tags = ARGV.join "+"
6
+ gif = Gif::CLI.new tags
7
+ gif.fetch
data/lib/gif.rb CHANGED
@@ -3,27 +3,78 @@ require 'digest/sha1'
3
3
 
4
4
  module Gif
5
5
  class CLI
6
- def search(tags)
7
- fetch_url = "https://api.giphy.com/v1/gifs/random?api_key=dc6zaTOxFJmzC&tag=#{tags}"
8
- raw = `curl '#{fetch_url}'`
9
- gif_json = JSON.parse(raw)
10
- gif_url = gif_json["data"]["image_original_url"]
11
- gif_sha = Digest::SHA1.hexdigest(gif_url)
12
-
13
- `curl -o #{gif_sha}.gif #{gif_url}`
14
- `convert #{gif_sha}.gif frames.jpg`
15
-
16
- width = `tput cols`.to_i / 3
17
- frames = `ls -1 *.jpg | wc -l`.to_i
6
+ def initialize tags
7
+ @tags = tags
8
+ end
9
+
10
+ def fetch
11
+ generate_url
12
+ create_images
13
+ rename_files
14
+ gif_to_terminal
15
+ `rm #{@gif_sha}.gif`
16
+ `rm #{@resized_sha}`
17
+ end
18
+
19
+ private
20
+
21
+ def generate_url
22
+ fetch_url = "https://api.giphy.com/v1/gifs/random?api_key=dc6zaTOxFJmzC&tag=#{@tags}"
23
+ gif_json = JSON.parse `curl -s '#{fetch_url}'`
24
+ @gif_url = gif_json["data"]["fixed_height_small_url"]
25
+ @gif_sha = Digest::SHA1.hexdigest @gif_url
26
+ @resized_sha = Digest::SHA1.hexdigest @gif_sha
27
+ end
28
+
29
+ def create_images
30
+ system "curl -s -o #{@gif_sha}.gif #{@gif_url}"
31
+ width = `tput cols`
32
+ height = `tput lines`
33
+ wh = [width, "x", height].join.gsub /\n/,""
34
+ fix_colors
35
+ system "gifsicle --resize-fit #{wh} --unoptimize #{@gif_sha}.gif -o #{@resized_sha}"
36
+ system "gifsicle --explode #{@resized_sha} -o frames.jpg"
37
+ end
38
+
39
+ def rename_files
40
+ filenames = Dir.glob "*.jpg.*"
41
+ filenames.each_with_index do |filename, i|
42
+ File.rename filename, "frames-" + i.to_s
43
+ end
44
+ end
45
+
46
+ def gif_to_terminal
47
+ frames = `ls -1 frames-* | wc -l`.to_i
18
48
  frames.times do |n|
19
- system "imgcat --width #{width} frames-#{n}.jpg"
20
- `rm frames-#{n}.jpg`
49
+ system "imgcat -R frames-#{n}"
50
+ sleep 1.0/24
51
+ `rm frames-#{n}`
21
52
  system "⌘ k"
22
53
  end
54
+ end
55
+
56
+ def fix_colors
57
+ suppress_output do
58
+ `gifsicle --colors=256 #{@gif_sha}.gif -o #{@gif_sha}.gif")`
59
+ end
60
+ end
23
61
 
24
- `rm #{gif_sha}.gif`
25
- puts fetch_url
26
- puts gif_json["data"]["url"]
62
+ def suppress_output
63
+ begin
64
+ original_stderr = $stderr.clone
65
+ original_stdout = $stdout.clone
66
+ $stderr.reopen(File.new('/dev/null', 'w'))
67
+ $stdout.reopen(File.new('/dev/null', 'w'))
68
+ retval = yield
69
+ rescue Exception => e
70
+ $stdout.reopen(original_stdout)
71
+ $stderr.reopen(original_stderr)
72
+ raise e
73
+ ensure
74
+ $stdout.reopen(original_stdout)
75
+ $stderr.reopen(original_stderr)
76
+ end
77
+ retval
27
78
  end
28
79
  end
29
80
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gif
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lev Kravinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-05 00:00:00.000000000 Z
11
+ date: 2016-04-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: running `gif` returns a random gif and `gif [search_term]` filters by
14
14
  tags