mustachio 0.1.1 → 0.2.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.
data/Gemfile.lock CHANGED
@@ -2,19 +2,18 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  activesupport (3.0.7)
5
- addressable (2.2.5)
5
+ addressable (2.2.6)
6
6
  archive-tar-minitar (0.5.2)
7
7
  columnize (0.3.2)
8
8
  crack (0.1.8)
9
9
  diff-lcs (1.1.2)
10
- dragonfly (0.9.0)
11
- rack
10
+ dragonfly (0.9.2)
12
11
  rack
13
12
  face (0.0.4)
14
13
  json (>= 1.4.6)
15
14
  rest-client (>= 1.6.1)
16
15
  git (1.2.5)
17
- haml (3.0.25)
16
+ haml (3.1.1)
18
17
  httparty (0.7.7)
19
18
  crack (= 0.1.8)
20
19
  imagesize (0.1.1)
@@ -26,29 +25,29 @@ GEM
26
25
  linecache (0.43)
27
26
  linecache19 (0.5.12)
28
27
  ruby_core_source (>= 0.1.4)
29
- magickly (1.1.1)
28
+ magickly (1.1.3)
30
29
  activesupport (>= 2.0.0)
31
30
  addressable (~> 2.2)
32
- dragonfly (~> 0.8)
33
- haml (~> 3.0.25)
31
+ dragonfly (~> 0.9.1)
32
+ haml (~> 3.0)
34
33
  httparty (~> 0.7.3)
35
34
  sinatra (~> 1.2.1)
36
35
  mime-types (1.16)
37
- newrelic_rpm (2.14.1)
38
- rack (1.2.2)
36
+ newrelic_rpm (3.0.1)
37
+ rack (1.3.0)
39
38
  rack-test (0.6.0)
40
39
  rack (>= 1.0)
41
- rake (0.8.7)
40
+ rake (0.9.0)
42
41
  rest-client (1.6.1)
43
42
  mime-types (>= 1.16)
44
- rspec (2.5.0)
45
- rspec-core (~> 2.5.0)
46
- rspec-expectations (~> 2.5.0)
47
- rspec-mocks (~> 2.5.0)
48
- rspec-core (2.5.1)
49
- rspec-expectations (2.5.0)
43
+ rspec (2.6.0)
44
+ rspec-core (~> 2.6.0)
45
+ rspec-expectations (~> 2.6.0)
46
+ rspec-mocks (~> 2.6.0)
47
+ rspec-core (2.6.3)
48
+ rspec-expectations (2.6.0)
50
49
  diff-lcs (~> 1.1.2)
51
- rspec-mocks (2.5.0)
50
+ rspec-mocks (2.6.0)
52
51
  ruby-debug (0.10.4)
53
52
  columnize (>= 0.1)
54
53
  ruby-debug-base (~> 0.10.4.0)
@@ -67,10 +66,10 @@ GEM
67
66
  sinatra (1.2.6)
68
67
  rack (~> 1.1)
69
68
  tilt (< 2.0, >= 1.2.2)
70
- tilt (1.3)
71
- vcr (1.9.0)
72
- webmock (1.6.2)
73
- addressable (>= 2.2.2)
69
+ tilt (1.3.1)
70
+ vcr (1.10.0)
71
+ webmock (1.6.4)
72
+ addressable (> 2.2.5, ~> 2.2)
74
73
  crack (>= 0.1.7)
75
74
 
76
75
  PLATFORMS
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
@@ -0,0 +1,14 @@
1
+ # files are expected to be under config/staches/
2
+ # thanks to http://therantsandraves.com/?p=602 for the 'staches
3
+
4
+ -
5
+ filename: mustache_03.png
6
+ vert_offset: 15
7
+ -
8
+ filename: colonel_mustard.png
9
+ vert_offset: 40
10
+ mouth_overlap: 100
11
+ -
12
+ filename: mustache_07.png
13
+ vert_offset: 30
14
+ mouth_overlap: 50
data/config.ru CHANGED
@@ -2,10 +2,10 @@ require 'rubygems'
2
2
  require 'bundler'
3
3
  Bundler.require
4
4
 
5
- require File.join(File.dirname(__FILE__), 'lib', 'mustachio')
5
+ require File.join(File.dirname(__FILE__), 'lib', 'mustachio', 'app')
6
6
 
7
7
  map '/' do
8
- run Mustachio
8
+ run Mustachio::App
9
9
  end
10
10
 
11
11
  map '/magickly' do
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'mustachio')
2
+ require 'sinatra/base'
3
+
4
+ module Mustachio
5
+ class App < Sinatra::Base
6
+ DEMO_IMAGE = 'http://www.librarising.com/astrology/celebs/images2/QR/queenelizabethii.jpg'
7
+
8
+ set :static, true
9
+ set :public, 'public'
10
+
11
+ configure :production do
12
+ require 'newrelic_rpm' if ENV['NEW_RELIC_ID']
13
+ end
14
+
15
+
16
+ get %r{^/(\d+|rand)?$} do |stache_num|
17
+ src = params[:src]
18
+ if src
19
+ # use the specified stache, otherwise fall back to random
20
+ image = Magickly.process_src params[:src], :mustachify => (stache_num || true)
21
+ image.to_response(env)
22
+ else
23
+ @stache_num = stache_num
24
+ @site = Addressable::URI.parse(request.url).site
25
+ haml :index
26
+ end
27
+ end
28
+
29
+ get '/gallery' do
30
+ haml :gallery
31
+ end
32
+
33
+ get '/test' do
34
+ haml :test
35
+ end
36
+
37
+ get '/face_api_dev_challenge' do
38
+ haml :face_api_dev_challenge
39
+ end
40
+
41
+ end
42
+ end
data/lib/mustachio.rb CHANGED
@@ -1,21 +1,10 @@
1
- require 'sinatra/base'
2
1
  require 'magickly'
3
2
  require 'image_size'
4
3
  require 'face'
5
4
 
6
- # thanks to http://therantsandraves.com/?p=602 for the 'staches
7
- MUSTACHE = {
8
- :filename => File.expand_path(File.join(File.join(File.dirname(__FILE__), '..', 'public', 'images', 'mustache_03.png'))),
9
- :width => nil,
10
- :height => nil,
11
- :top_offset => -5.0,
12
- :bottom_offset => -15.0
13
- }
14
- MUSTACHE[:width], MUSTACHE[:height] = ImageSize.new(File.new(MUSTACHE[:filename])).get_size
15
-
16
- FACE_POS_ATTRS = ['center', 'eye_left', 'eye_right', 'mouth_left', 'mouth_center', 'mouth_right', 'nose']
17
-
18
5
  Magickly.dragonfly.configure do |c|
6
+ c.log_commands = true
7
+
19
8
  c.analyser.add :face_data do |temp_object|
20
9
  Mustachio.face_client.faces_detect(:file => temp_object.file, :attributes => 'none')['photos'].first
21
10
  end
@@ -24,7 +13,7 @@ Magickly.dragonfly.configure do |c|
24
13
  data = Mustachio.face_client.faces_detect(:file => temp_object.file, :attributes => 'none')['photos'].first # TODO use #face_data
25
14
 
26
15
  data['tags'].map! do |face|
27
- FACE_POS_ATTRS.each do |pos_attr|
16
+ Mustachio::FACE_POS_ATTRS.each do |pos_attr|
28
17
  if face[pos_attr].nil?
29
18
  puts "WARN: missing position attribute '#{pos_attr}'"
30
19
  else
@@ -39,25 +28,48 @@ Magickly.dragonfly.configure do |c|
39
28
  data
40
29
  end
41
30
 
42
- c.job :mustachify do
31
+ c.job :mustachify do |stache_num_param|
43
32
  photo_data = @job.face_data_as_px
44
33
  width = photo_data['width']
45
34
 
46
- commands = []
35
+ commands = ['-virtual-pixel transparent']
47
36
  photo_data['tags'].each do |face|
