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 +4 -4
- data/README.md +21 -3
- data/lib/require_smasher.rb +14 -14
- data/lib/require_smasher/require_all.rb +32 -0
- data/lib/require_smasher/require_file.rb +45 -0
- data/lib/require_smasher/version.rb +1 -1
- metadata +4 -3
- data/lib/require_smasher/require_dir.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fb7ce1c8f8213d9683665307a4cf1675b056db9
|
4
|
+
data.tar.gz: 251e377b2e8d74f0e0068981671fec2d741dff29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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.
|
data/lib/require_smasher.rb
CHANGED
@@ -1,19 +1,10 @@
|
|
1
1
|
require 'require_smasher/version'
|
2
2
|
require 'require_smasher/require_gem'
|
3
|
-
require 'require_smasher/
|
3
|
+
require 'require_smasher/require_file'
|
4
|
+
require 'require_smasher/require_all'
|
4
5
|
|
5
6
|
def require_all(*required_list)
|
6
|
-
|
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
|
26
|
-
|
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
|
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.
|
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-
|
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/
|
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
|