photomontage 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d155d29d732c87aec0e051adaeba064defaa79f
4
- data.tar.gz: 762d9df517bae4aa4e0847518534154c81b87c2d
3
+ metadata.gz: 0f116ffe0dc8f7923602ae5adcda3f7bec0fafb2
4
+ data.tar.gz: 0918142e16589077a75c2ae2c33a8877bb57522a
5
5
  SHA512:
6
- metadata.gz: 9e9ac51b06e9fe4fd7a2b3ce52e7ad50138464cfec3c912f57c7209ef674fab262271cdf7e20d51194026864943db76fad7b6951090e9ddd7163cb33042645a7
7
- data.tar.gz: 91c1c8da76a2fd1c5ae17639f00a25e2556432336c963b203065ef75d5e647914b5a3ac0f86355a6e37a9acecb58343431e6d8f3eee2e5e5fb4dab09f54a1c06
6
+ metadata.gz: ba80616b815074931a11691a975f5169d053085bdd6b8b8a8286a247ff388a071734ce7b7589dec8bd3228b5180d121119555c6eca05964748ffb0a2361bf418
7
+ data.tar.gz: 027735a579b80e7793018f0897a9ebf926e5de6acf568dbee38f6cb86a47c66412de040441054a2e9a2e693c2078a4ef8b95e1365c6105090bd108a816f120e7
data/bin/photomontage CHANGED
@@ -2,4 +2,5 @@
2
2
 
3
3
  require 'photomontage'
4
4
 
5
- Photomontage.begin
5
+ keywords = Photomontage.begin
6
+ Photomontage.respond(keywords)
data/lib/flickr.rb CHANGED
@@ -20,7 +20,7 @@ class Flickr
20
20
  }
21
21
  }
22
22
  @index = index
23
- @keyword = keyword
23
+ @url = nil
24
24
  end
25
25
 
26
26
  def search
@@ -34,6 +34,7 @@ class Flickr
34
34
  end
35
35
 
36
36
  def fetch
37
+ return false unless @url
37
38
  File.open("tmp/#{@index}.jpg", "wb") do |f|
38
39
  image = f.write HTTParty.get(@url).parsed_response
39
40
  end
@@ -42,26 +43,41 @@ class Flickr
42
43
  end
43
44
 
44
45
  def self.create_collage(file_name)
45
- result = read_bg_image
46
+ bg_image = read_bg_image
47
+ result = loop_images(bg_image)
48
+
49
+ write_image_to_file(result, file_name)
50
+ end
51
+
52
+ private
53
+
54
+ def self.write_image_to_file(result, file_name)
55
+ Dir.mkdir 'images' unless File.exists?('images')
56
+ result.write "images/#{file_name}.jpg"
57
+ end
58
+
59
+ def self.loop_images(bg_image)
46
60
  i,y=0,0
47
61
  (0..1).each do |j|
48
62
  x = -200
49
63
  5.times{
50
64
  img = MiniMagick::Image.new("tmp/#{i}.jpg")
51
- result = result.composite(img) do |c|
52
- c.compose "Over"
53
- x += 200
54
- i += 1
55
- c.geometry "+#{x}+#{y}"
56
- end
65
+ result = make_composite_image(result, img, x, y, i)
57
66
  }
58
- y += 300
67
+ y += 300
59
68
  end
60
- Dir.mkdir 'images' unless File.exists?('images')
61
- result.write "images/#{file_name}.jpg"
69
+ result
62
70
  end
63
71
 
64
- private
72
+ def self.make_composite_image(result, img, x, y, i)
73
+ result.composite(img) do |c|
74
+ c.compose "Over"
75
+ x += 200
76
+ i += 1
77
+ c.geometry "+#{x}+#{y}"
78
+ end
79
+ result
80
+ end
65
81
 
66
82
  def set_image_url(response)
67
83
  photo = response["rsp"]["photos"]["photo"]
@@ -77,6 +93,6 @@ class Flickr
77
93
  File.open("tmp/bg.jpg", "wb") do |f|
78
94
  f.write HTTParty.get("https://s30.postimg.org/l9fwb3to1/image.jpg").parsed_response
79
95
  end
80
- img = MiniMagick::Image.new("tmp/bg.jpg")
96
+ MiniMagick::Image.new("tmp/bg.jpg")
81
97
  end
82
98
  end
@@ -1,3 +1,3 @@
1
1
  module Photomontage
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/lib/photomontage.rb CHANGED
@@ -6,34 +6,34 @@ require "rmagick"
6
6
  require 'ruby-progressbar'
7
7
  require 'flickr'
8
8
  require 'colorize'
9
+ require './config/interaction'
9
10
 
10
11
  module Photomontage
11
12
  def self.begin
12
- puts "Hi there! Welcome to".green + " Photomontage!!".bold.green + "\nSimply provide 10 or less words, and get a collage of pictures representing your words, in seconds!\n".green
13
- puts "Type".green + " 'exit' ".red + "anytime to stop providing words \n".green
13
+ puts Interaction::WELCOME
14
14
  keywords = []
15
15
  10.times{
16
16
  word = STDIN.gets.chomp
17
17
  break if word == 'exit'
18
- keywords << word
18
+ keywords << word if !word.empty?
19
19
  }
20
- respond(keywords)
20
+ keywords
21
21
  end
22
22
 
23
23
  def self.respond(keywords)
24
24
  Dir.mkdir 'tmp' unless File.exists?('tmp')
25
25
  FileUtils.rm_rf(Dir.glob('tmp/*'))
