memer 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: