memer 0.0.3.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/memer.rb +50 -50
  2. metadata +3 -3
@@ -1,5 +1,11 @@
1
+ require 'rainbow'
2
+ require 'net/http'
3
+ require 'uri'
4
+ require 'json'
5
+ require 'clipboard'
6
+
1
7
  class Memer
2
- VERSION = '0.0.3.4'
8
+ VERSION = '0.1.0'
3
9
 
4
10
  ROOT_URL = "http://version1.api.memegenerator.net"
5
11
  POST_URL = "#{ROOT_URL}/Instance_Create"
@@ -34,17 +40,56 @@ class Memer
34
40
  def IDS.[](meme)
35
41
  return super(meme.to_sym) if super(meme.to_sym)
36
42
 
37
- regex = %r{^#{meme}}i
38
- if (result = keys.select {|k, _| k.to_s =~ regex}).size > 1
43
+ if (result = keys.select {|k, _| k.to_s =~ /^#{meme}/i}).size > 1
39
44
  Memer.suggest_meme(meme, result)
40
- else
45
+ elsif result.size == 1
41
46
  super(result.first)
47
+ else
48
+ Memer.whine({:message => "No meme matches '#{meme}'", :list_memes => true})
42
49
  end
43
50
  end
44
51
 
45
52
  class << self
53
+ def run(args)
54
+ assert_username_password
55
+
56
+ whine(:list_memes => true) if args[0] == 'memes' || args[0] == 'list'
57
+ whine(:usage => true) if args.size == 0
58
+
59
+ meme, line1, line2 = *args
60
+
61
+ generate!(*[meme, line1, line2].compact)
62
+ copy_to_clipboard(@@instance_url)
63
+ rescue => e
64
+ whine({:message => "Uncaught exception: #{e.message}"})
65
+ end
66
+
67
+ def assert_username_password
68
+ if [MEME_USER, MEME_PASS].any?(&:nil?)
69
+ whine(:message => "Sign up on memegenerator.org and export $MEME_USERNAME and $MEME_PASSWORD shell variables")
70
+ end
71
+ end
72
+
73
+ def whine(options={})
74
+ msg = "#{options[:message]}".color(:red) if options[:message]
75
+ lst = pretty_memes_list.color(:cyan) if options[:list_memes]
76
+ usg = pretty_usage.color(:green) if options[:usage]
77
+
78
+ puts [msg, usg, lst].compact.join("\n\n")
79
+
80
+ exit(1)
81
+ end
82
+
83
+ def pretty_memes_list
84
+ "Available memes:\n#{IDS.keys.map { |meme| " #{meme.to_s}" }.join("\n")}"
85
+ end
86
+
87
+ def pretty_usage
88
+ "Usage:\n canhaz <meme> [first-line] [second-line]\n canhaz [list | memes]"
89
+ end
90
+
46
91
  def generate!(meme, line1="", line2="")
47
- meme_ids = IDS[meme] || whine({:message => "No meme matches '#{meme}'", :list_memes => true})
92
+ meme_ids = IDS[meme]
48
93
  generator_id = meme_ids[:generator]
49
94
  image_id = meme_ids[:image]
50
95
  response_body = api_response(generator_id, image_id, line1, line2).body
@@ -53,14 +98,12 @@ class Memer
53
98
  end
54
99
 
55
100
  def api_response(generator_id, image_id, line1, line2)
56
- require 'net/http'
57
101
  Net::HTTP.get_response(uri_for(generator_id, image_id, line1, line2))
58
102
  rescue => e
59
103
  whine({:message => "Could not access API... No connection?\n Error: #{e.message}"})
60
104
  end
61
105
 
62
106
  def uri_for(generator_id, image_id, line1, line2)
63
- require 'uri'
64
107
  params = {
65
108
  'generatorID' => generator_id,
66
109
  'imageID' => image_id,
@@ -81,8 +124,6 @@ class Memer
81
124
  end
82
125
 
83
126
  def extract_instance_url(json_string)
84
- require 'json'
85
-
86
127
  hash = JSON.parse(json_string)
87
128
 
88
129
  if hash['success']
@@ -95,53 +136,12 @@ class Memer
95
136
  end
96
137
 
97
138
  def copy_to_clipboard(string)
98
- require 'clipboard'
99
139
  Clipboard.copy(string)
100
140
  puts "#{string} copied to clipboard!".color(:yellow)
101
141
  end
102
142
 
103
- def pretty_memes_list
104
- "Available memes:\n#{IDS.keys.map { |meme| " #{meme.to_s}" }.join("\n")}"
105
- end
106
-
107
- def pretty_usage
108
- "Usage:\n canhaz <meme> [first-line] [second-line]\n canhaz [list | memes]"
109
- end
110
-
111
143
  def suggest_meme(original, possibles)
112
144
  whine({:message => "Did you mean:\n#{possibles.map {|p| " #{p}"}.join("\n")}"})
113
145
  end
114
-
115
- def whine(options={})
116
- msg = "#{options[:message]}".color(:red) if options[:message]
117
- lst = pretty_memes_list.color(:cyan) if options[:list_memes]
118
- usg = pretty_usage.color(:green) if options[:usage]
119
-
120
- puts [msg, usg, lst].compact.join("\n\n")
121
-
122
- exit(1)
123
- end
124
-
125
- def assert_username_password
126
- if [MEME_USER, MEME_PASS].any?(&:nil?)
127
- whine(:message => "Sign up on memegenerator.org and export $MEME_USERNAME and $MEME_PASSWORD shell variables")
128
- end
129
- end
130
-
131
- def run(args)
132
- require 'rainbow'
133
-
134
- assert_username_password
135
-
136
- whine(:list_memes => true) if args[0] == 'memes' || args[0] == 'list'
137
- whine(:usage => true) if args.size == 0
138
-
139
- meme, line1, line2 = *args
140
-
141
- generate!(*[meme, line1, line2].compact)
142
- copy_to_clipboard(@@instance_url)
143
- rescue => e
144
- whine({:message => "Uncaught exception: #{e.message}"})
145
- end
146
146
  end
147
147
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.4
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-25 00:00:00.000000000 Z
12
+ date: 2012-03-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -99,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
99
  version: '0'
100
100
  segments:
101
101
  - 0
102
- hash: 2324165032918034513
102
+ hash: 2509722191602458836
103
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  none: false
105
105
  requirements: