simple-images-downloader 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eaab3c2b2fd909ddb983e0f23b20bb4361c41288ea834ab698b972c42a3b211b
4
- data.tar.gz: ea9be3356750b3ec278b01f439eac533c12dc757ab9c0fb26496e7b90a954302
3
+ metadata.gz: 5d6712c3ea229e3cb09526ef0f0144f79fa9dcf1d7af6f20b23a83502ea34be1
4
+ data.tar.gz: b1147429efdf91682067decf309aec22050f2ed835b0b0261560f93fd6a63aa6
5
5
  SHA512:
6
- metadata.gz: a127db82c6529f8c592f1a85f88f8cc7742aa5ea175a18cdca895e7f4e17a08b14213713aa1b5030cdf44fda1ddd785c7b600f7f7ad69854d09dc5179e1ba708
7
- data.tar.gz: 32538f8dd10a8d7d3eca94819cac12a2170364b11a612b7a555cb3898eba95e19628ea8726ab95e2cbc86e5cac65dfbbab128461c5e54cae01b37a3354cfcc61
6
+ metadata.gz: b3cf6db2633b3ebf0e094482079193fa2dbcb75e169c70ea3778e9c46b00abbdae4089378c36d8570630aa0698ca5343ee1a97e67f6e8e193c1d234c240bb35f
7
+ data.tar.gz: cd9645e49d0a1658c74a6acde0a5608bd5a79fea67acda6235057c018066aaee7b5352ca150a5bf77d926189cd41dfb43950e62f0257edab98f31fc25f7a3f1b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 1.0.3 - 2023-09-27
2
+ - Corrected destination validation in SimpleImagesDownloader::Dispenser
3
+ - Corrected source file validation in SimpleImagesDownloader::SourceFiles
4
+ - Refactored
5
+ - Fixed error message when destination is invalid
6
+
1
7
  ## 1.0.2 - 2020-09-25
2
8
  - Refactored SimpleImagesDownloader::Dispenser keeping the same behaviour
3
9
  - Updated README
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple-images-downloader (1.0.2)
4
+ simple-images-downloader (1.0.3)
5
5
  zeitwerk (~> 2.4.0)
6
6
 
7
7
  GEM
@@ -10,7 +10,6 @@ GEM
10
10
  addressable (2.7.0)
11
11
  public_suffix (>= 2.0.2, < 5.0)
12
12
  ast (2.4.1)
13
- byebug (11.1.3)
14
13
  coderay (1.1.3)
15
14
  concurrent-ruby (1.1.7)
16
15
  crack (0.4.4)
@@ -29,9 +28,6 @@ GEM
29
28
  pry (0.13.1)
30
29
  coderay (~> 1.1)
31
30
  method_source (~> 1.0)
32
- pry-byebug (3.9.0)
33
- byebug (~> 11.0)
34
- pry (~> 0.13.0)
35
31
  public_suffix (4.0.6)
36
32
  rainbow (3.0.0)
37
33
  rake (12.3.3)
@@ -80,7 +76,7 @@ GEM
80
76
  addressable (>= 2.3.6)
81
77
  crack (>= 0.3.2)
82
78
  hashdiff (>= 0.4.0, < 2.0.0)
83
- zeitwerk (2.4.0)
79
+ zeitwerk (2.4.2)
84
80
 
85
81
  PLATFORMS
86
82
  ruby
@@ -88,7 +84,6 @@ PLATFORMS
88
84
  DEPENDENCIES
89
85
  faker (~> 2.14)
90
86
  pry (~> 0.13.1)
91
- pry-byebug (~> 3.9.0)
92
87
  rake (~> 12.0)
93
88
  rspec (~> 3.0)
94
89
  rspec_junit_formatter (~> 0.4.1)
@@ -104,4 +99,4 @@ RUBY VERSION
104
99
  ruby 2.7.1p83
105
100
 
106
101
  BUNDLED WITH
