require_smasher 0.2.1 → 0.3.0

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
  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