48
- # perform affine transform, such that the top-center
49
- # of the mustache is mapped to the nose, and the bottom-center
50
- # of the stache is mapped to the center of the mouth
51
- affine_params = [
52
- [ MUSTACHE[:width]/2, MUSTACHE[:top_offset] ], # top-center of stache
53
- [ face['nose']['x'], face['nose']['y'] ], # nose
54
-
55
- [ MUSTACHE[:width]/2, MUSTACHE[:height] + MUSTACHE[:bottom_offset] ], # bottom-center of stache
56
- [ face['mouth_center']['x'], face['mouth_center']['y'] ] # center of mouth
37
+ stache_num = case stache_num_param
38
+ when true
39
+ 0
40
+ when 'true'
41
+ 0
42
+ when 'rand'
43
+ rand(Mustachio.mustaches.size)
44
+ else
45
+ stache_num_param.to_i
46
+ end
47
+
48
+ mustache = Mustachio.mustaches[stache_num]
49
+
50
+ # perform transform such that the mustache is the height
51
+ # of the upper lip, and the bottom-center of the stache
52
+ # is mapped to the center of the mouth
53
+ rotation = Math.atan(
54
+ ( face['mouth_right']['y'] - face['mouth_left']['y'] ).to_f /
55
+ ( face['mouth_right']['x'] - face['mouth_left']['x'] ).to_f
56
+ ) / Math::PI * 180.0
57
+ desired_height = Math.sqrt(
58
+ ( face['nose']['x'] - face['mouth_center']['x'] ).to_f**2 +
59
+ ( face['nose']['y'] - face['mouth_center']['y'] ).to_f**2
60
+ )
61
+ mouth_intersect = mustache['height'] - mustache['mouth_overlap']
62
+ scale = desired_height / mouth_intersect
63
+
64
+ srt_params = [
65
+ [ mustache['width'] / 2.0, mouth_intersect - mustache['vert_offset'] ].map{|e| e.to_i }.join(','), # bottom-center of stache
66
+ scale, # scale
67
+ rotation, # rotate
68
+ [ face['mouth_center']['x'], face['mouth_center']['y'] ].map{|e| e.to_i }.join(',') # middle of mouth
57
69
  ]
58
- affine_params_str = affine_params.map{|p| p.join(',') }.join(' ')
70
+ srt_params_str = srt_params.join(' ')
59
71
 
60
- commands << "\\( #{MUSTACHE[:filename]} +distort Affine '#{affine_params_str}' \\)"
72
+ commands << "\\( #{mustache['file_path']} +distort SRT '#{srt_params_str}' \\)"
61
73
  end
62
74
  commands << "-flatten"
63
75
 
@@ -66,37 +78,37 @@ Magickly.dragonfly.configure do |c|
66
78
  end
67
79
  end
68
80
 
69
- class Mustachio < Sinatra::Base
70
- @@face_client = Face.get_client(
71
- :api_key => (ENV['MUSTACHIO_FACE_API_KEY'] || raise("Please set MUSTACHIO_FACE_API_KEY.")),
72
- :api_secret => (ENV['MUSTACHIO_FACE_API_SECRET'] || raise("Please set MUSTACHIO_FACE_API_SECRET."))
73
- )
74
-
75
- set :static, true
76
- set :public, 'public'
77
-
78
- configure :production do
79
- require 'newrelic_rpm' if ENV['NEW_RELIC_ID']
80
- end
81
+ module Mustachio
82
+ FACE_POS_ATTRS = ['center', 'eye_left', 'eye_right', 'mouth_left', 'mouth_center', 'mouth_right', 'nose']
81
83
 
82
84
  class << self
83
85
  def face_client
84
86
  @@face_client
85
87
  end
86
- end
87
-
88
- get '/' do
89
- src = params[:src]
90
- if src
91
- image = Magickly.process_src params[:src], :mustachify => true
92
- image.to_response(env)
93
- else
94
- @site = Addressable::URI.parse(request.url).site
95
- haml :index
88
+
89
+ def mustaches
90
+ @@mustaches
91
+ end
92
+
93
+ def setup
94
+ @@face_client = Face.get_client(
95
+ :api_key => (ENV['MUSTACHIO_FACE_API_KEY'] || raise("Please set MUSTACHIO_FACE_API_KEY.")),
96
+ :api_secret => (ENV['MUSTACHIO_FACE_API_SECRET'] || raise("Please set MUSTACHIO_FACE_API_SECRET."))
97
+ )
98
+
99
+ staches = YAML.load(File.read(File.join(File.dirname(__FILE__), '..', 'config', 'staches.yml')))
100
+ staches.map! do |stache|
101
+ stache['vert_offset'] ||= 0
102
+ stache['mouth_overlap'] ||= 0
103
+
104
+ stache['file_path'] = File.expand_path(File.join(File.dirname(__FILE__), '..', 'public', 'images', 'staches', stache['filename']))
105
+ stache['width'], stache['height'] = ImageSize.new(File.new(stache['file_path'])).get_size
106
+ stache
107
+ end
108
+ @@mustaches = staches
96
109
  end
97
110
  end
98
111
 
99
- get '/face_api_dev_challenge' do
100
- haml :face_api_dev_challenge
101
- end
112
+
113
+ self.setup
102
114
  end
data/mustachio.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mustachio}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{Aidan Feldman}]
12
- s.date = %q{2011-05-16}
11
+ s.authors = ["Aidan Feldman"]
12
+ s.date = %q{2011-05-26}
13
13
  s.description = %q{Adds a 'mustachify' shortcut to magickly.}
