selfiegram 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0ac0e6e6bab8fcbbfc61604181b9ea7bd96d6fff
4
+ data.tar.gz: 3ee32f9c61490ebd1660a150bf2f423e6ee76a06
5
+ SHA512:
6
+ metadata.gz: 136e69da190552c3daff7b71ae3bcdbd904cfbbefffb3f8951e2e509c0bac70c7277db1599815c0e9d36ba1c25d90f5e0b0ab1f23bd7d50f9b46b74bcdaac893
7
+ data.tar.gz: cac2ead259b24581411876b452e516cc26468e6a3b7b29c333f60d1ea00e80290c2d10fde49b138107aeb7cc4752599d85095a8122114f21038ff1954d455427
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "shoulda", ">= 0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler", "~> 1.0"
12
+ gem "jeweler", "~> 2.0.1"
13
+ gem "simplecov", ">= 0"
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,80 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (4.1.4)
5
+ i18n (~> 0.6, >= 0.6.9)
6
+ json (~> 1.7, >= 1.7.7)
7
+ minitest (~> 5.1)
8
+ thread_safe (~> 0.1)
9
+ tzinfo (~> 1.1)
10
+ addressable (2.3.6)
11
+ builder (3.2.2)
12
+ descendants_tracker (0.0.4)
13
+ thread_safe (~> 0.3, >= 0.3.1)
14
+ docile (1.1.5)
15
+ faraday (0.9.0)
16
+ multipart-post (>= 1.2, < 3)
17
+ git (1.2.7)
18
+ github_api (0.11.3)
19
+ addressable (~> 2.3)
20
+ descendants_tracker (~> 0.0.1)
21
+ faraday (~> 0.8, < 0.10)
22
+ hashie (>= 1.2)
23
+ multi_json (>= 1.7.5, < 2.0)
24
+ nokogiri (~> 1.6.0)
25
+ oauth2
26
+ hashie (3.2.0)
27
+ highline (1.6.21)
28
+ i18n (0.6.11)
29
+ jeweler (2.0.1)
30
+ builder
31
+ bundler (>= 1.0)
32
+ git (>= 1.2.5)
33
+ github_api
34
+ highline (>= 1.6.15)
35
+ nokogiri (>= 1.5.10)
36
+ rake
37
+ rdoc
38
+ json (1.8.1)
39
+ jwt (1.0.0)
40
+ mini_portile (0.6.0)
41
+ minitest (5.4.2)
42
+ multi_json (1.10.1)
43
+ multi_xml (0.5.5)
44
+ multipart-post (2.0.0)
45
+ nokogiri (1.6.3.1)
46
+ mini_portile (= 0.6.0)
47
+ oauth2 (1.0.0)
48
+ faraday (>= 0.8, < 0.10)
49
+ jwt (~> 1.0)
50
+ multi_json (~> 1.3)
51
+ multi_xml (~> 0.5)
52
+ rack (~> 1.2)
53
+ rack (1.5.2)
54
+ rake (10.3.2)
55
+ rdoc (3.12.2)
56
+ json (~> 1.4)
57
+ shoulda (3.5.0)
58
+ shoulda-context (~> 1.0, >= 1.0.1)
59
+ shoulda-matchers (>= 1.4.1, < 3.0)
60
+ shoulda-context (1.2.1)
61
+ shoulda-matchers (2.6.2)
62
+ activesupport (>= 3.0.0)
63
+ simplecov (0.9.0)
64
+ docile (~> 1.1.0)
65
+ multi_json
66
+ simplecov-html (~> 0.8.0)
67
+ simplecov-html (0.8.0)
68
+ thread_safe (0.3.4)
69
+ tzinfo (1.2.2)
70
+ thread_safe (~> 0.1)
71
+
72
+ PLATFORMS
73
+ ruby
74
+
75
+ DEPENDENCIES
76
+ bundler (~> 1.0)
77
+ jeweler (~> 2.0.1)
78
+ rdoc (~> 3.12)
79
+ shoulda
80
+ simplecov
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 Brett Shollenberger
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,6 @@
1
+ = selfiegram
2
+
3
+ Take selfies!
4
+
5
+ 1) Upload a photo of yourself as selfie_original.png
6
+ 2) Run `selfie "statue of liberty"` to take a selfie with the statue of liberty!
data/Rakefile ADDED
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "selfiegram"
18
+ gem.homepage = "http://github.com/brettshollenberger/selfiegram"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Take mad selfies!}
21
+ gem.description = %Q{Take mad selfies!}
22
+ gem.email = "brett.shollenberger@gmail.com"
23
+ gem.authors = ["Brett Shollenberger"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ desc "Code coverage detail"
36
+ task :simplecov do
37
+ ENV['COVERAGE'] = "true"
38
+ Rake::Task['test'].execute
39
+ end
40
+
41
+ task :default => :test
42
+
43
+ require 'rdoc/task'
44
+ Rake::RDocTask.new do |rdoc|
45
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "selfiegram #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
data/bin/selfie ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Dir[File.expand_path(File.join(__FILE__, "../../lib/**/*.rb"))].each { |f| require f }
4
+
5
+ Selfiegram.new(ARGV[0]).snap
@@ -0,0 +1,78 @@
1
+ module BackgroundImages
2
+ class Downloader
3
+ attr_accessor :find_image_of, :file_extension, :download_url
4
+
5
+ def initialize(find_image_of="Brad Pitt's Ghost")
6
+ @find_image_of = find_image_of
7
+ end
8
+
9
+ def download
10
+ `curl "#{download_url}" > "#{local_file}.#{file_extension}"`
11
+ self
12
+ end
13
+
14
+ def standardize
15
+ `convert #{local_file}.#{file_extension} -resize '866x561^' -gravity 'center' -crop '866x561+0+0' #{local_file}.#{destination_extension}`
16
+
17
+ if command_failed?
18
+ get_new_background_image
19
+ download
20
+ standardize
21
+ end
22
+
23
+ self
24
+ end
25
+
26
+ def clean
27
+ `find . -type f -name "*.png" -exec convert {} -strip {} \;`
28
+ end
29
+
30
+ private
31
+ def command_failed?
32
+ $? != 0
33
+ end
34
+
35
+ def local_file
36
+ "source_original"
37
+ end
38
+
39
+ def destination_extension
40
+ "png"
41
+ end
42
+
43
+ def acceptable_extensions
44
+ ["jpg", "png", "gif"]
45
+ end
46
+
47
+ def acceptable_extension?(extension)
48
+ acceptable_extensions.include?(extension.to_s)
49
+ end
50
+
51
+ def file_extension(file=download_url)
52
+ file.split(".").last
53
+ end
54
+
55
+ def download_url
56
+ @download_url ||= find_image
57
+ end
58
+
59
+ def find_image(method=:first)
60
+ image = image_finder.find_one(method)
61
+
62
+ unless acceptable_extension? file_extension(image["url"])
63
+ return find_image(:sample)
64
+ end
65
+
66
+ image["url"]
67
+ end
68
+
69
+ def image_finder
70
+ @image_finder ||= BackgroundImages::Finder.new(find_image_of)
71
+ end
72
+
73
+ # Randomly select a new background image
74
+ def get_new_background_image
75
+ @download_url = find_image(:sample)
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,45 @@
1
+ module BackgroundImages
2
+ class Finder
3
+ attr_accessor :find_image_of, :max_attempts
4
+
5
+ def initialize(find_image_of = "Brad Pitt's Ghost")
6
+ @find_image_of = find_image_of
7
+ @max_attempts = 3
8
+ end
9
+
10
+ def find_many(attempt=1)
11
+ if attempt > @max_attempts
12
+ raise "Unable to get response from Google Image search"
13
+ end
14
+
15
+ response = JSON.parse(find_command)
16
+
17
+ return find_many(attempt+1) unless valid_image_search_response?(response)
18
+
19
+ return response["responseData"]["results"]
20
+ end
21
+
22
+ def find_one(method=:first)
23
+ result = find_many.send(method)
24
+ return find_one if result.nil?
25
+ return result
26
+ end
27
+
28
+ private
29
+ def valid_image_search_response?(response)
30
+ response.is_a?(Hash) && response.has_key?("responseData")
31
+ end
32
+
33
+ def find_command
34
+ `curl "#{find_url}"`
35
+ end
36
+
37
+ def find_url
38
+ "https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=#{encode(find_image_of)}"
39
+ end
40
+
41
+ def encode(query_string="")
42
+ URI::encode(query_string)
43
+ end
44
+ end
45
+ end
data/lib/selfiegram.rb ADDED
@@ -0,0 +1,45 @@
1
+ require "rmagick"
2
+ require "open-uri"
3
+ require "json"
4
+ require "pry"
5
+ require "pry-byebug"
6
+
7
+ class Selfiegram
8
+ attr_accessor :take_with
9
+
10
+ def initialize(take_with="Brad Pitt's Ghost")
11
+ @take_with = take_with
12
+ end
13
+
14
+ def snap
15
+ download_background_image
16
+ overlay_selfie
17
+ save
18
+ end
19
+
20
+ private
21
+ def save
22
+ background_image.write("final.png")
23
+ end
24
+
25
+ def overlay_selfie
26
+ background_image.composite!(selfie_image, 0, 0, Magick::OverCompositeOp)
27
+ end
28
+
29
+ def background_image
30
+ @background_image ||= Magick::Image.read("source_original.png").first
31
+ end
32
+
33
+ def selfie_image
34
+ @selfie_image ||= Magick::Image.read("selfie_original.png").first
35
+ end
36
+
37
+ def background_image_downloader
38
+ @background_image_downloader ||= BackgroundImages::Downloader.new(@take_with)
39
+ end
40
+
41
+ def download_background_image
42
+ background_image_downloader.download.standardize.clean
43
+ end
44
+ end
45
+
Binary file
@@ -0,0 +1,68 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: selfiegram 0.0.0 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "selfiegram"
9
+ s.version = "0.0.0"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["Brett Shollenberger"]
14
+ s.date = "2014-10-06"
15
+ s.description = "Take mad selfies!"
16
+ s.email = "brett.shollenberger@gmail.com"
17
+ s.executables = ["selfie"]
18
+ s.extra_rdoc_files = [
19
+ "LICENSE.txt",
20
+ "README.rdoc"
21
+ ]
22
+ s.files = [
23
+ ".document",
24
+ "Gemfile",
25
+ "Gemfile.lock",
26
+ "LICENSE.txt",
27
+ "README.rdoc",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "bin/selfie",
31
+ "lib/background_images/downloader.rb",
32
+ "lib/background_images/finder.rb",
33
+ "lib/selfiegram.rb",
34
+ "selfie_original.png",
35
+ "selfiegram.gemspec",
36
+ "test/helper.rb",
37
+ "test/test_selfiegram.rb"
38
+ ]
39
+ s.homepage = "http://github.com/brettshollenberger/selfiegram"
40
+ s.licenses = ["MIT"]
41
+ s.rubygems_version = "2.2.2"
42
+ s.summary = "Take mad selfies!"
43
+
44
+ if s.respond_to? :specification_version then
45
+ s.specification_version = 4
46
+
47
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
48
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
49
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
50
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
51
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
52
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
53
+ else
54
+ s.add_dependency(%q<shoulda>, [">= 0"])
55
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
56
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
57
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
58
+ s.add_dependency(%q<simplecov>, [">= 0"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<shoulda>, [">= 0"])
62
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
63
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
64
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
65
+ s.add_dependency(%q<simplecov>, [">= 0"])
66
+ end
67
+ end
68
+
data/test/helper.rb ADDED
@@ -0,0 +1,34 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_adapter 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ require 'rubygems'
18
+ require 'bundler'
19
+ begin
20
+ Bundler.setup(:default, :development)
21
+ rescue Bundler::BundlerError => e
22
+ $stderr.puts e.message
23
+ $stderr.puts "Run `bundle install` to install missing gems"
24
+ exit e.status_code
25
+ end
26
+ require 'test/unit'
27
+ require 'shoulda'
28
+
29
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
31
+ require 'selfiegram'
32
+
33
+ class Test::Unit::TestCase
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestSelfiegram < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: selfiegram
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brett Shollenberger
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: shoulda
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '3.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '3.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jeweler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.0.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.0.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Take mad selfies!
84
+ email: brett.shollenberger@gmail.com
85
+ executables:
86
+ - selfie
87
+ extensions: []
88
+ extra_rdoc_files:
89
+ - LICENSE.txt
90
+ - README.rdoc
91
+ files:
92
+ - .document
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - LICENSE.txt
96
+ - README.rdoc
97
+ - Rakefile
98
+ - VERSION
99
+ - bin/selfie
100
+ - lib/background_images/downloader.rb
101
+ - lib/background_images/finder.rb
102
+ - lib/selfiegram.rb
103
+ - selfie_original.png
104
+ - selfiegram.gemspec
105
+ - test/helper.rb
106
+ - test/test_selfiegram.rb
107
+ homepage: http://github.com/brettshollenberger/selfiegram
108
+ licenses:
109
+ - MIT
110
+ metadata: {}
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.2.2
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Take mad selfies!
131
+ test_files: []