selfiegram 0.0.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.
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: []