107
- 2.1.4
102
+ 2.2.19
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleImagesDownloader
4
+ class Client
5
+ def initialize(options = Configuration::REQUEST_OPTIONS)
6
+ @options = options
7
+ end
8
+
9
+ def open(uri)
10
+ uri.open(@options)
11
+ rescue OpenURI::HTTPRedirect
12
+ raise Errors::RedirectError, uri
13
+ rescue OpenURI::HTTPError
14
+ raise Errors::ConnectionError, uri
15
+ end
16
+ end
17
+ end
@@ -8,6 +8,13 @@ module SimpleImagesDownloader
8
8
  destination
9
9
  ].freeze
10
10
 
11
+ REQUEST_OPTIONS = {
12
+ 'User-Agent' => "SimpleImagesDownloader/#{SimpleImagesDownloader::VERSION}",
13
+ redirect: false,
14
+ open_timeout: 30,
15
+ read_timeout: 30
16
+ }.freeze
17
+
11
18
  attr_accessor(*ACCESSORS)
12
19
 
13
20
  def initialize
@@ -3,28 +3,30 @@
3
3
  module SimpleImagesDownloader
4
4
  class Dispenser
5
5
  extend Forwardable
6
+ include Validatable
6
7
 
7
8
  def_delegator 'SimpleImagesDownloader::Configuration', :destination, :destination_dir
8
9
 
9
- def initialize(source, remote_path)
10
+ def initialize(source, remote_path, validators = [DestinationValidator.new])
10
11
  @source = source
11
12
  @remote_path = remote_path
13
+ @validators = validators
12
14
  end
13
15
 
14
16
  def place
15
- raise Errors::DestinationIsNotWritable, destination unless File.writable?(destination_dir)
17
+ validate!(destination_dir)
16
18
 
17
- FileUtils.mv @source, destination
19
+ FileUtils.mv @source, target
18
20
  end
19
21
 
20
- def destination
21
- @destination ||= destination_dir + file_name
22
+ def target
23
+ @target ||= destination_dir + file_name
22
24
  end
23
25
 
24
26
  def file_name
25
27
  @file_name ||= File.basename(@source) + File.extname(@remote_path)
26
28
  end
27
29
 
28
- private :destination_dir, :destination, :file_name
30
+ private :destination_dir, :target, :file_name
29
31
  end
30
32
  end
@@ -2,13 +2,6 @@
2
2
 
3
3
  module SimpleImagesDownloader
4
4
  class Downloader
5
- REQUEST_OPTIONS = {
6
- 'User-Agent' => "SimpleImagesDownloader/#{SimpleImagesDownloader::VERSION}",
7
- redirect: false,
8
- open_timeout: 30,
9
- read_timeout: 30
10
- }.freeze
11
-
12
5
  def initialize(uri)
13
6
  @uri = uri
14
7
  end
@@ -16,23 +9,15 @@ module SimpleImagesDownloader
16
9
  def download
17
10
  puts "Downloading #{@uri}"
18
11
 
19
- @downloaded_file = StringioToTempfile.convert(downloaded_file) if downloaded_file.is_a?(StringIO)
12
+ io = Client.new.open(@uri)
13
+
14
+ downloaded_file = StringioToTempfile.convert(io) unless io.nil?
20
15
 
21
16
  Dispenser.new(downloaded_file, @uri.path).place
22
17
 
23
18
  puts 'Downloading is finished'
24
19
  ensure
25
- downloaded_file.close
26
- end
27
-
28
- private
29
-
30
- def downloaded_file
31
- @downloaded_file ||= @uri.open(REQUEST_OPTIONS)
32
- rescue OpenURI::HTTPRedirect
33
- raise Errors::RedirectError, @uri
34
- rescue OpenURI::HTTPError
35
- raise Errors::ConnectionError, @uri
20
+ downloaded_file&.close
36
21
  end
37
22
  end
38
23
  end
@@ -52,5 +52,19 @@ module SimpleImagesDownloader
52
52
  super(message)
53
53
  end
54
54
  end
55
+
56
+ class DestinationIsNotDirectory < BaseError
57
+ def initialize(path)
58
+ message = "The destination - #{path} is not directory"
59
+ super(message)
60
+ end
61
+ end
62
+
63
+ class PermissionsError < BaseError
64
+ def initialize(path)
65
+ message = "Couldn't read file #{path} due to permissions error"
66
+ super(message)
67
+ end
68
+ end
55
69
  end
56
70
  end
@@ -2,14 +2,17 @@
2
2
 
3
3
  module SimpleImagesDownloader
4
4
  class Line
5
- def initialize(string)
6
- @string = string
5
+ include Validatable
6
+
7
+ def initialize(string, validators = [ImagePathValidator.new])
8
+ @string = string
9
+ @validators = validators
7
10
  end
8
11
 
9
12
  def uri
10
13
  parsed_uri = URI.parse(@string)
11
14
 
12
- ImagePathValidator.new(@string).validate
15
+ validate!(@string)
13
16
 
14
17
  parsed_uri
15
18
  rescue URI::Error
@@ -2,13 +2,15 @@
2
2
 
3
3
  module SimpleImagesDownloader
4
4
  class SourceFile
5
- def initialize(path, validator = nil)
6
- @path = path
7
- @validator = validator || SimpleImagesDownloader::FilePersistanceValidator.new(path)
5
+ include Validatable
6
+
7
+ def initialize(path, validators = [FilePersistanceValidator.new, FileAccessibilityValidator.new])
8
+ @path = path
9
+ @validators = validators
8
10
  end
9
11
 
10
12
  def each_line(&block)
11
- @validator.validate
13
+ validate!(@path)
12
14
 
13
15
  begin
14
16
  file.each(chomp: true, &block)
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleImagesDownloader
4
+ module Validatable
5
+ class DestinationValidator < Validator
6
+ def validate(destination_dir)
7
+ raise Errors::DestinationIsNotDirectory, destination_dir unless File.directory?(destination_dir)
8
+ raise Errors::DestinationIsNotWritable, destination_dir unless File.writable?(destination_dir)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleImagesDownloader
4
+ module Validatable
5
+ class FileAccessibilityValidator < Validator
6
+ def validate(path)
7
+ return if File.readable?(path)
8
+
9
+ raise Errors::PermissionsError, path
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleImagesDownloader
4
+ module Validatable
5
+ class FilePersistanceValidator < Validator
6
+ def validate(path)
7
+ return if File.exist?(path)
8
+
9
+ raise Errors::MissingFileError, path
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleImagesDownloader
4
+ module Validatable
5
+ class ImagePathValidator < Validator
6
+ VALID_EXTENSIONS = %w[.png .jpg .gif .jpeg].freeze
7
+
8
+ def validate(path)
9
+ extension = File.extname(path)
10
+
11
+ return if VALID_EXTENSIONS.include?(extension)
12
+
13
+ raise Errors::MissingImageInPath, path
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleImagesDownloader
4
+ module Validatable
5
+ class Validator
6
+ def validate(_value)
7
+ raise NotImplementedError, 'must be implemented in subclass'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SimpleImagesDownloader
4
+ module Validatable
5
+ def validate!(value)
6
+ (@validators ||= []).each { |validator| validator.validate(value) }
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SimpleImagesDownloader
4
- VERSION = '1.0.2'
4
+ VERSION = '1.0.3'
5
5
  end
data/rubocop.yml CHANGED
@@ -33,7 +33,7 @@ Style/Documentation:
33
33
  Enabled: false
34
34
 
35
35
  Style/MethodCalledOnDoEndBlock:
36
- Enabled: true
36
+ Enabled: false
37
37
 
38
38
  Style/CollectionMethods:
39
39
  Enabled: true
@@ -34,7 +34,6 @@ Gem::Specification.new do |spec|
34
34
 
35
35
  spec.add_development_dependency 'faker', '~> 2.14'
36
36
  spec.add_development_dependency 'pry', '~> 0.13.1'
37
- spec.add_development_dependency 'pry-byebug', '~> 3.9.0'
38
37
  spec.add_development_dependency 'rake', '~> 12.0'
39
38
  spec.add_development_dependency 'rspec', '~> 3.0'
40
39
  spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4.1'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-images-downloader
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - IlkhamGaysin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-25 00:00:00.000000000 Z
11
+ date: 2023-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.13.1
55
- - !ruby/object:Gem::Dependency
56
- name: pry-byebug
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 3.9.0
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 3.9.0
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -192,7 +178,7 @@ dependencies:
192
178
  - - "~>"
193
179
  - !ruby/object:Gem::Version
194
180
  version: 3.9.1
195
- description:
181
+ description:
196
182
  email:
197
183
  - ilgamgaysin@gmail.com
198
184
  executables:
@@ -220,16 +206,21 @@ files:
220
206
  - bin/setup
221
207
  - exe/simple-images-downloader
222
208
  - lib/simple_images_downloader.rb
209
+ - lib/simple_images_downloader/client.rb
223
210
  - lib/simple_images_downloader/configuration.rb
224
211
  - lib/simple_images_downloader/dispenser.rb
225
212
  - lib/simple_images_downloader/downloader.rb
226
213
  - lib/simple_images_downloader/errors.rb
227
- - lib/simple_images_downloader/file_persistance_validator.rb
228
- - lib/simple_images_downloader/image_path_validator.rb
229
214
  - lib/simple_images_downloader/line.rb
230
215
  - lib/simple_images_downloader/runner.rb
231
216
  - lib/simple_images_downloader/source_file.rb
232
217
  - lib/simple_images_downloader/stringio_to_tempfile.rb
218
+ - lib/simple_images_downloader/validatable.rb
219
+ - lib/simple_images_downloader/validatable/destination_validator.rb
220
+ - lib/simple_images_downloader/validatable/file_accessibility_validator.rb
221
+ - lib/simple_images_downloader/validatable/file_persistance_validator.rb
222
+ - lib/simple_images_downloader/validatable/image_path_validator.rb
223
+ - lib/simple_images_downloader/validatable/validator.rb
233
224
  - lib/simple_images_downloader/version.rb
234
225
  - rubocop.yml
235
226
  - simple_images_downloader.gemspec
@@ -240,7 +231,7 @@ metadata:
240
231
  homepage_uri: https://github.com/IlkhamGaysin/simple-images-downloader
241
232
  source_code_uri: https://github.com/IlkhamGaysin/simple-images-downloader
242
233
  changelog_uri: https://github.com/IlkhamGaysin/simple-images-downloader/blob/master/CHANGELOG.md
243
- post_install_message:
234
+ post_install_message:
244
235
  rdoc_options: []
245
236
  require_paths:
246
237
  - lib
@@ -256,7 +247,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
256
247
  version: '0'
257
248
  requirements: []
258
249
  rubygems_version: 3.1.2
259
- signing_key:
250
+ signing_key:
260
251
  specification_version: 4
261
252
  summary: simple-images-downloader allows to download images from a file containing
262
253
  list of urls to those images.
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SimpleImagesDownloader
4
- class FilePersistanceValidator
5
- def initialize(path)
6
- @path = path
7
- end
8
-
9
- def validate
10
- raise Errors::MissingFileError, @path unless File.exist?(@path)
11
- end
12
- end
13
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SimpleImagesDownloader
4
- class ImagePathValidator
5
- VALID_EXTENSIONS = %w[.png .jpg .gif .jpeg].freeze
6
-
7
- def initialize(path)
8
- @path = path
9
- end
10
-
11
- def validate
12
- raise Errors::MissingImageInPath, @path unless VALID_EXTENSIONS.include?(extension)
13
- end
14
-
15
- private
16
-
17
- def extension
18
- File.extname(@path)
19
- end
20
- end
21
- end