14
14
  s.email = %q{aidan.feldman@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -27,12 +27,16 @@ Gem::Specification.new do |s|
27
27
  "VERSION",
28
28
  "bookmarklet.js",
29
29
  "config.ru",
30
+ "config/staches.yml",
30
31
  "lib/mustachio.rb",
32
+ "lib/mustachio/app.rb",
31
33
  "mustachio.gemspec",
32
34
  "public/favicon.ico",
33
35
  "public/images/dubya.jpeg",
34
36
  "public/images/guy_hecker.jpeg",
35
- "public/images/mustache_03.png",
37
+ "public/images/staches/colonel_mustard.png",
38
+ "public/images/staches/mustache_03.png",
39
+ "public/images/staches/mustache_07.png",
36
40
  "spec/fixtures/vcr_cassettes/big_obama.yml",
37
41
  "spec/fixtures/vcr_cassettes/dubya.yml",
38
42
  "spec/fixtures/vcr_cassettes/small_obama.yml",
@@ -43,12 +47,14 @@ Gem::Specification.new do |s|
43
47
  "spec/unit/analyser_spec.rb",
44
48
  "views/face_api_dev_challenge.haml",
45
49
  "views/ga.haml",
46
- "views/index.haml"
50
+ "views/gallery.haml",
51
+ "views/index.haml",
52
+ "views/test.haml"
47
53
  ]
