require_smasher 0.2.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3da408037a9f85eef8e4be1eba320ad78b171cb7
4
- data.tar.gz: 73a52007125c2917af67bc41ac0a94fcdbc5d656
3
+ metadata.gz: 3fb7ce1c8f8213d9683665307a4cf1675b056db9
4
+ data.tar.gz: 251e377b2e8d74f0e0068981671fec2d741dff29
5
5
  SHA512:
6
- metadata.gz: 0ac054876926170e918282c9a801b106afaf51f2d91fee508e3936d80400e359cddda3a522d353b35f367a7c39205ff69adf63294a028faf1a1fadec4a662f8e
7
- data.tar.gz: 23ec690f227c6d15b8bddf9dc51f7d3c17124fb648e003666f0471cf1cfeb48fb2207db36eebd1d9d56008aaef723d928fcea9535875e69d2ea69080a2ab5af6
6
+ metadata.gz: 839c625191357ccf0242d667d0970c09d2f05197ee6b7a8b6a95880f0ca66f6161d5741e4bf5aa5b970268f552e1f7d1505a5cb670e793d2082f411d2edcd555
7
+ data.tar.gz: 1c4da1a0f07bce36bbf66c247301608162c91673697c846e2d84c527443b1d6a33585e63e0641903891f6296de3f8a4decc8c052f045e5bb11f5ee5492cc1dcf
data/README.md CHANGED
@@ -7,7 +7,9 @@ This project was born just to solve a problem: require ruby files **recursively*
7
7
  - require ruby files recursively in a list of directories and their sub-directories, trying to resolve interdependent files (`require_dirs`)
8
8
  - require a gem (`require_gem`)
9
9
  - require a list of gems (`require_gems`)
10
- - require a **list of gems** and ruby files in a **list of directories** and their sub-directories with just **one command** (`require_all`)
10
+ - require a ruby file (`require_file`)
11
+ - require a list of ruby files (`require_files`)
12
+ - require a **list of gems**, ruby files in a **list of directories** and their sub-directories and a **list of files** with just **one command** (`require_all`)
11
13
 
12
14
  ## Installation
13
15
 
@@ -30,9 +32,11 @@ Or install it yourself as:
30
32
  ### Require All
31
33
 
32
34
  ```ruby
33
- require_all 'directory_1', 'directory_2/sub-directory', 'gem_1', 'gem_2'
35
+ require_all 'directory_1', 'directory_2/sub-directory', 'gem_1', 'gem_2', 'directory_3/filename_1', 'filename_2'
34
36
  ```
35
- This command will require all ruby files found in directory `directory_1` and its sub-directories, all ruby files in directory `directory_2/sub-directory` and in its sub-directories, gem `gem_1` and gem `gem_2`.
37
+ This command will require all ruby files found in directory `directory_1` and its sub-directories, all ruby files in directory `directory_2/sub-directory` and in its sub-directories, gem `gem_1` and gem `gem_2`, and files `directory_3/filename_1.rb` and `filename_2.rb`.
38
+
39
+ **Note**: the order of elements is not important, because Require Smasher will try to resolve any dependences among them.
36
40
 
37
41
  ### Require Dir
38
42
 
@@ -62,6 +66,20 @@ require_gems 'gem_1', 'gem_2'
62
66
  ```
63
67
  This command accept a list of gems and it will require gems `gem_1` and `gem_2`.
64
68
 
69
+ ### Require File
70
+
71
+ ```ruby
72
+ require_file 'filename'
73
+ ```
74
+ This command will require the file `filename.rb`. You don't have to inform Ruby extension file (**rb**), if you want.
75
+
76
+ ### Require Files
77
+
78
+ ```ruby
79
+ require_gems 'filename_1', 'directory/filename_2', 'directory/filename_3.rb'
80
+ ```
81
+ This command accept a list of files and it will require files `filename_1.rb`, `directory/filename_2.rb` and `directory/filename_3.rb`. You don't have to inform Ruby extension file (**rb**), if you want.
82
+
65
83
  ## Development
66
84
 
67
85
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,19 +1,10 @@
1
1
  require 'require_smasher/version'
2
2
  require 'require_smasher/require_gem'
3
- require 'require_smasher/require_dir'
3
+ require 'require_smasher/require_file'
4
+ require 'require_smasher/require_all'
4
5
 
5
6
  def require_all(*required_list)
6
- directories = []
7
- gems = []
8
-
9
- required_list.uniq.each do |required|
10
- directory = Dir.exist?(required)
11
- directories << required if directory
12
- gems << required unless directory
13
- end
14
-
15
- require_gem(gems) unless gems.empty?
16
- require_dir(directories) unless directories.empty?
7
+ RequireAll.req(required_list)
17
8
  end
18
9
 
19
10
  def require_gem(gems)
@@ -22,8 +13,13 @@ def require_gem(gems)
22
13
  end
23
14
 
24
15
  def require_dir(directories)
25
- return RequireDir.req([directories]) if directories.instance_of?(String)
26
- RequireDir.req(directories)
16
+ return RequireFile.require_directories([directories]) if directories.instance_of?(String)
17
+ RequireFile.require_directories(directories)
18
+ end
19
+
20
+ def require_file(files)
21
+ return RequireFile.require_files([files]) if files.instance_of?(String)
22
+ RequireFile.require_files(files)
27
23
  end
28
24
 
29
25
  def require_dirs(*directories)
@@ -33,3 +29,7 @@ end
33
29
  def require_gems(*gems)
34
30
  require_gem(gems)
35
31
  end
32
+
33
+ def require_files(*files)
34
+ require_file(files)
35
+ end
@@ -0,0 +1,32 @@
1
+ module RequireAll
2
+ def self.req(required_list)
3
+ result = required_list_classified(required_list)
4
+
5
+ RequireGem.req(result[:gems]) unless result[:gems].empty?
6
+ RequireFile.require_files(result[:files]) unless result[:files].empty?
7
+ end
8
+
9
+ def self.required_list_classified(elements)
10
+ result = { files: [], gems: [] }
11
+
12
+ elements.uniq.each do |element|
13
+ is_file = file?(element)
14
+ is_directory = Dir.exist?(element)
15
+ is_gem = !(is_file || is_directory)
16
+
17
+ result[:files] << element if is_file
18
+ result[:files].concat(RequireFile.files([element])) if is_directory
19
+ result[:gems] << element if is_gem
20
+ end
21
+ result
22
+ end
23
+
24
+ def self.file?(element)
25
+ file = File.expand_path("./#{element}")
26
+ return true if File.file?(file)
27
+ return false if element.include?('.')
28
+ File.file?("#{file}.rb")
29
+ end
30
+
31
+ private_class_method :required_list_classified, :file?
32
+ end
@@ -0,0 +1,45 @@
1
+ module RequireFile
2
+ def self.require_files(files, attempt = 0)
3
+ raise StandardError, 'File was not informed' if files.empty?
4
+ errors_list = req_files(files)
5
+
6
+ return if errors_list[:files_with_error].empty?
7
+ attempt += 1 if files == errors_list[:files_with_error]
8
+
9
+ raise StandardError, errors_list[:errors] if attempt > 1
10
+ require_files(errors_list[:files_with_error], attempt)
11
+ end
12
+
13
+ def self.require_directories(directories)
14
+ raise StandardError, 'Directory was not informed' if directories.empty?
15
+ require_files(files(directories))
16
+ end
17
+
18
+ def self.files(directories)
19
+ raise StandardError, 'Directory was not informed' if directories.empty?
20
+
21
+ files = []
22
+ directories.uniq.each do |directory|
23
+ raise StandardError, "Directory '#{directory}' does not exist" unless Dir.exist?(directory)
24
+ files.concat(Dir.glob(File.join("./#{directory}", '**', '*.rb')))
25
+ end
26
+ files
27
+ end
28
+
29
+ def self.req_files(files)
30
+ errors_list = { files_with_error: [], errors: [] }
31
+
32
+ files.uniq.each do |file|
33
+ begin
34
+ require_relative File.expand_path("./#{file}")
35
+ rescue LoadError, StandardError => error
36
+ errors_list[:files_with_error] << file
37
+ errors_list[:errors] << "Error while requiring file #{file}: #{error.message}"
38
+ end
39
+ end
40
+
41
+ errors_list
42
+ end
43
+
44
+ private_class_method :req_files
45
+ end
@@ -1,3 +1,3 @@
1
1
  module RequireSmasher
2
- VERSION = '0.2.1'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: require_smasher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joacir Junior
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-16 00:00:00.000000000 Z
11
+ date: 2018-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -115,7 +115,8 @@ files:
115
115
  - bin/console
116
116
  - bin/setup
117
117
  - lib/require_smasher.rb
118
- - lib/require_smasher/require_dir.rb
118
+ - lib/require_smasher/require_all.rb
119
+ - lib/require_smasher/require_file.rb
119
120
  - lib/require_smasher/require_gem.rb
120
121
  - lib/require_smasher/version.rb
121
122
  - require_smasher.gemspec
@@ -1,38 +0,0 @@
1
- module RequireDir
2
- def self.req(directories)
3
- raise StandardError, 'Directory was not informed' if directories.empty?
4
- require_files(files(directories))
5
- end
6
-
7
- def self.files(directories)
8
- files = []
9
- directories.uniq.each do |directory|
10
- raise StandardError, "Directory '#{directory}' does not exist" unless Dir.exist?(directory)
11
- files.concat(Dir.glob(File.join(File.expand_path("./#{directory}"), '**', '*.rb')))
12
- end
13
- files
14
- end
15
-
16
- def self.require_files(files, attempt = 0)
17
- files_with_error = []
18
- errors = []
19
-
20
- files.uniq.each do |file|
21
- begin
22
- require_relative file
23
- rescue StandardError => error
24
- files_with_error << file
25
- errors << "Error while requiring file #{file}: #{error.message}"
26
- end
27
- end
28
-
29
- return if files_with_error.empty?
30
-
31
- attempt += 1 if files == files_with_error
32
-
33
- raise StandardError, errors if attempt > 1
34
- require_files(files_with_error, attempt)
35
- end
36
-
37
- private_class_method :files, :require_files
38
- end