unsplash_image 0.1.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
+ SHA256:
3
+ metadata.gz: 27977f3506d7d69b51a21fe2d1cc0a521fc5fa5d6b90ffa37bbdda9d001e8774
4
+ data.tar.gz: dae359ff65d6f3edec2534581a1db3f97a2f951f9101359fec2a4066d19f1c95
5
+ SHA512:
6
+ metadata.gz: adddf72e64434d5825eeec312dcbcf6e21131420b348ae36f026d3b2ba054d160d834640e6c67bceb05f993074183fef2b524fb77a796ef23fedc03854104292
7
+ data.tar.gz: 60a6289114199d9f7eb89d25866500f328307fb590162f82afba1f9aa528708f95563a3d1d0631cc657c6b1a7b999fa8149b747e6ba61bd8ad9839970629d1cb
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2022
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.md ADDED
@@ -0,0 +1,97 @@
1
+ # Unsplash Image Downloader & Helpers
2
+
3
+ [![RailsJazz](https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/my_other.svg?raw=true)](https://www.railsjazz.com)
4
+
5
+ A CLI and a set of Rails helpers to get free images from [Unsplash](https://unsplash.com/).
6
+
7
+ This is the easiest way to fill your Rails app with real photos.
8
+
9
+ ## Usage
10
+
11
+ 1. as Rails helper to generate dummy images:
12
+ ```ruby
13
+ <%= image_tag unsplash_image_url(size: '300x200', tags: 'cat, dog') %>
14
+
15
+ <%= image_tag unsplash_image_url(size: '800x600', tags: 'building') %>
16
+
17
+ <%= image_tag unsplash_image_url(tags: 'nature') %>
18
+ ```
19
+
20
+ 2. as a tool to download images from Unsplash.com and use them for your seeds or specs.
21
+
22
+ ```bash
23
+ unsplash_image download --path images/cats --tags cat -n 20
24
+ ```
25
+
26
+ 3. If you need to have a `File` object with a random image.
27
+
28
+ ```ruby
29
+ file = UnsplashImage.tempfile(size: '500x500', tags: 'cat')
30
+ ```
31
+
32
+ ### CLI
33
+
34
+ By default `unsplash_image download --path ./files` will download 10 random images into a `./files` folder.
35
+
36
+ You can see list of all available options by running:
37
+
38
+
39
+ ```bash
40
+ unsplash_image --help download
41
+ ```
42
+
43
+ With additional options you can specify a destination folder, tags, resolution of the images.
44
+
45
+
46
+ ### In your Rails app
47
+
48
+ You can get random image url inside your views using `unsplash_image_url`.
49
+
50
+ Example:
51
+ ```erb
52
+ <%= image_tag unsplash_image_url(size: '300x200', tags: 'cat, dog') %>
53
+ ```
54
+
55
+ Also you can get it as a file with `UnsplashImage.tempfile`.
56
+
57
+ Example:
58
+ ```ruby
59
+ file = UnsplashImage.tempfile(size: '500x500', tags: 'cat')
60
+ ```
61
+
62
+ ## Installation
63
+
64
+ Add this line to your application's Gemfile:
65
+
66
+ ```ruby
67
+ gem "unsplash_image"
68
+ ```
69
+
70
+ And then execute:
71
+ ```bash
72
+ $ bundle
73
+ ```
74
+
75
+ To use CLI anywhere in the system you can install gem globally:
76
+
77
+ ```bash
78
+ gem install unsplash_image
79
+ ```
80
+
81
+ ## Contributing
82
+
83
+ You are welcome to contribute. See list of `TODO's` below.
84
+
85
+ ## TODO
86
+
87
+ - allow caching downloaded files for performance improvement (eg using in factories)
88
+ - check with older Rails versions
89
+ - tests or specs
90
+ - make stand-alone executable installable via `brew`, `apt get`, etc?
91
+
92
+ ## License
93
+
94
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
95
+
96
+ [<img src="https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/more_gems.png?raw=true"
97
+ />](https://www.railsjazz.com/?utm_source=github&utm_medium=bottom&utm_campaign=unsplash_image)
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require "bundler/setup"
2
+
3
+ require "bundler/gem_tasks"
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'unsplash_image/cli'
3
+
4
+ UnsplashImage::CLI.start
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :unsplash_image do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,89 @@
1
+ require "thor"
2
+
3
+ require "unsplash_image"
4
+ require "pathname"
5
+
6
+ module UnsplashImage
7
+ class CLI < Thor
8
+ package_name "UnsplashImage"
9
+
10
+ map "-d" => :download
11
+ map "--download" => :download
12
+
13
+ default_task :info
14
+
15
+ desc :info, "Print info about cli"
16
+
17
+ method_option :version, type: :boolean, default: false, aliases: [:v], banner: "Print UnsplashImage version"
18
+ def info
19
+ if options[:version]
20
+ puts "UnsplashImage #{UnsplashImage::VERSION}"
21
+ else
22
+ info = [
23
+ "UnsplashImage #{UnsplashImage::VERSION}",
24
+ "",
25
+ "Usage example: ",
26
+ " unsplash_image download --path spec/files -n 10",
27
+ " unsplash_image download --path images/cats -s 400x400 --tags cat -n 20",
28
+ " unsplash_image download --path files/ -s 300x300 --tags cat dogs birds -n 20",
29
+ "",
30
+ "run 'unsplash_image download' to see awailable options"
31
+ ]
32
+ puts info.join("\n")
33
+ end
34
+ end
35
+
36
+ desc "download [OPTIONS]", "Download Unsplash images"
37
+
38
+ long_desc <<-LONGDESC
39
+ `unsplash_image download` will download random unsplash images on your PC
40
+
41
+ Example:
42
+
43
+ > $ unsplash_image download --path images/cats -s 400x400 --tags cat -n 20
44
+ LONGDESC
45
+
46
+ DEFAULT_COUNT = 10
47
+ DEFAULT_PATH = "."
48
+
49
+ method_option :size, type: :string, aliases: [:s], banner: "Specify image size. Example: -s 640x480"
50
+ method_option :count, type: :numeric, aliases: [:n], banner: "Specify images count. Example: -n 10"
51
+ method_option :path, type: :string, banner: "Specify folder. Example: --path images/cats"
52
+ method_option :tags, type: :array, aliases: [:t], banner: "Specify tags. Example: -t cats"
53
+ method_option :prefix, type: :string, banner: "Specify file name prefix. Example: --prefix cat_image"
54
+ def download
55
+ if options.keys.empty?
56
+ invoke :help, ["download"]
57
+ else
58
+ prefix = if !!options[:prefix]
59
+ options[:prefix]
60
+ else
61
+ !(options[:tags].nil? || options[:tags].empty?) ? options[:tags].join("_") : "image"
62
+ end
63
+ tags = options[:tags]&.join(" ").to_s
64
+
65
+ base_path = Pathname.new(options[:path] || DEFAULT_PATH)
66
+ FileUtils.mkdir_p(base_path)
67
+
68
+ puts "Downloading images to #{base_path.absolute? ? base_path : base_path.realpath.relative_path_from(Dir.pwd)}"
69
+ count = (options[:count] || DEFAULT_COUNT).to_i
70
+ count.times do |i|
71
+ filename = count == 1 ? "#{prefix}.jpeg" : "#{prefix}_#{i + 1}.jpeg"
72
+ filename = filename.encode(Encoding::UTF_8, invalid: :replace, undef: :replace, replace: "�").strip.tr("\u{202E}%$|:;/\t\r\n\\", "-")
73
+ path = File.expand_path(filename, base_path)
74
+ puts "Downloading #{filename}"
75
+ UnsplashImage.tempfile(size: options[:size], filename: filename, tags: tags + (" " * i)) do |tempfile|
76
+ File.write(path, tempfile.read)
77
+ end
78
+ end
79
+ puts "Done!"
80
+ end
81
+ end
82
+
83
+ class << self
84
+ def exit_on_failure?
85
+ true
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,26 @@
1
+ require "open-uri"
2
+ require "tempfile"
3
+
4
+ module UnsplashImage
5
+ module Download
6
+ def tempfile(size: nil, filename: "image.jpeg", tags: nil)
7
+ file = Tempfile.new(filename)
8
+ begin
9
+ file.write(URI.parse(UnsplashImage::Helper.unsplash_image_url(size: size, tags: tags)).read)
10
+ file.rewind
11
+ if block_given?
12
+ yield file
13
+ else
14
+ file
15
+ end
16
+ ensure
17
+ if block_given?
18
+ file.close
19
+ file.unlink
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ extend Download
26
+ end
@@ -0,0 +1,16 @@
1
+ module UnsplashImage
2
+ module Helper
3
+ extend self
4
+
5
+ BASE = "https://source.unsplash.com/random".freeze
6
+
7
+ def unsplash_image_url(size:, tags: nil)
8
+ options = [BASE]
9
+
10
+ options << size
11
+ options << "?#{tags}" if tags
12
+
13
+ options.join("/")
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ module UnsplashImage
2
+ class Railtie < ::Rails::Railtie
3
+ initializer "unsplash_image.helpers", before: :load_config_initializers do
4
+ ActiveSupport.on_load :action_view do
5
+ include UnsplashImage::Helper
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module UnsplashImage
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,7 @@
1
+ require "unsplash_image/version"
2
+ require "unsplash_image/helper"
3
+ require "unsplash_image/download"
4
+ require "unsplash_image/railtie" if defined?(::Rails)
5
+
6
+ module UnsplashImage
7
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: unsplash_image
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Igor Kasyanchuk
8
+ - Liubomyr Manastyretskyi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2022-06-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0.20'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0.20'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rails
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: faker
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: pry
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: puma
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ description: Show the random images in your Rails app or download them to use for
85
+ seeding a DB
86
+ email:
87
+ - igorkasyanchuk@gmail.com
88
+ - manastyretskyi@gmail.com
89
+ executables:
90
+ - unsplash_image
91
+ extensions: []
92
+ extra_rdoc_files: []
93
+ files:
94
+ - MIT-LICENSE
95
+ - README.md
96
+ - Rakefile
97
+ - bin/unsplash_image
98
+ - lib/tasks/unsplash_image_tasks.rake
99
+ - lib/unsplash_image.rb
100
+ - lib/unsplash_image/cli.rb
101
+ - lib/unsplash_image/download.rb
102
+ - lib/unsplash_image/helper.rb
103
+ - lib/unsplash_image/railtie.rb
104
+ - lib/unsplash_image/version.rb
105
+ homepage: https://github.com/railsjazz/unsplash_image
106
+ licenses:
107
+ - MIT
108
+ metadata: {}
109
+ post_install_message:
110
+ rdoc_options: []
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubygems_version: 3.2.3
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: Show the random images in your Rails app or download them to use for seeding
128
+ a DB
129
+ test_files: []