mustachio 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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