meme_captain 0.0.8 → 0.0.9

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.
@@ -0,0 +1,142 @@
1
+ {
2
+ "thumbHeight": 50,
3
+ "thumbSpritesUrl": "http://memecaptain.com/thumbs.jpg",
4
+ "images": [
5
+ {
6
+ "url": "http://memecaptain.com/all_the_things.jpg",
7
+ "thumbWidth": 67
8
+ },
9
+ {
10
+ "url": "http://memecaptain.com/all_the_things2.jpg",
11
+ "thumbWidth": 67
12
+ },
13
+ {
14
+ "url": "http://memecaptain.com/aw_yeah.png",
15
+ "thumbWidth": 50
16
+ },
17
+ {
18
+ "url": "http://memecaptain.com/bear_grylls.jpg",
19
+ "thumbWidth": 45
20
+ },
21
+ {
22
+ "url": "http://memecaptain.com/boromir.jpg",
23
+ "thumbWidth": 85
24
+ },
25
+ {
26
+ "url": "http://memecaptain.com/business_cat.jpg",
27
+ "thumbWidth": 50
28
+ },
29
+ {
30
+ "url": "http://memecaptain.com/cool_story_bro.jpg",
31
+ "thumbWidth": 72
32
+ },
33
+ {
34
+ "url": "http://memecaptain.com/courage_wolf.jpg",
35
+ "thumbWidth": 50
36
+ },
37
+ {
38
+ "url": "http://memecaptain.com/dwight_schrute.jpg",
39
+ "thumbWidth": 73
40
+ },
41
+ {
42
+ "url": "http://memecaptain.com/fry.png",
43
+ "thumbWidth": 67
44
+ },
45
+ {
46
+ "url": "http://memecaptain.com/good_guy_greg.jpg",
47
+ "thumbWidth": 51
48
+ },
49
+ {
50
+ "url": "http://memecaptain.com/grandma.jpg",
51
+ "thumbWidth": 68
52
+ },
53
+ {
54
+ "url": "http://memecaptain.com/insanity_wolf.jpg",
55
+ "thumbWidth": 50
56
+ },
57
+ {
58
+ "url": "http://memecaptain.com/internet_husband.jpg",
59
+ "thumbWidth": 45
60
+ },
61
+ {
62
+ "url": "http://memecaptain.com/joseph_ducreux.jpg",
63
+ "thumbWidth": 38
64
+ },
65
+ {
66
+ "url": "http://memecaptain.com/me_gusta.png",
67
+ "thumbWidth": 50
68
+ },
69
+ {
70
+ "url": "http://memecaptain.com/most_interesting.jpg",
71
+ "thumbWidth": 40
72
+ },
73
+ {
74
+ "url": "http://memecaptain.com/ned_stark.jpg",
75
+ "thumbWidth": 55
76
+ },
77
+ {
78
+ "url": "http://memecaptain.com/ok.png",
79
+ "thumbWidth": 50
80
+ },
81
+ {
82
+ "url": "http://memecaptain.com/philosoraptor.jpg",
83
+ "thumbWidth": 50
84
+ },
85
+ {
86
+ "url": "http://memecaptain.com/rage.png",
87
+ "thumbWidth": 50
88
+ },
89
+ {
90
+ "url": "http://memecaptain.com/sap.jpg",
91
+ "thumbWidth": 50
92
+ },
93
+ {
94
+ "url": "http://memecaptain.com/scumbag_steve.jpg",
95
+ "thumbWidth": 50
96
+ },
97
+ {
98
+ "url": "http://memecaptain.com/seriously.png",
99
+ "thumbWidth": 50
100
+ },
101
+ {
102
+ "url": "http://memecaptain.com/slowpoke.jpg",
103
+ "thumbWidth": 50
104
+ },
105
+ {
106
+ "url": "http://memecaptain.com/success_kid.jpg",
107
+ "thumbWidth": 50
108
+ },
109
+ {
110
+ "url": "http://memecaptain.com/town_crier.jpg",
111
+ "thumbWidth": 75
112
+ },
113
+ {
114
+ "url": "http://memecaptain.com/troll_face.jpg",
115
+ "thumbWidth": 55
116
+ },
117
+ {
118
+ "url": "http://memecaptain.com/trolldad.png",
119
+ "thumbWidth": 50
120
+ },
121
+ {
122
+ "url": "http://memecaptain.com/trolldad_dancing.png",
123
+ "thumbWidth": 50
124
+ },
125
+ {
126
+ "url": "http://memecaptain.com/tyler_durden.jpg",
127
+ "thumbWidth": 50
128
+ },
129
+ {
130
+ "url": "http://memecaptain.com/xzibit.jpg",
131
+ "thumbWidth": 77
132
+ },
133
+ {
134
+ "url": "http://memecaptain.com/y_u_no.jpg",
135
+ "thumbWidth": 67
136
+ },
137
+ {
138
+ "url": "http://memecaptain.com/yao_ming.jpg",
139
+ "thumbWidth": 42
140
+ }
141
+ ]
142
+ }
data/public/thumbs.jpg CHANGED
Binary file
@@ -1,20 +1,33 @@
1
+ require 'json'
1
2
  require 'RMagick'