26
- puts "\nHold on...While we make your collage...\n".green
26
+ puts Interaction::IN_PROGRESS
27
27
 
28
28
  keywords.each_with_index do |keyword, index|
29
29
  scrape_flickr(keyword, index)
30
30
  end
31
31
  verify_images_present?
32
- puts "\n\nGreat! Your photo collage is ready! What would you like to name it?".yellow
32
+ puts Interaction::FILE_NAME
33
33
  file_name = STDIN.gets.chomp
34
34
  Flickr.create_collage(file_name)
35
35
  FileUtils.rm_rf(Dir.glob('tmp/*'))
36
- puts "\n\nDone! Type".green + " 'open images/#{file_name}.jpg' ".magenta + "to view your image now! \n*If you using ruby interactive shell, exit from the shell.".green
36
+ puts Interaction::COMPLETE.gsub('FILE_NAME', file_name)
37
37
  end
38
38
 
39
39
  private
data/photomontage.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_runtime_dependency "mini_magick", ['4.6.0']
28
28
  spec.add_runtime_dependency "ruby-progressbar", ['1.8.1']
29
29
  spec.add_runtime_dependency "colorize", ['0.8.1']
30
+ spec.add_runtime_dependency "safe_yaml", ['1.0.4']
30
31
  end
@@ -0,0 +1,48 @@
1
+ require 'photomontage'
2
+ require 'flickr'
3
+
4
+ describe Flickr do
5
+ describe '#search' do
6
+ context 'when invoked with a valid keyword,' do
7
+ it "call the Flickr search API, and return a true value" do
8
+ flickr = Flickr.new("apple", 1)
9
+ expect(flickr.search).to_not eq(false)
10
+ end
11
+ end
12
+
13
+ context 'when invoked with an empty string,' do
14
+ it "call the Flickr search API, and return a false value" do
15
+ flickr = Flickr.new("", 1)
16
+ expect(flickr.search).to eq(false)
17
+ end
18
+ end
19
+ end
20
+
21
+ describe '#fetch' do
22
+ context 'when invoked with a valid keyword,' do
23
+ it "call the Flickr search API, and return an image" do
24
+ flickr = Flickr.new("apple", 1)
25
+ flickr.search
26
+ expect(flickr.fetch).to be_kind_of(Magick::Image)
27
+ end
28
+ end
29
+ context 'when invoked with an invalid keyword,' do
30
+ it "return false" do
31
+ flickr = Flickr.new("", 1)
32
+ flickr.search
33
+ expect(flickr.fetch).to eq(false)
34
+ end
35
+ end
36
+ end
37
+
38
+ describe '.create_collage' do
39
+ context 'create a collage' do
40
+ it "and return the resultant image" do
41
+ allow(Flickr).to receive(:read_bg_image)
42
+ expect(Flickr).to receive(:loop_images)
43
+ expect(Flickr).to receive(:write_image_to_file)
44
+ res = Flickr.create_collage("test_file")
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,10 +1,28 @@
1
1
  require 'photomontage'
2
2
 
3
- describe Picturesque do
4
- describe '.respond' do
5
- context 'when no keywords are passed' do
6
- it "should return No keyword passed message" do
7
- expect(Picturesque.respond("")).to eq("No keyword passed")
3
+ describe Photomontage do
4
+ describe '.begin' do
5
+ context 'when no keywords are entered' do
6
+ it "should return empty array" do
7
+ words = ["exit"]
8
+ words.each{|word| expect(STDIN).to receive(:gets).and_return(word)}
9
+ expect(Photomontage.begin).to eq([])
10
+ end
11
+ end
12
+
13
+ context 'when 3 keywords are entered' do
14
+ it "should return array of the entered keywords" do
15
+ words = ["penguin", "banana", "limousine", "exit"]
16
+ words.each{|word| expect(STDIN).to receive(:gets).and_return(word)}
17
+ expect(Photomontage.begin).to eq(words - ["exit"])
18
+ end
19
+ end
20
+
21
+ context 'when 10 keywords are entered' do
22
+ it "should return array of all entered keywords" do
23
+ words = ["penguin", "banana", "limousine", "ocean", "game of thrones", "lion", "soccer", "boat", "exit"]
24
+ words.each{|word| expect(STDIN).to receive(:gets).and_return(word)}
25
+ expect(Photomontage.begin).to eq(words - ["exit"])
8
26
  end
9
27
  end
10
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: photomontage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aishwarya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-20 00:00:00.000000000 Z
11
+ date: 2017-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
124
  version: 0.8.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: safe_yaml
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 1.0.4
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 1.0.4
125
139
  description: It's beautiful
126
140
  email:
127
141
  - aishwarya923@gmail.com
@@ -135,12 +149,12 @@ files:
135
149
  - LICENSE.txt
136
150
  - README.md
137
151
  - Rakefile
138
- - bg.jpg
139
152
  - bin/photomontage
140
153
  - lib/flickr.rb
141
154
  - lib/photomontage.rb
142
155
  - lib/photomontage/version.rb
143
156
  - photomontage.gemspec
157
+ - spec/flickr_spec.rb
144
158
  - spec/photomontage_spec.rb
145
159
  homepage: ''
146
160
  licenses:
@@ -167,4 +181,5 @@ signing_key:
167
181
  specification_version: 4
168
182
  summary: Photomontage - collage made from user provided keywords
169
183
  test_files:
184
+ - spec/flickr_spec.rb
170
185
  - spec/photomontage_spec.rb
data/bg.jpg DELETED
Binary file