flickr_collage 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +115 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/flickr_collage +92 -0
- data/flickr_collage.gemspec +30 -0
- data/lib/flickr_collage.rb +94 -0
- data/lib/flickr_collage/dictionary.rb +20 -0
- data/lib/flickr_collage/errors.rb +10 -0
- data/lib/flickr_collage/file_loader.rb +51 -0
- data/lib/flickr_collage/initializer.rb +7 -0
- data/lib/flickr_collage/version.rb +3 -0
- data/tmp/fruits.jpg +0 -0
- metadata +162 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d78399ff56392a3bdfacaf3244e7356d908d7cac
|
4
|
+
data.tar.gz: 82b1183d716173fd484273a4af791c33e266d2ee
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a4463481021797101d80eb3f013f608557394ff939ee1d1a81247fb368eaeb9aa49aacb7ea079fab872f5a61dfd80507d3923eab0a1374dc97cd183285a54b3
|
7
|
+
data.tar.gz: 38ab241bd196260b65c2cf958339699ee0400e240688d122c0323595507d042d8c10e1bffa5190beea07838a0ea8fae9f132afe32a2ea9ed9a264894a7a76631
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Ingo Plaschczek
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
# Flickr Collage
|
2
|
+
|
3
|
+
**Flickr Collage** queries the Flickr API for the top-rated image by search keywords and assembles a collage grid from this images to a new file.
|
4
|
+
|
5
|
+
![](tmp/fruits.jpg)
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
You have to install **ImageMagick**. On Ubuntu for example, you can run:
|
10
|
+
|
11
|
+
```
|
12
|
+
sudo apt-get install libmagickwand-dev
|
13
|
+
```
|
14
|
+
|
15
|
+
For more details take a look at (https://github.com/rmagick/rmagick#prerequisites).
|
16
|
+
|
17
|
+
**Installing via Bundler**
|
18
|
+
|
19
|
+
Add this line to your application's Gemfile:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
gem 'flickr_collage'
|
23
|
+
```
|
24
|
+
|
25
|
+
And then execute:
|
26
|
+
|
27
|
+
```console
|
28
|
+
bundle
|
29
|
+
```
|
30
|
+
|
31
|
+
**Installing via Rubygems**
|
32
|
+
|
33
|
+
```console
|
34
|
+
gem install flickr_collage
|
35
|
+
```
|
36
|
+
|
37
|
+
**Installing from github**
|
38
|
+
|
39
|
+
```console
|
40
|
+
git clone https://github.com/plaschczek/flickr_collage
|
41
|
+
cd flickr_collage
|
42
|
+
bundle
|
43
|
+
rake install
|
44
|
+
```
|
45
|
+
|
46
|
+
## Usage
|
47
|
+
|
48
|
+
First you have to initialize FlickRaw.api_key and FlickRaw.shared_secred.<br />
|
49
|
+
For example export the following env vars:
|
50
|
+
|
51
|
+
```console
|
52
|
+
export FLICKR_API_KEY='... Your API key ...'
|
53
|
+
export FLICKR_SHARED_SECRET='... Your shared secret ...'
|
54
|
+
```
|
55
|
+
|
56
|
+
Or in your Ruby file:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
require 'flickr_collage'
|
60
|
+
|
61
|
+
FlickRaw.api_key="... Your API key ..."
|
62
|
+
FlickRaw.shared_secret="... Your shared secret ..."
|
63
|
+
```
|
64
|
+
|
65
|
+
### Examples
|
66
|
+
|
67
|
+
To create a collage with 10 random images, instantiate a new FlickrCollage and save the image:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
FlickrCollage.new.save
|
71
|
+
```
|
72
|
+
|
73
|
+
Full options example (9 images, 4 by keyword, 5 random in 2 rows as squares, saved as 'tmp/fruits_example.jpg'):
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
FlickrCollage.new(
|
77
|
+
keywords: ['strawberry', 'kiwi', 'cherry', 'limes'],
|
78
|
+
filename: 'fruits_example.jpg',
|
79
|
+
dir: 'tmp',
|
80
|
+
no_of_images: 9,
|
81
|
+
rows: 2,
|
82
|
+
squares: true
|
83
|
+
).save
|
84
|
+
```
|
85
|
+
|
86
|
+
### Command Line Examples
|
87
|
+
|
88
|
+
The same full options example as before:
|
89
|
+
|
90
|
+
```console
|
91
|
+
flickr_collage -k strawberry,kiwi,cherry,limes -f fruits_example.jpg -d tmp -n 9 -r 2 -s
|
92
|
+
```
|
93
|
+
|
94
|
+
And the command line help:
|
95
|
+
|
96
|
+
```console
|
97
|
+
flickr_collage -h
|
98
|
+
```
|
99
|
+
|
100
|
+
### Options
|
101
|
+
|
102
|
+
```
|
103
|
+
FlickrCollage.new(keywords:, filename:, dir:, no_of_images:, rows:, squares:)
|
104
|
+
|
105
|
+
keywords: Array with keywords
|
106
|
+
filename: collage filename, default 'collage.jpg'
|
107
|
+
dir: directory to save the collage, has to exist, default '.'
|
108
|
+
no_of_images: number of images, default number of keywords and without keywords 10
|
109
|
+
rows: number of collage rows, default sqrt(no_of_images).floor
|
110
|
+
squares: boolean, if true images squared
|
111
|
+
```
|
112
|
+
|
113
|
+
## License
|
114
|
+
|
115
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "flickr_collage"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/exe/flickr_collage
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'flickr_collage'
|
4
|
+
require 'highline'
|
5
|
+
require 'cri'
|
6
|
+
|
7
|
+
command = Cri::Command.define do
|
8
|
+
name 'flickr_collage'
|
9
|
+
usage 'flickr_collage [options]'
|
10
|
+
summary 'Makes a collage of Flickr images by keywords'
|
11
|
+
description '
|
12
|
+
Flickr Collage queries the Flickr API for the top-rated image by search
|
13
|
+
keywords and assembles a collage grid from this images to a new file.
|
14
|
+
|
15
|
+
Example:
|
16
|
+
flickr_collage -k strawberry,kiwi,cherry,limes -f fruits.jpg -s
|
17
|
+
'
|
18
|
+
|
19
|
+
option :d, :dir, 'directory to store collage', argument: :optional
|
20
|
+
option :f, :filename, 'filename for collage', argument: :optional
|
21
|
+
option :k, :keywords, 'keywords to search for, comma seperated', argument: :optional
|
22
|
+
option :n, :no_of_images, 'number of images (default number of keywords or 10)', argument: :optional
|
23
|
+
option :r, :rows, "number of collage's rows", argument: :optional
|
24
|
+
option :s, :squares, 'images squared on collage'
|
25
|
+
|
26
|
+
flag :h, :help, 'show help for this command' do |_value, cmd|
|
27
|
+
puts cmd.help
|
28
|
+
exit 0
|
29
|
+
end
|
30
|
+
|
31
|
+
run do |opts, _args, _cmd|
|
32
|
+
cli = HighLine.new
|
33
|
+
|
34
|
+
exit 0 unless opts[:keywords] ||
|
35
|
+
cli.agree('Random collage without keywords? (Type `flickr_collage -h` for help.) [y/n]')
|
36
|
+
|
37
|
+
options = { keywords: opts.fetch(:keywords, '').split(',') }
|
38
|
+
|
39
|
+
options[:dir] = opts.fetch(:dir) if opts[:dir]
|
40
|
+
options[:filename] = opts.fetch(:filename) if opts[:filename]
|
41
|
+
options[:no_of_images] = opts.fetch(:no_of_images).to_i if opts[:no_of_images]
|
42
|
+
options[:rows] = opts.fetch(:rows).to_i if opts[:rows]
|
43
|
+
options[:squares] = opts.key?(:squares) if opts[:squares]
|
44
|
+
|
45
|
+
begin
|
46
|
+
puts 'Searching and loading images'
|
47
|
+
flickr_collage = FlickrCollage.new(**options)
|
48
|
+
|
49
|
+
rescue FlickrCollage::Errors::DictionaryNotFound
|
50
|
+
puts "Dictionary not found for #{FlickrCollage::Dictionary.path}"
|
51
|
+
dict_path = cli.ask('Enter path for dictionary or leave it blank to cancel.')
|
52
|
+
exit 0 if dict_path == ''
|
53
|
+
FlickrCollage::Dictionary.path = dict_path
|
54
|
+
retry
|
55
|
+
|
56
|
+
rescue => e
|
57
|
+
puts "Error while execution: #{e.message}"
|
58
|
+
exit 1
|
59
|
+
end
|
60
|
+
|
61
|
+
if flickr_collage.unsuccessful_keywords
|
62
|
+
keys = flickr_collage.unsuccessful_keywords.keys & options[:keywords]
|
63
|
+
puts "Note: No image found for the following keyword(s): #{keys.join(', ')}" if keys.any?
|
64
|
+
end
|
65
|
+
|
66
|
+
begin
|
67
|
+
flickr_collage.save
|
68
|
+
|
69
|
+
rescue FlickrCollage::Errors::DirNotFound
|
70
|
+
puts "Directory #{flickr_collage.dir} not found, please ensure that the directory exists."
|
71
|
+
|
72
|
+
rescue FlickrCollage::Errors::FileExist
|
73
|
+
if cli.agree("File exists. Overwrite #{File.join(flickr_collage.dir, flickr_collage.filename)}? [y/n]")
|
74
|
+
flickr_collage.save!
|
75
|
+
else
|
76
|
+
filename = cli.ask("Enter new filename (dir: #{flickr_collage.dir}) or leave it blank to cancel.")
|
77
|
+
exit 0 if filename == ''
|
78
|
+
flickr_collage.filename = filename
|
79
|
+
retry
|
80
|
+
end
|
81
|
+
|
82
|
+
rescue FlickrCollage::Errors::FileCannotBeSaved
|
83
|
+
puts 'Error: File could no be saved.'
|
84
|
+
exit 1
|
85
|
+
|
86
|
+
rescue => e
|
87
|
+
puts "Error while execution: #{e.message}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
command.run(ARGV)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'flickr_collage/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'flickr_collage'
|
8
|
+
spec.version = FlickrCollage::VERSION
|
9
|
+
spec.authors = ['Ingo Plaschczek']
|
10
|
+
spec.email = ['github@plaschczek.de']
|
11
|
+
|
12
|
+
spec.summary = %q{Makes a collage of Flickr images by keywords}
|
13
|
+
spec.description = %q{Flickr Collage queries the Flickr API for the top-rated image by search keywords and assembles a collage grid from this images to a new file.}
|
14
|
+
spec.homepage = 'https://github.com/plaschczek/flickr_collage'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = 'exe'
|
19
|
+
spec.executables = ['flickr_collage']
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_dependency 'flickraw'
|
23
|
+
spec.add_dependency 'rmagick'
|
24
|
+
spec.add_dependency 'highline'
|
25
|
+
spec.add_dependency 'cri'
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
30
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'flickr_collage/version'
|
2
|
+
require 'flickr_collage/errors'
|
3
|
+
require 'flickr_collage/dictionary'
|
4
|
+
require 'flickr_collage/file_loader'
|
5
|
+
|
6
|
+
require 'rmagick'
|
7
|
+
require 'flickraw'
|
8
|
+
|
9
|
+
require 'flickr_collage/initializer'
|
10
|
+
|
11
|
+
class FlickrCollage
|
12
|
+
attr_accessor :keywords, :random_keywords, :unsuccessful_keywords, :image_list, :collage, :dir, :filename, :squares
|
13
|
+
|
14
|
+
def initialize(keywords: [], filename: 'collage.jpg', dir: '.', no_of_images: nil, rows: nil, squares: false)
|
15
|
+
@filename = filename
|
16
|
+
@dir = dir
|
17
|
+
@squares = squares
|
18
|
+
@no_of_images = no_of_images || (keywords.empty? ? 10 : keywords.length)
|
19
|
+
assign_and_extend_keywords(keywords)
|
20
|
+
|
21
|
+
@image_list, @unsuccessful_keywords = FileLoader.image_list(@keywords)
|
22
|
+
|
23
|
+
create_collage(rows: rows || Math.sqrt(@no_of_images).floor)
|
24
|
+
end
|
25
|
+
|
26
|
+
def save(force: false)
|
27
|
+
path = prepare_and_check_path(force)
|
28
|
+
@collage.write(path)
|
29
|
+
rescue Errors::DirNotFound, Errors::FileExist
|
30
|
+
raise
|
31
|
+
rescue => e
|
32
|
+
raise Errors::FileCannotBeSaved, "#{e.class}: #{e.message}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def save!
|
36
|
+
save(force: true)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def assign_and_extend_keywords(keywords)
|
42
|
+
@random_keywords = []
|
43
|
+
(@no_of_images - keywords.length).times { @random_keywords << Dictionary.words.sample }
|
44
|
+
@keywords = keywords + @random_keywords
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_collage(rows: 3, width: 1200)
|
48
|
+
@image_list.scene = 0
|
49
|
+
collage_list = Magick::ImageList.new
|
50
|
+
|
51
|
+
height = 0
|
52
|
+
rows.times do |i|
|
53
|
+
row = create_image_row(no_of_images: images_per_row(rows, i))
|
54
|
+
collage_list << row.scale(width.to_f / row.columns)
|
55
|
+
collage_list.page = Magick::Rectangle.new(0, 0, 0, height)
|
56
|
+
height += collage_list.rows
|
57
|
+
end
|
58
|
+
|
59
|
+
@collage = collage_list.mosaic
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_image_row(no_of_images:, height: 300)
|
63
|
+
row = Magick::ImageList.new
|
64
|
+
|
65
|
+
width = 0
|
66
|
+
no_of_images.times do
|
67
|
+
row << (@squares ? @image_list.resize_to_fill(height) : @image_list.scale(height.to_f / @image_list.rows))
|
68
|
+
row.page = Magick::Rectangle.new(0, 0, width, 0)
|
69
|
+
width += row.columns
|
70
|
+
increment_image_list_scene
|
71
|
+
end
|
72
|
+
|
73
|
+
row.mosaic
|
74
|
+
end
|
75
|
+
|
76
|
+
def increment_image_list_scene
|
77
|
+
@image_list.scene += 1
|
78
|
+
rescue
|
79
|
+
@image_list.scene = 0
|
80
|
+
end
|
81
|
+
|
82
|
+
def images_per_row(rows, i)
|
83
|
+
@no_of_images / rows + (i.positive? && i <= @no_of_images % rows ? 1 : 0)
|
84
|
+
end
|
85
|
+
|
86
|
+
def prepare_and_check_path(force)
|
87
|
+
raise Errors::DirNotFound unless File.directory?(dir.to_s)
|
88
|
+
|
89
|
+
path = File.join(dir, filename)
|
90
|
+
raise Errors::FileExist if !force && File.exist?(path)
|
91
|
+
|
92
|
+
path
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class FlickrCollage
|
2
|
+
class Dictionary
|
3
|
+
@path = '/usr/share/dict/words'
|
4
|
+
|
5
|
+
class << self
|
6
|
+
attr_reader :path
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.path=(value)
|
10
|
+
@words = nil
|
11
|
+
@path = value
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.words
|
15
|
+
@words ||= File.open(@path.to_s).read.to_s.split("\n")
|
16
|
+
rescue
|
17
|
+
raise Errors::DictionaryNotFound
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class FlickrCollage
|
2
|
+
class Errors
|
3
|
+
class DictionaryNotFound < StandardError; end
|
4
|
+
class DirNotFound < StandardError; end
|
5
|
+
class FileCannotBeSaved < StandardError; end
|
6
|
+
class FileExist < StandardError; end
|
7
|
+
class NoFlickRawURLMethod < StandardError; end
|
8
|
+
class NoImageFound < StandardError; end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
class FlickrCollage
|
4
|
+
class FileLoader
|
5
|
+
FLICK_RAW_URL_METHODS = %w(url url_m url_s url_t url_b url_z url_q url_n url_c url_o).freeze
|
6
|
+
|
7
|
+
attr_accessor :unsuccessful_keywords
|
8
|
+
|
9
|
+
def self.image_list(keywords)
|
10
|
+
FileLoader.new.load_flickr_files(keywords)
|
11
|
+
end
|
12
|
+
|
13
|
+
def load_flickr_files(keywords, image_list: Magick::ImageList.new, url_method: 'url_b')
|
14
|
+
keywords.each { |k| image_list.push(load_flickr_file(k, url_method)) }
|
15
|
+
|
16
|
+
[image_list, @unsuccessful_keywords]
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def load_flickr_file(keyword, url_method)
|
22
|
+
open(flickr_file_url(keyword, url_method)) do |uri|
|
23
|
+
raise Errors::NoImageFound unless uri.is_a? ::Tempfile
|
24
|
+
return Magick::Image.from_blob(uri.read).first
|
25
|
+
end
|
26
|
+
rescue Errors::NoImageFound
|
27
|
+
(@unsuccessful_keywords ||= {})[keyword] = Dictionary.words.sample
|
28
|
+
keyword = @unsuccessful_keywords[keyword]
|
29
|
+
retry
|
30
|
+
end
|
31
|
+
|
32
|
+
def flickr_file_url(keyword, url_method)
|
33
|
+
raise Errors::NoFlickRawURLMethod unless FLICK_RAW_URL_METHODS.include?(url_method)
|
34
|
+
|
35
|
+
FlickRaw.send(url_method, flickr_photo_search(keyword))
|
36
|
+
end
|
37
|
+
|
38
|
+
def flickr_photo_search(keyword)
|
39
|
+
photo_search = flickr.photos.search(
|
40
|
+
tags: [keyword],
|
41
|
+
sort: 'interestingness-desc',
|
42
|
+
content_type: 1,
|
43
|
+
per_page: 1
|
44
|
+
)
|
45
|
+
|
46
|
+
raise Errors::NoImageFound unless photo_search.first
|
47
|
+
|
48
|
+
photo_search.first
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/tmp/fruits.jpg
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flickr_collage
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ingo Plaschczek
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: flickraw
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
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: rmagick
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: highline
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: cri
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.12'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.12'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
description: Flickr Collage queries the Flickr API for the top-rated image by search
|
112
|
+
keywords and assembles a collage grid from this images to a new file.
|
113
|
+
email:
|
114
|
+
- github@plaschczek.de
|
115
|
+
executables:
|
116
|
+
- flickr_collage
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- ".gitignore"
|
121
|
+
- ".rspec"
|
122
|
+
- ".travis.yml"
|
123
|
+
- Gemfile
|
124
|
+
- LICENSE.txt
|
125
|
+
- README.md
|
126
|
+
- Rakefile
|
127
|
+
- bin/console
|
128
|
+
- bin/setup
|
129
|
+
- exe/flickr_collage
|
130
|
+
- flickr_collage.gemspec
|
131
|
+
- lib/flickr_collage.rb
|
132
|
+
- lib/flickr_collage/dictionary.rb
|
133
|
+
- lib/flickr_collage/errors.rb
|
134
|
+
- lib/flickr_collage/file_loader.rb
|
135
|
+
- lib/flickr_collage/initializer.rb
|
136
|
+
- lib/flickr_collage/version.rb
|
137
|
+
- tmp/fruits.jpg
|
138
|
+
homepage: https://github.com/plaschczek/flickr_collage
|
139
|
+
licenses:
|
140
|
+
- MIT
|
141
|
+
metadata: {}
|
142
|
+
post_install_message:
|
143
|
+
rdoc_options: []
|
144
|
+
require_paths:
|
145
|
+
- lib
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
requirements: []
|
157
|
+
rubyforge_project:
|
158
|
+
rubygems_version: 2.6.7
|
159
|
+
signing_key:
|
160
|
+
specification_version: 4
|
161
|
+
summary: Makes a collage of Flickr images by keywords
|
162
|
+
test_files: []
|