48
54
  s.homepage = %q{http://github.com/afeld/mustachio}
49
- s.licenses = [%q{MIT}]
50
- s.require_paths = [%q{lib}]
51
- s.rubygems_version = %q{1.8.2}
55
+ s.licenses = ["MIT"]
56
+ s.require_paths = ["lib"]
57
+ s.rubygems_version = %q{1.6.2}
52
58
  s.summary = %q{automatic mustachifying of any image}
53
59
 
54
60
  if s.respond_to? :specification_version then
data/spec/spec_helper.rb CHANGED
@@ -5,11 +5,11 @@ require 'bundler'
5
5
  Bundler.require
6
6
 
7
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
- require 'mustachio'
8
+ require 'mustachio/app'
9
9
  require 'webmock/rspec'
10
10
  require 'vcr'
11
11
 
12
- Mustachio.set :environment, :test
12
+ Mustachio::App.set :environment, :test
13
13
 
14
14
  # Requires supporting ruby files with custom matchers and macros, etc,
15
15
  # in spec/support/ and its subdirectories.
@@ -0,0 +1,10 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title mustache gallery - mustachio
5
+ %body
6
+ %ol{ :start => 0 }
7
+ - Mustachio.mustaches.each_with_index do |mustache, i|
8
+ %li
9
+ %a{ :href => "/#{i}" }
10
+ %img{ :src => "/images/staches/#{mustache['filename']}", :height => 80 }
data/views/index.haml CHANGED
@@ -6,5 +6,5 @@
6
6
  %body
7
7
  %a{:href => "http://github.com/afeld/mustachio"}
8
8
  %img{:style => "position: absolute; top: 0; right: 0; border: 0;", :src => "https://d3nwyuy0nl342s.cloudfront.net/img/7afbc8b248c68eb468279e8c17986ad46549fb71/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67", :alt => "Fork me on GitHub"}
9
- %img{:src => "/?src=http://www.librarising.com/astrology/celebs/images2/QR/queenelizabethii.jpg"}
10
- %h1 #{@site}/?src=<em>YOUR_IMAGE_URL</em>
9
+ %img{:src => "/#{@stache_num}?src=#{DEMO_IMAGE}"}
10
+ %h1 #{@site}/#{@stache_num}?src=<em>YOUR_IMAGE_URL</em>
data/views/test.haml ADDED
@@ -0,0 +1,6 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %body
5
+ - ['http://www.bbcnewsdaily.com/wp-content/uploads/2011/05/barack-obama-sad-pic.jpg', 'http://www.gala.fr/var/gal/storage/images/media/images/actu/photos_on_ne_parle_que_de_ca/remarions-les/george_bush/473331-1-fre-FR/george_bush_reference.jpg', 'http://blogs.southcoasttoday.com/new-bedford-politics/files/2011/05/Obama-Situation-Room-Osama-bin-Laden.jpg', 'http://2.bp.blogspot.com/_dcFI3kFsDvw/RYCugYRqJ5I/AAAAAAAAATI/HT0rdFL9WfY/s400/backstreet_boys8.jpg'].each do |src|
6
+ %img{ :src => "/?src=#{src}" }
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mustachio
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
5
+ version: 0.2.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Aidan Feldman
@@ -15,218 +10,163 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-05-16 00:00:00 Z
13
+ date: 2011-05-26 00:00:00 -04:00
14
+ default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
17
+ name: sinatra
18
+ requirement: &id001 !ruby/object:Gem::Requirement
22
19
  none: false
23
20
  requirements:
24
21
  - - ~>
25
22
  - !ruby/object:Gem::Version
26
- hash: 25
27
- segments:
28
- - 1
29
- - 2
30
- - 3
31
23
  version: 1.2.3
32
24
  type: :runtime
33
- requirement: *id001
34
25
  prerelease: false
35
- name: sinatra
26
+ version_requirements: *id001
36
27
  - !ruby/object:Gem::Dependency
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
28
+ name: dragonfly
29
+ requirement: &id002 !ruby/object:Gem::Requirement
38
30
  none: false
39
31
  requirements:
40
32
  - - ~>
41
33
  - !ruby/object:Gem::Version
42
- hash: 59
43
- segments:
44
- - 0
45
- - 9
46
- - 0
47
34
  version: 0.9.0
48
35
  type: :runtime
49
- requirement: *id002
50
36
  prerelease: false
51
- name: dragonfly
37
+ version_requirements: *id002
52
38
  - !ruby/object:Gem::Dependency
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
39
+ name: magickly
40
+ requirement: &id003 !ruby/object:Gem::Requirement
54
41
  none: false
55
42
  requirements:
56
43
  - - ~>
57
44
  - !ruby/object:Gem::Version
58
- hash: 13
59
- segments:
60
- - 1
61
- - 1
62
45
  version: "1.1"
63
46
  type: :runtime
64
- requirement: *id003
65
47
  prerelease: false
66
- name: magickly
48
+ version_requirements: *id003
67
49
  - !ruby/object:Gem::Dependency
68
- version_requirements: &id004 !ruby/object:Gem::Requirement
50
+ name: addressable
51
+ requirement: &id004 !ruby/object:Gem::Requirement
69
52
  none: false
70
53
  requirements:
71
54
  - - ~>
72
55
  - !ruby/object:Gem::Version
73
- hash: 15
74
- segments:
75
- - 2
76
- - 2
77
- - 4
78
56
  version: 2.2.4
79
57
  type: :runtime
80
- requirement: *id004
81
58
  prerelease: false
82
- name: addressable
59
+ version_requirements: *id004
83
60
  - !ruby/object:Gem::Dependency
84
- version_requirements: &id005 !ruby/object:Gem::Requirement
61
+ name: haml
62
+ requirement: &id005 !ruby/object:Gem::Requirement
85
63
  none: false
86
64
  requirements:
87
65
  - - ">="
88
66
  - !ruby/object:Gem::Version
89
- hash: 3
90
- segments:
91
- - 0
92
67
  version: "0"
93
68
  type: :runtime
94
- requirement: *id005
95
69
  prerelease: false
96
- name: haml
70
+ version_requirements: *id005
97
71
  - !ruby/object:Gem::Dependency
98
- version_requirements: &id006 !ruby/object:Gem::Requirement
72
+ name: face
73
+ requirement: &id006 !ruby/object:Gem::Requirement
99
74
  none: false
100
75
  requirements:
101
76
  - - "="
102
77
  - !ruby/object:Gem::Version
103
- hash: 23
104
- segments:
105
- - 0
106
- - 0
107
- - 4
108
78
  version: 0.0.4
109
79
  type: :runtime
110
- requirement: *id006
111
80
  prerelease: false
112
- name: face
81
+ version_requirements: *id006
113
82
  - !ruby/object:Gem::Dependency
114
- version_requirements: &id007 !ruby/object:Gem::Requirement
83
+ name: imagesize
84
+ requirement: &id007 !ruby/object:Gem::Requirement
115
85
  none: false
116
86
  requirements:
117
87
  - - ~>
118
88
  - !ruby/object:Gem::Version
119
- hash: 9
120
- segments:
121
- - 0
122
- - 1
123
89
  version: "0.1"
124
90
  type: :runtime
125
- requirement: *id007
126
91
  prerelease: false
127
- name: imagesize
92
+ version_requirements: *id007
128
93
  - !ruby/object:Gem::Dependency
129
- version_requirements: &id008 !ruby/object:Gem::Requirement
94
+ name: jeweler
95
+ requirement: &id008 !ruby/object:Gem::Requirement
130
96
  none: false
131
97
  requirements:
132
98
  - - ~>
133
99
  - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 1
137
- - 6
138
100
  version: "1.6"
139
101
  type: :development
140
- requirement: *id008
141
102
  prerelease: false
142
- name: jeweler
103
+ version_requirements: *id008
143
104
  - !ruby/object:Gem::Dependency
144
- version_requirements: &id009 !ruby/object:Gem::Requirement
105
+ name: rack-test
106
+ requirement: &id009 !ruby/object:Gem::Requirement
145
107
  none: false
146
108
  requirements:
147
109
  - - ">="
148
110
  - !ruby/object:Gem::Version
149
- hash: 3
150
- segments:
151
- - 0
152
111
  version: "0"
153
112
  type: :development
154
- requirement: *id009
155
113
  prerelease: false
156
- name: rack-test
114
+ version_requirements: *id009
157
115
  - !ruby/object:Gem::Dependency
158
- version_requirements: &id010 !ruby/object:Gem::Requirement
116
+ name: rspec
117
+ requirement: &id010 !ruby/object:Gem::Requirement
159
118
  none: false
160
119
  requirements:
161
120
  - - ~>
162
121
  - !ruby/object:Gem::Version
163
- hash: 9
164
- segments:
165
- - 2
166
- - 5
167
122
  version: "2.5"
168
123
  type: :development
169
- requirement: *id010
170
124
  prerelease: false
171
- name: rspec
125
+ version_requirements: *id010
172
126
  - !ruby/object:Gem::Dependency
173
- version_requirements: &id011 !ruby/object:Gem::Requirement
127
+ name: webmock
128
+ requirement: &id011 !ruby/object:Gem::Requirement
174
129
  none: false
175
130
  requirements:
176
131
  - - ~>
177
132
  - !ruby/object:Gem::Version
178
- hash: 3
179
- segments:
180
- - 1
181
- - 6
182
133
  version: "1.6"
183
134
  type: :development
184
- requirement: *id011
185
135
  prerelease: false
186
- name: webmock
136
+ version_requirements: *id011
187
137
  - !ruby/object:Gem::Dependency
188
- version_requirements: &id012 !ruby/object:Gem::Requirement
138
+ name: vcr
139
+ requirement: &id012 !ruby/object:Gem::Requirement
189
140
  none: false
190
141
  requirements:
191
142
  - - ~>
192
143
  - !ruby/object:Gem::Version
193
- hash: 29
194
- segments:
195
- - 1
196
- - 9
197
144
  version: "1.9"
198
145
  type: :development
199
- requirement: *id012
200
146
  prerelease: false
201
- name: vcr
147
+ version_requirements: *id012
202
148
  - !ruby/object:Gem::Dependency
203
- version_requirements: &id013 !ruby/object:Gem::Requirement
149
+ name: ruby-debug19
150
+ requirement: &id013 !ruby/object:Gem::Requirement
204
151
  none: false
205
152
  requirements:
206
153
  - - ">="
207
154
  - !ruby/object:Gem::Version
208
- hash: 3
209
- segments:
210
- - 0
211
155
  version: "0"
212
156
  type: :development
213
- requirement: *id013
214
157
  prerelease: false
215
- name: ruby-debug19
158
+ version_requirements: *id013
216
159
  - !ruby/object:Gem::Dependency
217
- version_requirements: &id014 !ruby/object:Gem::Requirement
160
+ name: ruby-debug
161
+ requirement: &id014 !ruby/object:Gem::Requirement
218
162
  none: false
219
163
  requirements:
220
164
  - - ">="
221
165
  - !ruby/object:Gem::Version
222
- hash: 3
223
- segments:
224
- - 0
225
166
  version: "0"
226
167
  type: :development
227
- requirement: *id014
228
168
  prerelease: false
229
- name: ruby-debug
169
+ version_requirements: *id014
230
170
  description: Adds a 'mustachify' shortcut to magickly.
231
171
  email: aidan.feldman@gmail.com
232
172
  executables: []
@@ -247,12 +187,16 @@ files:
247
187
  - VERSION
248
188
  - bookmarklet.js
249
189
  - config.ru
190
+ - config/staches.yml
250
191
  - lib/mustachio.rb
192
+ - lib/mustachio/app.rb
251
193
  - mustachio.gemspec
252
194
  - public/favicon.ico
253
195
  - public/images/dubya.jpeg
254
196
  - public/images/guy_hecker.jpeg
255
- - public/images/mustache_03.png
197
+ - public/images/staches/colonel_mustard.png
198
+ - public/images/staches/mustache_03.png
199
+ - public/images/staches/mustache_07.png
256
200
  - spec/fixtures/vcr_cassettes/big_obama.yml
257
201
  - spec/fixtures/vcr_cassettes/dubya.yml
258
202
  - spec/fixtures/vcr_cassettes/small_obama.yml
@@ -263,7 +207,10 @@ files:
263
207
  - spec/unit/analyser_spec.rb
264
208
  - views/face_api_dev_challenge.haml
265
209
  - views/ga.haml
210
+ - views/gallery.haml
266
211
  - views/index.haml
212
+ - views/test.haml
213
+ has_rdoc: true
267
214
  homepage: http://github.com/afeld/mustachio
268
215
  licenses:
269
216
  - MIT
@@ -277,7 +224,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
277
224
  requirements:
278
225
  - - ">="
279
226
  - !ruby/object:Gem::Version
280
- hash: 3
227
+ hash: 4287363607952724271
281
228
  segments:
282
229
  - 0
283
230
  version: "0"
@@ -286,14 +233,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
233
  requirements:
287
234
  - - ">="
288
235
  - !ruby/object:Gem::Version
289
- hash: 3
290
- segments:
291
- - 0
292
236
  version: "0"
293
237
  requirements: []
294
238
 
295
239
  rubyforge_project:
296
- rubygems_version: 1.8.2
240
+ rubygems_version: 1.6.2
297
241
  signing_key:
298
242
  specification_version: 3
299
243
  summary: automatic mustachifying of any image