memer 0.0.1 → 0.0.2

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 +43 -21
  2. metadata +5 -5
data/lib/memer.rb CHANGED
@@ -26,18 +26,22 @@ class Memer
26
26
 
27
27
  # fuzzy matching
28
28
  def IDS.[](meme)
29
- return super(meme.to_sym) if super(meme.to_sym) # if you just use it like normal
29
+ return super(meme.to_sym) if super(meme.to_sym)
30
30
 
31
- regex = Regexp.new(meme.to_s, Regexp::IGNORECASE)
32
- super(keys.find {|k, _| k.to_s =~ regex})
31
+ regex = %r{#{meme}}i
32
+ if (result = keys.select {|k, _| k.to_s =~ regex}).size > 1
33
+ Memer.whine(:message => "Ambiguous name: #{meme}", :list_memes => true)
34
+ else
35
+ super(result.first)
36
+ end
33
37
  end
34
38
 
35
39
  class << self
36
40
  def generate!(meme, line1, line2="")
37
- meme_ids = IDS[meme] || usage("No meme matches '#{meme}'")
38
- generator_id = meme_ids[:generator]
39
- image_id = meme_ids[:image]
40
- response_body = api_response(generator_id, image_id, line1, line2).body
41
+ meme_ids = IDS[meme] || whine({:message => "No meme matches '#{meme}'", :list_memes => true})
42
+ generator_id = meme_ids[:generator]
43
+ image_id = meme_ids[:image]
44
+ response_body = api_response(generator_id, image_id, line1, line2).body
41
45
 
42
46
  extract_instance_url(response_body)
43
47
  end
@@ -45,6 +49,8 @@ class Memer
45
49
  def api_response(generator_id, image_id, line1, line2)
46
50
  require 'net/http'
47
51
  Net::HTTP.get_response(uri_for(generator_id, image_id, line1, line2))
52
+ rescue => e
53
+ whine({:message => "Could not access API... No connection?\n Error: #{e.message}"})
48
54
  end
49
55
 
50
56
  def uri_for(generator_id, image_id, line1, line2)
@@ -75,8 +81,10 @@ class Memer
75
81
 
76
82
  if hash['success']
77
83
  @@instance_url = hash['result']['instanceUrl']
78
- else hash['errorMessage']
79
- usage("API returned an error: #{hash['errorMessage']}")
84
+ elsif hash['errorMessage']
85
+ whine({:message => "API returned an error: #{hash['errorMessage']}"})
86
+ else
87
+ raise("Unexpected API response: #{json_string}")
80
88
  end
81
89
  end
82
90
 
@@ -86,30 +94,44 @@ class Memer
86
94
  puts "#{string} copied to clipboard!".color(:yellow)
87
95
  end
88
96
 
89
- def usage(*messages)
90
- if messages.empty?
91
- puts "Usage:".color(:green)
92
- puts " canhaz <meme> <first-line> [second-line]".color(:yellow)
93
- else
94
- messages.each { |msg| puts msg.color(:red) }
95
- end
97
+ def pretty_memes_list
98
+ "Available memes:\n#{list = IDS.keys.map { |meme| " #{meme.to_s}" }.join("\n")}"
99
+ end
100
+
101
+ def pretty_usage
102
+ "Usage:\n canhaz <meme> <first-line> [second-line]\n canhaz [list | memes]"
103
+ end
104
+
105
+ def whine(options={})
106
+ msg = "#{options[:message]}".color(:red) if options[:message]
107
+ lst = pretty_memes_list.color(:cyan) if options[:list_memes]
108
+ usg = pretty_usage.color(:green) if options[:usage]
109
+
110
+ puts [msg, usg, lst].compact.join("\n\n")
96
111
 
97
112
  exit(1)
98
113
  end
99
114
 
115
+ def assert_username_password
116
+ if [MEME_USER, MEME_PASS].any?(&:nil?)
117
+ whine(:message => "Sign up on memegenerator.org and export $MEME_USERNAME and $MEME_PASSWORD shell variables")
118
+ end
119
+ end
120
+
100
121
  def run(args)
101
122
  require 'rainbow'
102
123
 
103
- if [MEME_USER, MEME_PASS].any?(&:nil?)
104
- usage("Sign up on memegenerator.org and export $MEME_USERNAME and $MEME_PASSWORD shell variables")
105
- end
124
+ assert_username_password
125
+
126
+ whine(:list_memes => true) if [/^meme/i, /^list/i].any? {|reg| args[0] =~ reg}
127
+ whine(:usage => true) unless args.size == 3
106
128
 
107
129
  meme, line1, line2 = *args
108
130
 
109
131
  generate!(*[meme, line1, line2].compact)
110
132
  copy_to_clipboard(@@instance_url)
111
- rescue
112
- usage
133
+ rescue => e
134
+ whine({:message => "Uncaught exception: #{e.message}"})
113
135
  end
114
136
  end
115
137
  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.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rainbow
16
- requirement: &2152400240 !ruby/object:Gem::Requirement
16
+ requirement: &2152540260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152400240
24
+ version_requirements: *2152540260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: clipboard
27
- requirement: &2152399480 !ruby/object:Gem::Requirement
27
+ requirement: &2152539500 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2152399480
35
+ version_requirements: *2152539500
36
36
  description: A command line tool to easily create and share your own memes!
37
37
  email: alexgenco@gmail.com
38
38
  executables: