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.
- data/lib/memer.rb +50 -50
- metadata +3 -3
data/lib/memer.rb
CHANGED
@@ -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
|
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
|
-
|
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
|
-
|
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
|
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
|
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-
|
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:
|
102
|
+
hash: 2509722191602458836
|
103
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
104
|
none: false
|
105
105
|
requirements:
|