2
3
 
3
4
  # make a combined thumbnail image from a list of images for use in CSS sprites
5
+ # generate source images description json
4
6
 
5
- puts 'images = ['
7
+ url_prefix = 'http://memecaptain.com/'
8
+
9
+ data = {
10
+ :thumbHeight => 50,
11
+ :thumbSpritesUrl => "#{url_prefix}thumbs.jpg",
12
+ :images => [],
13
+ }
6
14
 
7
15
  thumbs = Magick::ImageList.new
8
16
 
9
17
  ARGV.sort.each do |file|
10
18
  image = Magick::ImageList.new(file)
11
- image.resize_to_fit!(0, 50)
19
+ image.resize_to_fit!(0, data[:thumbHeight])
12
20
  image.each do |frame|
13
21
  thumbs.push frame
14
- puts " ['#{File.basename(file)}', #{frame.columns}],"
22
+ data[:images] << {
23
+ :url => "#{url_prefix}#{File.basename(file)}",
24
+ :thumbWidth => frame.columns
25
+ }
15
26
  end
16
27
  end
17
28
 
18
- puts ']'
29
+ open('source_images.json', 'w') do |f|
30
+ f.write(JSON.pretty_generate(data))
31
+ end
19
32
 
20
33
  thumbs.append(false).write('thumbs.jpg')
data/views/404.erb ADDED
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>Meme Captain meme generator - Not Found</title>
7
+ </head>
8
+
9
+ <body>
10
+
11
+ <h1>Not Found</h1>
12
+
13
+ <p><a href="<%= h @root_url %>"><%= h @root_url %></a></p>
14
+
15
+ </body>
16
+
17
+ </html>
data/views/index.erb CHANGED
@@ -1,28 +1,35 @@
1
1
  <!DOCTYPE html>
2
- <html lan="en" xmlns:fb="https://www.facebook.com/2008/fbml">
2
+ <html lang="en" xmlns:fb="https://www.facebook.com/2008/fbml">
3
3
 
4
4
  <head>
5
- <title>Meme Captain</title>
6
5
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>Meme Captain meme generator</title>
7
7
  <style type="text/css">
8
+ body {
9
+ font-family : verdana, helvetica, arial, sans-serif;
10
+ }
11
+
8
12
  #sourceImages {
9
13
  background-color : #eee;
10
- border-top : 1px solid #ccc;
11
- border-bottom : 1px solid #ccc;
14
+ border : 1px solid #ccc;
12
15
  padding : 0em 1em 0.5em 1em;
13
16
  margin : 1em 0em 1em 0em;
14
17
  }
15
18
 
16
19
  img.thumb {
17
- background-image : url('thumbs.jpg');
18
- height : 50px;
20
+ margin : 2px;
21
+ }
22
+
23
+ #heading {
24
+ font-size : 1em;
25
+ font-weight : normal;
19
26
  }
20
27
  </style>
21
28
  </head>
22
29
 
23
30
  <body>
24
31
 
25
- <p><a href="/">Meme Captain</a> - add text to images from the internet</p>
32
+ <h1 id="heading"><a href="<%= h @root_url %>">Meme Captain</a> - make memes with images and text</h1>
26
33
 
27
34
  <div id="img"></div>
28
35
 
@@ -31,17 +38,17 @@ img.thumb {
31
38
  <table>
32
39
 
33
40
  <tr>
34
- <td><label for="u" />Source image URL: </label></td>
41
+ <td><label for="u">Source image URL: </label></td>
35
42
  <td><input type="text" id="u" name="u" size="64" value="<%= h @u %>"/></td>
36
43
  </tr>
37
44
 
38
45
  <tr>
39
- <td><label for="tt" />Top text: </label></td>
46
+ <td><label for="tt">Top text: </label></td>
40
47
  <td><input type="text" id="tt" name="tt" size="64" value="<%= h @tt %>" /></td>
41
48
  </tr>
42
49
 
43
50
  <tr>
44
- <td><label for="tb" />Bottom text: </label></td>
51
+ <td><label for="tb">Bottom text: </label></td>
45
52
  <td><input type="text" id="tb" name="tb" size="64" value="<%= h @tb %>" /></td>
46
53
  </tr>
47
54
 
@@ -56,73 +63,31 @@ img.thumb {
56
63
 
57
64
  <div id="sourceImages">
58
65
 
59
- <p>Locally hosted source images or search Bing for source images (click thumbnail to use):</p>
60
-
61
- <%
62
-
63
- images = [
64
- ['all_the_things.jpg', 67],
65
- ['bear_grylls.jpg', 45],
66
- ['business_cat.jpg', 50],
67
- ['courage_wolf.jpg', 50],
68
- ['dwight_schrute.jpg', 73],
69
- ['fry.png', 67],
70
- ['good_guy_greg.jpg', 51],
71
- ['grandma.jpg', 68],
72
- ['insanity_wolf.jpg', 50],
73
- ['internet_husband.jpg', 45],
74
- ['joseph_ducreux.jpg', 38],
75
- ['me_gusta.png', 50],
76
- ['most_interesting.jpg', 40],
77
- ['ok.png', 50],
78
- ['philosoraptor.jpg', 50],
79
- ['rage.png', 50],
80
- ['sap.jpg', 50],
81
- ['scumbag_steve.jpg', 50],
82
- ['seriously.png', 50],
83
- ['slowpoke.jpg', 50],
84
- ['success_kid.jpg', 50],
85
- ['town_crier.jpg', 75],
86
- ['troll_face.jpg', 55],
87
- ['trolldad.png', 50],
88
- ['trolldad_dancing.png', 50],
89
- ['tyler_durden.jpg', 50],
90
- ['xzibit.jpg', 77],
91
- ['y_u_no.jpg', 67],
92
- ['yao_ming.jpg', 42],
93
- ]
94
-
95
- pos = 0
96
- images.each do |name, offset|
97
- %>
98
- <img src="1.gif" class="thumb" style="width : <%= offset %>px; background-position : <%= pos %>px 0px;" onClick="$('#u').val('http://memecaptain.com/<%= name %>'); return false;" />
99
- <%
100
- pos -= offset
101
- end
102
- %>
103
-
104
- <div id="bingImageResults"></div>
66
+ <p>Locally hosted source images or search for source images (click thumbnail to use):</p>
67
+
68
+ <div id="imageSearchResults"></div>
105
69
 
106
70
  <form action="" method="get">
107
- <input type="text" id="bingSearch" />
108
- <input type="button" id="bingButton" value="Bing Image Search" />
71
+ <input type="text" id="imageSearch" />
72
+ <input type="button" id="imageSearchButton" value="Image Search" /> powered by Bing and Google
109
73
  </form>
110
74
 
111
75
  </div>
112
76
 
113
- <p>by Matthew M. Boedicker <a href="mailto:matthewm@boedicker.org">matthewm@boedicker.org</a></p>
77
+ <p>
78
+ Contact: Matthew M. Boedicker <a href="mailto:matthewm@boedicker.org">matthewm@boedicker.org</a> |
79
+ <a href="http://twitter.com/memecaptain">@memecaptain</a>
80
+ </p>
114
81
 
115
82
  <p><a href="https://github.com/mmb/meme_captain">source code and API</a></p>
116
83
 
117
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
84
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
118
85
  <script>
119
86
  function showBingImages(resp) {
120
- var div = $('#bingImageResults'),
87
+ var div = $('#imageSearchResults'),
121
88
  searchResponse = resp.SearchResponse,
122
89
  image = searchResponse.Image;
123
90
 
124
- div.empty();
125
-
126
91
  if (image.Total > 0) {
127
92
  $.each(image.Results, function (i, img) {
128
93
  div.append($('<img />').attr('src', img.Thumbnail.Url).click(
@@ -131,23 +96,39 @@ function showBingImages(resp) {
131
96
  });
132
97
  } else {
133
98
  div.append($('<p />').append(
134
- 'No results for "' + searchResponse.Query.SearchTerms + '".'));
99
+ 'No Bing results for "' + searchResponse.Query.SearchTerms + '".'));
100
+ }
101
+ }
102
+
103
+ function showGoogleImages(resp) {
104
+ var div = $('#imageSearchResults'),
105
+ searchResults = resp.responseData.results;
106
+
107
+ if (searchResults.length > 0) {
108
+ $.each(searchResults, function (i, img) {
109
+ div.append($('<img />').attr('src', img.tbUrl).click(
110
+ function () { $('#u').val(img.url); }
111
+ ));
112
+ });
113
+ } else {
114
+ div.append($('<p />').append('No Google results.'));
135
115
  }
136
116
  }
137
117
 
138
- function bingImageSearch() {
139
- var bingSearch = $('#bingSearch'),
140
- bingSearchVal = bingSearch.val();
118
+ function imageSearch() {
119
+ var imageSearch = $('#imageSearch'),
120
+ imageSearchVal = imageSearch.val();
141
121
 
142
- if (bingSearchVal.match(/[^\s]/)) {
143
- bingSearch.val('');
122
+ if (imageSearchVal.match(/[^\s]/)) {
123
+ imageSearch.val('');
124
+ $('#imageSearchResults').empty();
144
125
 
145
126
  $.ajax({
146
127
  type : 'GET',
147
128
  url : 'http://api.bing.net/json.aspx',
148
129
  data : {
149
130
  AppId : 'A120380275E87F0071F163210211F0592D0E964C',
150
- Query : bingSearchVal + ' imagesize:Medium',
131
+ Query : imageSearchVal + ' imagesize:Medium',
151
132
  Sources : 'Image',
152
133
  Version : '2.0',
153
134
  Market : 'en-us',
@@ -159,14 +140,49 @@ function bingImageSearch() {
159
140
  jsonpCallback : 'showBingImages',
160
141
  jsonp : 'JsonCallback'
161
142
  });
143
+
144
+ $.ajax({
145
+ type : 'GET',
146
+ url : 'http://ajax.googleapis.com/ajax/services/search/images',
147
+ data : {
148
+ imgsz : 'large',
149
+ key : 'ABQIAAAA-E0uJIHoMJX6M6atCgYANRS1DzXPXMqKnKNRJm2Z_PRWxvtqGBSOvBqyXOwxGZU5jLxExg_5ym69rw',
150
+ q : imageSearchVal,
151
+ rsz : '5',
152
+ v : '1.0',
153
+ },
154
+ dataType : 'jsonp',
155
+ jsonpCallback : 'showGoogleImages',
156
+ });
162
157
  }
163
158
  }
164
159
 
160
+ function loadSourceImages() {
161
+ $.get('source_images.json', function(data) {
162
+ var pos = 0,
163
+ div = $('#imageSearchResults');
164
+
165
+ $.each(data.images, function (i, img) {
166
+ div.before($('<img />').attr('src', '1.gif').addClass('thumb').css({
167
+ 'background-image' : 'url(' + data.thumbSpritesUrl + ')',
168
+ 'background-position' : pos + 'px 0px',
169
+ height : data.thumbHeight,
170
+ width : img.thumbWidth + 'px',
171
+ }).click(function() {
172
+ $('#u').val(img.url);
173
+ }));
174
+
175
+ pos -= img.thumbWidth;
176
+ });
177
+ });
178
+ }
179
+
165
180
  $(function () {
166
- var bingSearch,
167
- bingSearchVal,
181
+ var image,
168
182
  imgDiv;
169
183
 
184
+ loadSourceImages();
185
+
170
186
  if (window.location.search.match(/u=[^&$]/)) {
171
187
  $('#tt').focus();
172
188
 
@@ -175,9 +191,10 @@ $(function () {
175
191
  imgDiv.append($('<p />').append('Creating image ...'));
176
192
 
177
193
  $.get('/g' + window.location.search, function (data) {
178
- var img = $('<img />').attr('src', data.tempUrl),
179
- tempLink = $('<a />').attr('href', data.tempUrl).append(data.tempUrl),
180
- permLink = $('<a />').attr('href', data.permUrl).append(data.permUrl),
194
+ var img = $('<img />').attr('src', data.permUrl),
195
+ imgLink = $('<a />').attr('href', data.permUrl).append(data.permUrl),
196
+ templateLink = $('<a />').attr('href', data.templateUrl).append(
197
+ data.templateUrl),
181
198
  tweetLink = $('<a />').attr({
182
199
  href : 'http://twitter.com/share',
183
200
  'class' : 'twitter-share-button',
@@ -188,9 +205,9 @@ $(function () {
188
205
 
189
206
  imgDiv.empty().append(
190
207
  img).append(
191
- $('<p />').append('Temporary image url: ').append(tempLink)).append(
192
- $('<p />').append('Permanent image url: ').append(permLink)).append(
193
- $('<p />').append('Temporary url not guaranteed to work forever. Permanent url should work as long as source image exists.')).append(
208
+ $('<p />').append('Image: ').append(imgLink)).append(
209
+ $('<p />').append('Template: ').append(
210
+ templateLink)).append(
194
211
  $('<p />').append(tweetLink).append($('<script />').attr('src',
195
212
  'http://platform.twitter.com/widgets.js')));
196
213
 
@@ -198,7 +215,7 @@ $(function () {
198
215
  imgDiv.append(
199
216
  $('<div />').attr('id', 'fb-root')).append(
200
217
  $('<fb:like />').attr({
201
- href : data.tempUrl,
218
+ href : data.permUrl,
202
219
  send : 'true',
203
220
  width : '450',
204
221
  show_faces : 'true',
@@ -223,14 +240,14 @@ $(function () {
223
240
  $('#u').focus();
224
241
  }
225
242
 
226
- $('#bingSearch').keypress(function (event) {
227
- if (event.which == 13) {
243
+ $('#imageSearch').keypress(function (event) {
244
+ if (event.which === 13) {
228
245
  event.preventDefault();
229
- bingImageSearch();
246
+ imageSearch();
230
247
  }
231
248
  });
232
249
 
233
- $('#bingButton').click(bingImageSearch);
250
+ $('#imageSearchButton').click(imageSearch);
234
251
  });
235
252
  </script>
236
253
 
data/watermark.png ADDED
Binary file
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meme_captain
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 8
10
- version: 0.0.8
9
+ - 9
10
+ version: 0.0.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matthew M. Boedicker
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-23 00:00:00 -05:00
18
+ date: 2012-01-19 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: curb
22
+ name: bson_ext
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
@@ -33,7 +33,7 @@ dependencies:
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: json
36
+ name: curb
37
37
  prerelease: false
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
@@ -47,7 +47,7 @@ dependencies:
47
47
  type: :runtime
48
48
  version_requirements: *id002
49
49
  - !ruby/object:Gem::Dependency
50
- name: mime-types
50
+ name: json
51
51
  prerelease: false
52
52
  requirement: &id003 !ruby/object:Gem::Requirement
53
53
  none: false
@@ -61,7 +61,7 @@ dependencies:
61
61
  type: :runtime
62
62
  version_requirements: *id003
63
63
  - !ruby/object:Gem::Dependency
64
- name: rack
64
+ name: mime-types
65
65
  prerelease: false
66
66
  requirement: &id004 !ruby/object:Gem::Requirement
67
67
  none: false
@@ -75,7 +75,7 @@ dependencies:
75
75
  type: :runtime
76
76
  version_requirements: *id004
77
77
  - !ruby/object:Gem::Dependency
78
- name: rmagick
78
+ name: mongo
79
79
  prerelease: false
80
80
  requirement: &id005 !ruby/object:Gem::Requirement
81
81
  none: false
@@ -89,7 +89,7 @@ dependencies:
89
89
  type: :runtime
90
90
  version_requirements: *id005
91
91
  - !ruby/object:Gem::Dependency
92
- name: sinatra
92
+ name: mongo_mapper
93
93
  prerelease: false
94
94
  requirement: &id006 !ruby/object:Gem::Requirement
95
95
  none: false
@@ -102,11 +102,53 @@ dependencies:
102
102
  version: "0"
103
103
  type: :runtime
104
104
  version_requirements: *id006
105
+ - !ruby/object:Gem::Dependency
106
+ name: rack
107
+ prerelease: false
108
+ requirement: &id007 !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ type: :runtime
118
+ version_requirements: *id007
119
+ - !ruby/object:Gem::Dependency
120
+ name: rmagick
121
+ prerelease: false
122
+ requirement: &id008 !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ hash: 3
128
+ segments:
129
+ - 0
130
+ version: "0"
131
+ type: :runtime
132
+ version_requirements: *id008
133
+ - !ruby/object:Gem::Dependency
134
+ name: sinatra
135
+ prerelease: false
136
+ requirement: &id009 !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ hash: 3
142
+ segments:
143
+ - 0
144
+ version: "0"
145
+ type: :runtime
146
+ version_requirements: *id009
105
147
  description: create meme images
106
148
  email:
107
149
  - matthewm@boedicker.org
108
- executables: []
109
-
150
+ executables:
151
+ - memecaptain
110
152
  extensions: []
111
153
 
112
154
  extra_rdoc_files: []
@@ -116,24 +158,31 @@ files:
116
158
  - COPYING
117
159
  - ChangeLog
118
160
  - README.md
161
+ - bin/memecaptain
119
162
  - config.ru
120
- - img_cache/source/.gitignore
121
163
  - lib/meme_captain.rb
122
164
  - lib/meme_captain/caption.rb
123
165
  - lib/meme_captain/caption_choice.rb
124
166
  - lib/meme_captain/draw.rb
125
167
  - lib/meme_captain/file_body.rb
126
- - lib/meme_captain/filesystem_cache.rb
168
+ - lib/meme_captain/image_list.rb
169
+ - lib/meme_captain/image_list/cache.rb
170
+ - lib/meme_captain/image_list/fetch.rb
171
+ - lib/meme_captain/image_list/source_image.rb
172
+ - lib/meme_captain/image_list/watermark.rb
127
173
  - lib/meme_captain/meme.rb
128
- - lib/meme_captain/mime_type.rb
174
+ - lib/meme_captain/meme_data.rb
129
175
  - lib/meme_captain/server.rb
130
176
  - lib/meme_captain/version.rb
131
177
  - meme_captain.gemspec
132
178
  - public/1.gif
179
+ - public/source_images.json
133
180
  - public/thumbs.jpg
134
181
  - public/tmp/.gitignore
135
182
  - script/thumb_sprites.rb
183
+ - views/404.erb
136
184
  - views/index.erb
185
+ - watermark.png
137
186
  has_rdoc: true
138
187
  homepage: https://github.com/mmb/meme_captain
139
188
  licenses: []
File without changes