Class: Memer
- Inherits:
-
Object
- Object
- Memer
- Defined in:
- lib/memer.rb
Constant Summary collapse
- VERSION =
'0.0.3.2'
- ROOT_URL =
"http://version1.api.memegenerator.net"
- POST_URL =
"#{ROOT_URL}/Instance_Create"
- MEME_USER =
ENV['MEME_USERNAME']
- MEME_PASS =
ENV['MEME_PASSWORD']
- IDS =
Hash[ { :joseph_ducreux => {:generator => 54, :image => 42}, :annoying_facebook_girl => {:generator => 839, :image => 876097}, :yo_dawg => {:generator => 79, :image => 108785}, :y_u_no => {:generator => 2, :image => 166088}, :socially_awkward_penguin => {:generator => 29, :image => 983}, :trollface => {:generator => 68, :image => 269}, :courage_wolf => {:generator => 303, :image => 24}, :insanity_wolf => {:generator => 45, :image => 20}, :vengeance_dad => {:generator => 283, :image => 73438}, :successful_black_man => {:generator => 350, :image => 1570}, :scumbag_steve => {:generator => 142, :image => 366130}, :all_the_things => {:generator => 318065, :image => 1985197}, :business_cat => {:generator => 308, :image => 332591}, :advice_dog => {:generator => 225, :image => 32}, :hipster_kitty => {:generator => 360, :image => 9351}, :conspiracy_keanu => {:generator => 318374, :image => 1986282}, :first_world_problems => {:generator => 340895, :image => 2055789}, :stoner_dog => {:generator => 475, :image => 1391}, :success_kid => {:generator => 121, :image => 1031}, :one_does_not_simply => {:generator => 689854, :image => 3291562} }.sort_by {|k, _| k.to_s} ]
Class Method Summary collapse
- .api_response(generator_id, image_id, line1, line2) ⇒ Object
- .assert_username_password ⇒ Object
- .copy_to_clipboard(string) ⇒ Object
- .extract_instance_url(json_string) ⇒ Object
- .generate!(meme, line1 = "", line2 = "") ⇒ Object
- .param_string(params_hash) ⇒ Object
- .pretty_memes_list ⇒ Object
- .pretty_usage ⇒ Object
- .run(args) ⇒ Object
- .suggest_meme(original, possibles) ⇒ Object
- .uri_for(generator_id, image_id, line1, line2) ⇒ Object
- .uri_string(url, params_hash) ⇒ Object
- .whine(options = {}) ⇒ Object
Class Method Details
.api_response(generator_id, image_id, line1, line2) ⇒ Object
57 58 59 60 61 62 |
# File 'lib/memer.rb', line 57 def api_response(generator_id, image_id, line1, line2) require 'net/http' Net::HTTP.get_response(uri_for(generator_id, image_id, line1, line2)) rescue => e whine({:message => "Could not access API... No connection?\n Error: #{e.}"}) end |
.assert_username_password ⇒ Object
127 128 129 130 131 |
# File 'lib/memer.rb', line 127 def assert_username_password if [MEME_USER, MEME_PASS].any?(&:nil?) whine(:message => "Sign up on memegenerator.org and export $MEME_USERNAME and $MEME_PASSWORD shell variables") end end |
.copy_to_clipboard(string) ⇒ Object
99 100 101 102 103 |
# File 'lib/memer.rb', line 99 def copy_to_clipboard(string) require 'clipboard' Clipboard.copy(string) puts "#{string} copied to clipboard!".color(:yellow) end |
.extract_instance_url(json_string) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/memer.rb', line 85 def extract_instance_url(json_string) require 'json' hash = JSON.parse(json_string) if hash['success'] @@instance_url = hash['result']['instanceUrl'] elsif hash['errorMessage'] whine({:message => "API returned an error: #{hash['errorMessage']}"}) else raise("Unexpected API response: #{json_string}") end end |
.generate!(meme, line1 = "", line2 = "") ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/memer.rb', line 48 def generate!(meme, line1="", line2="") meme_ids = IDS[meme] || whine({:message => "No meme matches '#{meme}'", :list_memes => true}) generator_id = meme_ids[:generator] image_id = meme_ids[:image] response_body = api_response(generator_id, image_id, line1, line2).body extract_instance_url(response_body) end |
.param_string(params_hash) ⇒ Object
81 82 83 |
# File 'lib/memer.rb', line 81 def param_string(params_hash) params_hash.map { |k, v| "#{URI.escape(k.to_s)}=#{URI.escape(v.to_s)}" }.join('&') end |
.pretty_memes_list ⇒ Object
105 106 107 |
# File 'lib/memer.rb', line 105 def pretty_memes_list "Available memes:\n#{IDS.keys.map { |meme| " #{meme.to_s}" }.join("\n")}" end |
.pretty_usage ⇒ Object
109 110 111 |
# File 'lib/memer.rb', line 109 def pretty_usage "Usage:\n canhaz <meme> [first-line] [second-line]\n canhaz [list | memes]" end |
.run(args) ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/memer.rb', line 133 def run(args) require 'rainbow' assert_username_password whine(:list_memes => true) if [/^meme/i, /^list/i].any? {|reg| args[0] =~ reg} whine(:usage => true) if args.size == 0 meme, line1, line2 = *args generate!(*[meme, line1, line2].compact) copy_to_clipboard(@@instance_url) rescue => e whine({:message => "Uncaught exception: #{e.}"}) end |
.suggest_meme(original, possibles) ⇒ Object
113 114 115 |
# File 'lib/memer.rb', line 113 def suggest_meme(original, possibles) whine({:message => "Did you mean:\n#{possibles.map {|p| " #{p}"}.join("\n")}"}) end |
.uri_for(generator_id, image_id, line1, line2) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/memer.rb', line 64 def uri_for(generator_id, image_id, line1, line2) require 'uri' params = { 'generatorID' => generator_id, 'imageID' => image_id, 'text0' => line1, 'text1' => line2, 'username' => MEME_USER, 'password' => MEME_PASS } URI.parse(uri_string(POST_URL, params)) end |
.uri_string(url, params_hash) ⇒ Object
77 78 79 |
# File 'lib/memer.rb', line 77 def uri_string(url, params_hash) "#{url}?#{param_string(params_hash)}" end |
.whine(options = {}) ⇒ Object
117 118 119 120 121 122 123 124 125 |
# File 'lib/memer.rb', line 117 def whine(={}) msg = "#{[:message]}".color(:red) if [:message] lst = pretty_memes_list.color(:cyan) if [:list_memes] usg = pretty_usage.color(:green) if [:usage] puts [msg, usg, lst].compact.join("\n\n") exit(1) end |