memer 0.0.3.4 → 0.1.0

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 +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: