meme_captain 0.1.2 → 0.3.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.
- checksums.yaml +7 -0
- data/.travis.yml +8 -0
- data/ChangeLog +18 -0
- data/Gemfile +1 -1
- data/README.md +3 -45
- data/Rakefile +38 -0
- data/lib/meme_captain.rb +0 -6
- data/lib/meme_captain/caption.rb +10 -5
- data/lib/meme_captain/caption_choice.rb +3 -1
- data/lib/meme_captain/image_list.rb +0 -5
- data/lib/meme_captain/image_list/watermark.rb +1 -1
- data/lib/meme_captain/meme.rb +6 -2
- data/lib/meme_captain/memebg.rb +1 -1
- data/lib/meme_captain/text_pos.rb +9 -7
- data/lib/meme_captain/version.rb +1 -1
- data/meme_captain.gemspec +6 -17
- data/spec/assets/Coda-Heavy.ttf +0 -0
- data/spec/assets/me_gusta.png +0 -0
- data/spec/assets/otter.gif +0 -0
- data/spec/assets/town_crier.jpg +0 -0
- data/spec/caption_choice_spec.rb +4 -4
- data/spec/caption_spec.rb +22 -13
- data/spec/meme_captain_spec.rb +15 -1
- data/spec/memebg_spec.rb +2 -2
- data/spec/text_pos_spec.rb +11 -11
- metadata +38 -207
- data/config.ru +0 -50
- data/doc/lightweight_front_end.md +0 -64
- data/doc/setup.md +0 -13
- data/lib/meme_captain/image_list/cache.rb +0 -49
- data/lib/meme_captain/image_list/fetch.rb +0 -28
- data/lib/meme_captain/image_list/fetch_error.rb +0 -17
- data/lib/meme_captain/image_list/source_image.rb +0 -30
- data/lib/meme_captain/meme_data.rb +0 -33
- data/lib/meme_captain/norm_params.rb +0 -92
- data/lib/meme_captain/pretty_format.rb +0 -12
- data/lib/meme_captain/server.rb +0 -303
- data/lib/meme_captain/source_fetch_fail.rb +0 -28
- data/lib/meme_captain/upload.rb +0 -30
- data/public/css/screen.css +0 -80
- data/public/favicon.ico +0 -0
- data/public/js/fabric.min.js +0 -4
- data/public/js/jquery-1.7.2.min.js +0 -4
- data/public/js/meme_captain.js +0 -391
- data/public/source_images.json +0 -234
- data/public/thumbs.jpg +0 -0
- data/public/thumbs_1330486916.jpg +0 -0
- data/public/thumbs_1333591668.jpg +0 -0
- data/public/thumbs_1334189407.jpg +0 -0
- data/public/thumbs_1334973608.jpg +0 -0
- data/public/thumbs_1336623277.jpg +0 -0
- data/public/thumbs_1336624196.jpg +0 -0
- data/public/thumbs_1339811279.jpg +0 -0
- data/public/tmp/.gitignore +0 -0
- data/script/thumb_sprites.rb +0 -76
- data/spec/image_list/fetch_spec.rb +0 -33
- data/spec/norm_params_spec.rb +0 -223
- data/spec/pretty_format_spec.rb +0 -9
- data/views/404.erb +0 -17
- data/views/index.erb +0 -130
- data/watermark.png +0 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 5edd684be8bf3e4e16efc36df7fc1bc0e0b586b49bf37fc986e0c1a9a655a534
|
|
4
|
+
data.tar.gz: 9d6f38081c90df4b2c54e9db68d56422c40faf83669a6a566d69a568053abda6
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 8cff67ab31b784d57e71c86cd2d3348f177749e6dd7bcfe6f4dfe517e3aa3cd8cae3e6b6e6c5882c211160ce372b14d427b7e521e3ad9a978f9f4abb8545ef37
|
|
7
|
+
data.tar.gz: 8c21d18d78a18b6b0890ef3ecf154f6d4930f099c8c33a06bf1ca3ead3a510e61559289da7679eb65a0210a5c5489c3000c99fb269d526395ea74fdead36e26f
|
data/.travis.yml
ADDED
data/ChangeLog
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
0.3.0 2013-06-25
|
|
2
|
+
|
|
3
|
+
Move Sinatra web application to meme_captain_web_v1 repo.
|
|
4
|
+
|
|
5
|
+
0.2.0 2013-06-10
|
|
6
|
+
|
|
7
|
+
Blur stroke.
|
|
8
|
+
|
|
9
|
+
0.1.3 2013-06-06
|
|
10
|
+
|
|
11
|
+
Default super_sample to 1.0.
|
|
12
|
+
|
|
13
|
+
Add sample generator rake task.
|
|
14
|
+
|
|
15
|
+
Add travis ci and code climate.
|
|
16
|
+
|
|
17
|
+
Fix rubygems source.
|
|
18
|
+
|
|
1
19
|
0.1.1 2012-04-26
|
|
2
20
|
|
|
3
21
|
Update jQuery and fabric.js to latest versions.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
[](https://travis-ci.org/mmb/meme_captain)
|
|
2
|
+
[](https://codeclimate.com/github/mmb/meme_captain)
|
|
3
|
+
|
|
1
4
|
Ruby gem to create meme images (images with text added).
|
|
2
5
|
|
|
3
6
|
Runs locally and has no web dependencies.
|
|
@@ -42,48 +45,3 @@ Text box sizes and positions can be specified as pixels (the origin is the top
|
|
|
42
45
|
left corner of the image) or as floats which are percentages of the image
|
|
43
46
|
width and height. The x and y coordinates of a text box are the coordinates
|
|
44
47
|
of its top left corner.
|
|
45
|
-
|
|
46
|
-
Also includes a Sinatra app that exposes the API over HTTP which is currently
|
|
47
|
-
running http://memecaptain.com/
|
|
48
|
-
|
|
49
|
-
You can use the memecaptain.com API if you prefer it to using the gem.
|
|
50
|
-
|
|
51
|
-
Simplest API:
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
http://memecaptain.com/i?u=<url encoded source image url>&t1=<url encoded top text>&t2=<url encoded bottom text>
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Example:
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
http://memecaptain.com/i?u=http%3A%2F%2Fmemecaptain.com%2Fyao_ming.jpg&t1=sure+i%27ll+test&t2=the+api
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-

|
|
64
|
-
|
|
65
|
-
If you want better error messages, use this which will return JSON:
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
http://memecaptain.com/g?u=<url encoded source image url>&t1=<url encoded top text>&t2=<url encoded bottom text>
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Example:
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
http://memecaptain.com/g?u=http%3A%2F%2Fmemecaptain.com%2Fyao_ming.jpg&t1=sure+i%27ll+test&t2=the+api
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
```json
|
|
78
|
-
{
|
|
79
|
-
imageUrl: "http://memecaptain.com/c7757f.jpg",
|
|
80
|
-
templateUrl: "http://memecaptain.com/?u=c7757f.jpg"
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Optional parameters t1x, t1y, t1w, t1h, t2x, t2y, t2w, t2h can be added to
|
|
85
|
-
position and size text (see example above).
|
|
86
|
-
|
|
87
|
-
If you want to host a customized version of the memecaptain.com web interface
|
|
88
|
-
on your own web server but use the memecaptain.com backend see
|
|
89
|
-
[lightweight front end](https://github.com/mmb/meme_captain/blob/master/doc/lightweight_front_end.md).
|
data/Rakefile
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'tempfile'
|
|
2
|
+
|
|
3
|
+
require 'rspec/core/rake_task'
|
|
4
|
+
|
|
5
|
+
require 'meme_captain'
|
|
6
|
+
|
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
8
|
+
|
|
9
|
+
task :default => :spec
|
|
10
|
+
|
|
11
|
+
desc 'Generate various sample memes and open them in a browser'
|
|
12
|
+
task 'sample' do
|
|
13
|
+
source_images = {
|
|
14
|
+
gif: File.read(File.join(%w{spec assets otter.gif})),
|
|
15
|
+
jpg: File.read(File.join(%w{spec assets town_crier.jpg})),
|
|
16
|
+
png: File.read(File.join(%w{spec assets me_gusta.png})),
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
words = %w{the quick brown fox jumped over the lazy dog}.cycle
|
|
20
|
+
|
|
21
|
+
dir = Dir.mktmpdir
|
|
22
|
+
|
|
23
|
+
word_tests = [1] +(5..50).step(5).to_a
|
|
24
|
+
|
|
25
|
+
html = File.join(dir, 'sample.html')
|
|
26
|
+
open(html, 'w') do |f|
|
|
27
|
+
source_images.each do |ext, data|
|
|
28
|
+
word_tests.each do |num_words|
|
|
29
|
+
img_file = File.join(dir, "i#{num_words}.#{ext}")
|
|
30
|
+
puts img_file
|
|
31
|
+
MemeCaptain.meme_top_bottom(data, words.take(num_words).join(' '), nil, font: 'Impact-Regular').write(img_file)
|
|
32
|
+
f.write("<img src=\"#{img_file}\">\n")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
`open #{html}`
|
|
38
|
+
end
|
data/lib/meme_captain.rb
CHANGED
|
@@ -4,11 +4,5 @@ require 'meme_captain/draw'
|
|
|
4
4
|
require 'meme_captain/image_list'
|
|
5
5
|
require 'meme_captain/meme'
|
|
6
6
|
require 'meme_captain/memebg'
|
|
7
|
-
require 'meme_captain/meme_data'
|
|
8
|
-
require 'meme_captain/norm_params'
|
|
9
|
-
require 'meme_captain/pretty_format'
|
|
10
|
-
require 'meme_captain/server'
|
|
11
|
-
require 'meme_captain/source_fetch_fail'
|
|
12
7
|
require 'meme_captain/text_pos'
|
|
13
|
-
require 'meme_captain/upload'
|
|
14
8
|
require 'meme_captain/version'
|
data/lib/meme_captain/caption.rb
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
1
3
|
module MemeCaptain
|
|
2
4
|
|
|
3
5
|
class Caption < String
|
|
4
6
|
|
|
5
|
-
def initialize(s='')
|
|
7
|
+
def initialize(s = '')
|
|
6
8
|
super s.to_s
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
# Return the contents of the string quoted for ImageMagick annotate.
|
|
10
12
|
def annotate_quote
|
|
11
|
-
Caption.new(
|
|
13
|
+
Caption.new(
|
|
14
|
+
gsub('\\', '\\\\\\').
|
|
15
|
+
gsub('%', '%%').
|
|
16
|
+
gsub(/^@/, '\@'))
|
|
12
17
|
end
|
|
13
18
|
|
|
14
19
|
# Whether the string contains any non-whitespace.
|
|
@@ -27,9 +32,9 @@ module MemeCaptain
|
|
|
27
32
|
if lines.empty?
|
|
28
33
|
lines << word
|
|
29
34
|
else
|
|
30
|
-
if (lines[-1].size + 1 + word.size) <= chars_per_line
|
|
31
|
-
|
|
32
|
-
lines[-1] << ' '
|
|
35
|
+
if (lines[-1].size + 1 + word.size) <= chars_per_line ||
|
|
36
|
+
lines.size >= num_lines
|
|
37
|
+
lines[-1] << ' ' unless lines[-1].empty?
|
|
33
38
|
lines[-1] << word
|
|
34
39
|
else
|
|
35
40
|
lines << word
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
1
3
|
module MemeCaptain
|
|
2
4
|
|
|
3
5
|
# For comparing different caption line break and pointsize choices.
|
|
@@ -17,7 +19,7 @@ module MemeCaptain
|
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
def fits
|
|
20
|
-
metrics.width <= bound_width
|
|
22
|
+
metrics.width <= bound_width && metrics.height <= bound_height
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
def fits_i
|
data/lib/meme_captain/meme.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'rmagick'
|
|
2
2
|
|
|
3
3
|
module MemeCaptain
|
|
4
4
|
|
|
@@ -21,7 +21,7 @@ module MemeCaptain
|
|
|
21
21
|
|
|
22
22
|
img.auto_orient!
|
|
23
23
|
|
|
24
|
-
super_sample = options[:super_sample] ||
|
|
24
|
+
super_sample = options[:super_sample] || 1.0
|
|
25
25
|
|
|
26
26
|
text_layer = Magick::Image.new(
|
|
27
27
|
img.page.width * super_sample, img.page.height * super_sample) {
|
|
@@ -77,6 +77,10 @@ module MemeCaptain
|
|
|
77
77
|
draw.annotate text_layer, text_width, text_height, text_x, text_y,
|
|
78
78
|
choice.text
|
|
79
79
|
|
|
80
|
+
text_layer.virtual_pixel_method = Magick::TransparentVirtualPixelMethod
|
|
81
|
+
text_layer = text_layer.blur_channel(text_pos.draw_options[:stroke_width] / 2.0,
|
|
82
|
+
text_pos.draw_options[:stroke_width] / 4.0, Magick::OpacityChannel)
|
|
83
|
+
|
|
80
84
|
draw.stroke = 'none'
|
|
81
85
|
|
|
82
86
|
draw.annotate text_layer, text_width, text_height, text_x, text_y,
|
data/lib/meme_captain/memebg.rb
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require 'rmagick'
|
|
2
4
|
|
|
3
5
|
module MemeCaptain
|
|
4
6
|
|
|
@@ -13,7 +15,7 @@ module MemeCaptain
|
|
|
13
15
|
#
|
|
14
16
|
# x, y, width and height can be in pixels or a float that represents a
|
|
15
17
|
# percentage of the width and height of the image the text is put onto.
|
|
16
|
-
def initialize(text, x, y, width, height, options={})
|
|
18
|
+
def initialize(text, x, y, width, height, options = {})
|
|
17
19
|
@text = text
|
|
18
20
|
@x = x
|
|
19
21
|
@y = y
|
|
@@ -24,11 +26,11 @@ module MemeCaptain
|
|
|
24
26
|
@min_pointsize = options.delete(:min_pointsize) || 12
|
|
25
27
|
|
|
26
28
|
@draw_options = {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
fill: 'white',
|
|
30
|
+
font: 'Impact',
|
|
31
|
+
gravity: Magick::CenterGravity,
|
|
32
|
+
stroke: 'black',
|
|
33
|
+
stroke_width: 8,
|
|
32
34
|
}.merge(options)
|
|
33
35
|
end
|
|
34
36
|
|
data/lib/meme_captain/version.rb
CHANGED
data/meme_captain.gemspec
CHANGED
|
@@ -12,25 +12,14 @@ Gem::Specification.new do |s|
|
|
|
12
12
|
s.homepage = 'https://github.com/mmb/meme_captain'
|
|
13
13
|
s.authors = ['Matthew M. Boedicker']
|
|
14
14
|
s.email = %w{matthewm@boedicker.org}
|
|
15
|
+
s.license = 'MIT'
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
curb
|
|
19
|
-
json
|
|
20
|
-
mime-types
|
|
21
|
-
mongo
|
|
22
|
-
mongo_mapper
|
|
23
|
-
rack
|
|
24
|
-
rack-contrib
|
|
25
|
-
rack-rewrite
|
|
26
|
-
rmagick
|
|
27
|
-
sinatra
|
|
28
|
-
}.each { |g| s.add_dependency g }
|
|
17
|
+
s.add_dependency 'mime-types', '~> 3.3.1'
|
|
18
|
+
s.add_dependency 'rmagick', '~> 4.1.2'
|
|
29
19
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}.each { |g| s.add_development_dependency g }
|
|
20
|
+
s.add_development_dependency 'rake', '~> 13.0.1'
|
|
21
|
+
s.add_development_dependency 'rspec', '~> 3.9.0'
|
|
22
|
+
s.add_development_dependency 'webmock', '~> 3.8.3'
|
|
34
23
|
|
|
35
24
|
s.files = `git ls-files`.split("\n")
|
|
36
25
|
s.executables = %w{memecaptain}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/spec/caption_choice_spec.rb
CHANGED
|
@@ -11,7 +11,7 @@ describe MemeCaptain::CaptionChoice do
|
|
|
11
11
|
caption_choice2 = MemeCaptain::CaptionChoice.new(12, metrics,
|
|
12
12
|
"the quick brown fox", 200, 100)
|
|
13
13
|
|
|
14
|
-
caption_choice1
|
|
14
|
+
expect(caption_choice1 < caption_choice2).to be(true)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it 'should rank choices with higher point size higher' do
|
|
@@ -23,7 +23,7 @@ describe MemeCaptain::CaptionChoice do
|
|
|
23
23
|
caption_choice2 = MemeCaptain::CaptionChoice.new(13, metrics,
|
|
24
24
|
"the quick brown fox", 200, 100)
|
|
25
25
|
|
|
26
|
-
caption_choice1
|
|
26
|
+
expect(caption_choice1 < caption_choice2).to be(true)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
it 'should rank choices with less lines higher when the text fits' do
|
|
@@ -35,7 +35,7 @@ describe MemeCaptain::CaptionChoice do
|
|
|
35
35
|
caption_choice2 = MemeCaptain::CaptionChoice.new(12, metrics,
|
|
36
36
|
"the quick brown fox", 200, 100)
|
|
37
37
|
|
|
38
|
-
caption_choice1
|
|
38
|
+
expect(caption_choice1 < caption_choice2).to be(true)
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
it 'should rank choices with more lines higher when the text does not fit' do
|
|
@@ -47,7 +47,7 @@ describe MemeCaptain::CaptionChoice do
|
|
|
47
47
|
caption_choice2 = MemeCaptain::CaptionChoice.new(12, metrics,
|
|
48
48
|
"the quick\nbrown fox", 200, 99)
|
|
49
49
|
|
|
50
|
-
caption_choice1
|
|
50
|
+
expect(caption_choice1 < caption_choice2).to be(true)
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
end
|
data/spec/caption_spec.rb
CHANGED
|
@@ -3,43 +3,52 @@ require 'meme_captain'
|
|
|
3
3
|
describe MemeCaptain::Caption do
|
|
4
4
|
|
|
5
5
|
it 'should quote backslashes for ImageMagick annotate' do
|
|
6
|
-
MemeCaptain::Caption.new('\\foo\\bar\\').annotate_quote.
|
|
7
|
-
'\\\\foo\\\\bar\\\\'
|
|
6
|
+
expect(MemeCaptain::Caption.new('\\foo\\bar\\').annotate_quote).to eq(
|
|
7
|
+
'\\\\foo\\\\bar\\\\')
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
it 'should quote percent signs for ImageMagick annotate' do
|
|
11
|
-
MemeCaptain::Caption.new('%foo%bar%').annotate_quote.
|
|
12
|
-
'
|
|
11
|
+
expect(MemeCaptain::Caption.new('%foo%bar%').annotate_quote).to eq(
|
|
12
|
+
'%%foo%%bar%%')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'should quote attribute percent escapes' do
|
|
16
|
+
expect(MemeCaptain::Caption.new('%m %m %b %#').annotate_quote).to eq(
|
|
17
|
+
'%%m %%m %%b %%#')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should quote an @ symbol if it is the first character' do
|
|
21
|
+
expect(MemeCaptain::Caption.new('@hi').annotate_quote).to eq('\@hi')
|
|
13
22
|
end
|
|
14
23
|
|
|
15
24
|
it 'should be drawable if it contains at least one non-whitespace character' do
|
|
16
|
-
MemeCaptain::Caption.new('a').
|
|
25
|
+
expect(MemeCaptain::Caption.new('a').drawable?).to be(true)
|
|
17
26
|
end
|
|
18
27
|
|
|
19
28
|
it 'should not be drawable if it is all whitespace' do
|
|
20
|
-
MemeCaptain::Caption.new(' ').
|
|
29
|
+
expect(MemeCaptain::Caption.new(' ').drawable?).to be(false)
|
|
21
30
|
end
|
|
22
31
|
|
|
23
32
|
it 'should not be drawable if it is empty' do
|
|
24
|
-
MemeCaptain::Caption.new('').
|
|
33
|
+
expect(MemeCaptain::Caption.new('').drawable?).to be(false)
|
|
25
34
|
end
|
|
26
35
|
|
|
27
36
|
it 'should not be drawable if it is nil' do
|
|
28
|
-
MemeCaptain::Caption.new(nil).
|
|
37
|
+
expect(MemeCaptain::Caption.new(nil).drawable?).to be(false)
|
|
29
38
|
end
|
|
30
39
|
|
|
31
40
|
it 'should wrap a string into two roughly equal lines' do
|
|
32
|
-
MemeCaptain::Caption.new(
|
|
33
|
-
'the quick brown fox jumped over the lazy dog').wrap(2).
|
|
34
|
-
"the quick brown fox\njumped over the lazy dog"
|
|
41
|
+
expect(MemeCaptain::Caption.new(
|
|
42
|
+
'the quick brown fox jumped over the lazy dog').wrap(2)).to eq(
|
|
43
|
+
"the quick brown fox\njumped over the lazy dog")
|
|
35
44
|
end
|
|
36
45
|
|
|
37
46
|
it 'should wrap a string into as many lines as it can' do
|
|
38
|
-
MemeCaptain::Caption.new('foo bar').wrap(3).
|
|
47
|
+
expect(MemeCaptain::Caption.new('foo bar').wrap(3)).to eq("foo\nbar")
|
|
39
48
|
end
|
|
40
49
|
|
|
41
50
|
it 'should not wrap text with no whitespace' do
|
|
42
|
-
MemeCaptain::Caption.new('foobar').wrap(2).
|
|
51
|
+
expect(MemeCaptain::Caption.new('foobar').wrap(2)).to eq('foobar')
|
|
43
52
|
end
|
|
44
53
|
|
|
45
54
|
end
|
data/spec/meme_captain_spec.rb
CHANGED
|
@@ -12,8 +12,22 @@ describe MemeCaptain, '.meme_top_bottom' do
|
|
|
12
12
|
:body => Base64.decode64(
|
|
13
13
|
'iVBORw0KGgoAAAANSUhEUgAAAcwAAAAyAgMAAACsWgPIAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wBHwQoJY1iyrwAAAAJUExURQAAAAAAAP///4Pdz9IAAAABdFJOUwBA5thmAAAAAWJLR0QB/wIt3gAAAHpJREFUWIXt1zESgCAMRNE03s9mG+9ns6e0EaKCqDOWf4sUJOHREvqciOn7Us0cEZiYmJhnc7HtVbJtS5LsVRo09DScZzmSG5iYmJit2RTVlduGquS920hFvxRMTEzMRzOv6TfKheMX9ThMTEzMnvlj5ld/S0xMTMxjNoGjc3pdi6L4AAAAAElFTkSuQmCC'))
|
|
14
14
|
|
|
15
|
+
font = File.expand_path('../assets/Coda-Heavy.ttf', __FILE__)
|
|
15
16
|
i = MemeCaptain.meme_top_bottom(
|
|
16
|
-
open('http://memecaptain.com/good.jpg'), 'top text', 'bottom text'
|
|
17
|
+
open('http://memecaptain.com/good.jpg'), 'top text', 'bottom text',
|
|
18
|
+
font: font)
|
|
17
19
|
end
|
|
18
20
|
|
|
21
|
+
context 'when one of the captions starts with an @ symbol' do
|
|
22
|
+
it 'generates the image' do
|
|
23
|
+
font = File.expand_path('../assets/Coda-Heavy.ttf', __FILE__)
|
|
24
|
+
src_image = File.expand_path('../assets/town_crier.jpg', __FILE__)
|
|
25
|
+
|
|
26
|
+
expect do
|
|
27
|
+
File.open(src_image) do |f|
|
|
28
|
+
MemeCaptain.meme_top_bottom(f, '@foo', '@bar', font: font)
|
|
29
|
+
end
|
|
30
|
+
end.to_not raise_exception
|
|
31
|
+
end
|
|
32
|
+
end
|
|
19
33
|
end
|