require_dir 0.1.2 → 1.0.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 +5 -5
- data/.gitignore +2 -0
- data/.rspec +1 -1
- data/.travis.yml +14 -4
- data/README.md +12 -14
- data/Rakefile +31 -2
- data/lib/require_dir/initializer.rb +32 -0
- data/lib/require_dir/loader.rb +29 -12
- data/lib/require_dir/version.rb +1 -1
- data/lib/require_dir.rb +27 -21
- data/require_dir.gemspec +3 -1
- metadata +23 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 176bbfddf11657c59b8dd1f2254b5b6355fb9c47fa2424ab912148f816c33114
|
4
|
+
data.tar.gz: 557bafbcfee44d9e91fb1da631fd84cc27cbb07f9f7a06054b991557a5779dc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f8d135050287dfff5a2c49dd05e325578f14d34d456672e70906d7a9ed85d8c2d43f4adee13445e53807167ae3ccf6c755096e2f56c07613203e2e91b9bd346
|
7
|
+
data.tar.gz: 3c0524a4f194f2cb53caadbb44f08e408068362e8278b0c1d7c3ad39192b8336eedaac31e20861310c250eb7c256d7e23d70e09a64dfd8e9c6b493a5ed231f4d
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
--format
|
1
|
+
--format progress
|
2
2
|
--color
|
data/.travis.yml
CHANGED
@@ -1,10 +1,20 @@
|
|
1
1
|
language: ruby
|
2
2
|
env:
|
3
|
-
|
3
|
+
global:
|
4
|
+
- CODECLIMATE_REPO_TOKEN=703cb4759e977bdd9502305ae454a0acdf7bd0d51d418e88048110f4735c4a80
|
4
5
|
rvm:
|
5
|
-
- 2.2.
|
6
|
-
- 2.3.
|
7
|
-
|
6
|
+
- 2.2.9
|
7
|
+
- 2.3.6
|
8
|
+
- 2.4.3
|
9
|
+
- 2.5.0
|
10
|
+
before_script:
|
11
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
12
|
+
- chmod +x ./cc-test-reporter
|
13
|
+
- ./cc-test-reporter before-build
|
14
|
+
script:
|
15
|
+
- bundle exec rspec
|
16
|
+
after_script:
|
17
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
8
18
|
notifications:
|
9
19
|
email:
|
10
20
|
recipients:
|
data/README.md
CHANGED
@@ -3,11 +3,9 @@
|
|
3
3
|
[](https://badge.fury.io/rb/require_dir)
|
4
4
|
[](https://rubygems.org/gems/require_dir)
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
[](https://codeclimate.com/githb/kigster/require_dir)
|
10
|
-
[](https://codeclimate.com/github/kigster/require_dir/coverage)
|
6
|
+
[](https://travis-ci.org/kigster/require_dir)
|
7
|
+
[](https://codeclimate.com/github/kigster/require_dir/test_coverage)
|
8
|
+
[](https://codeclimate.com/github/kigster/require_dir/maintainability)
|
11
9
|
[](https://codeclimate.com/github/kigster/require_dir)
|
12
10
|
|
13
11
|
|
@@ -17,7 +15,7 @@ Unlike other gems, such as `require_all`, this gem does suffer from module clobb
|
|
17
15
|
|
18
16
|
## Author
|
19
17
|
|
20
|
-
This library is the work of [Konstantin Gredeskoul](http:/kig.re), © 2016, distributed under the MIT license.
|
18
|
+
This library is the work of [Konstantin Gredeskoul](http:/kig.re), © 2016-2018, distributed under the MIT license.
|
21
19
|
|
22
20
|
## Installation
|
23
21
|
|
@@ -43,15 +41,17 @@ Recommended usage is to include this gem's module into the top level module of y
|
|
43
41
|
# file 'lib/mylib.rb' -- top level file for a gem 'mylib'
|
44
42
|
require 'require_dir'
|
45
43
|
module Mylib
|
46
|
-
|
47
|
-
init __FILE__
|
44
|
+
RequireDir.enable_require_dir!(self, __FILE__)
|
48
45
|
end
|
49
46
|
|
50
|
-
Mylib.
|
51
|
-
Mylib.
|
47
|
+
Mylib.require_dir('mylib/subfolder') # loads all files in the folder 'lib/mylib/subfolder/*.rb'
|
48
|
+
Mylib.require_dir_r('mylib/subfolder') # recursive load from 'lib/mylib/subfolder/**/*.rb'
|
52
49
|
|
53
50
|
```
|
54
51
|
|
52
|
+
You can also use shorcuts `dir` and `dir_r`, which are equivalent to `require_dir` and `require_dir_r` respectively.
|
53
|
+
|
54
|
+
|
55
55
|
### Offset
|
56
56
|
|
57
57
|
You can optionally load the library using `init_with_offset` method, which allows you
|
@@ -66,8 +66,7 @@ be able to later use RequireDir to load files relative to `lib`. This is how you
|
|
66
66
|
require 'require_dir'
|
67
67
|
module Mylib
|
68
68
|
module SubFolder
|
69
|
-
|
70
|
-
init_with_offset(__FILE__, 1)
|
69
|
+
RequireDir.enable_require_dir!(self, __FILE__, 1)
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
@@ -86,8 +85,7 @@ exploded. You can enable debugging output using two methods:
|
|
86
85
|
* Initialize library with options hash, setting:
|
87
86
|
|
88
87
|
```ruby
|
89
|
-
|
90
|
-
init __FILE__, debug: true
|
88
|
+
RequireDir.enable_require_dir!(self, __FILE__, 0, debug: true)
|
91
89
|
```
|
92
90
|
|
93
91
|
## Development
|
data/Rakefile
CHANGED
@@ -1,6 +1,35 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'yard'
|
4
|
+
|
5
|
+
def shell(*args)
|
6
|
+
puts "running: #{args.join(' ')}"
|
7
|
+
system(args.join(' '))
|
8
|
+
end
|
9
|
+
|
10
|
+
task :clean do
|
11
|
+
shell('rm -rf pkg/ tmp/ coverage/ doc/' )
|
12
|
+
end
|
13
|
+
|
14
|
+
task :gem => [:build] do
|
15
|
+
shell('gem install pkg/*')
|
16
|
+
end
|
17
|
+
|
18
|
+
task :permissions => [ :clean ] do
|
19
|
+
shell("chmod -v o+r,g+r * */* */*/* */*/*/* */*/*/*/* */*/*/*/*/*")
|
20
|
+
shell("find . -type d -exec chmod o+x,g+x {} \\;")
|
21
|
+
end
|
22
|
+
|
23
|
+
task :build => :permissions
|
24
|
+
|
25
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
26
|
+
t.files = %w(lib/**/*.rb exe/*.rb - README.md LICENSE.txt)
|
27
|
+
t.options.unshift('--title','RequireDir')
|
28
|
+
t.after = ->() { exec('open doc/index.html') }
|
29
|
+
end
|
3
30
|
|
4
31
|
RSpec::Core::RakeTask.new(:spec)
|
5
32
|
|
6
33
|
task :default => :spec
|
34
|
+
|
35
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
module RequireDir
|
3
|
+
module Initializer
|
4
|
+
attr_accessor :loader
|
5
|
+
class << self
|
6
|
+
def included(base)
|
7
|
+
base.instance_eval do
|
8
|
+
class << self
|
9
|
+
attr_accessor :loader
|
10
|
+
extend Forwardable
|
11
|
+
def_delegators :@loader, :dir, :dir_r, :require_dir, :require_dir_r
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def init(source, offset = 0, options = {})
|
18
|
+
project_folder = project_folder_from(source: source, offset: offset)
|
19
|
+
self.loader = create_loader(options, project_folder)
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_loader(options, project_folder)
|
23
|
+
RequireDir::Loader.new(project_folder, options)
|
24
|
+
end
|
25
|
+
|
26
|
+
def project_folder_from(source:, offset: 0)
|
27
|
+
dirs_up = ''
|
28
|
+
offset.times { dirs_up << '/..' } if offset > 0
|
29
|
+
File.dirname(File.expand_path(source + dirs_up))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/require_dir/loader.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'require_dir/version'
|
2
|
-
|
2
|
+
require 'colored2'
|
3
3
|
module RequireDir
|
4
4
|
#
|
5
5
|
# This class is meant to be instantiated per project/library, and then used to load
|
@@ -8,6 +8,12 @@ module RequireDir
|
|
8
8
|
|
9
9
|
attr_accessor :project_root, :options
|
10
10
|
|
11
|
+
class << self
|
12
|
+
attr_accessor :stderr
|
13
|
+
end
|
14
|
+
|
15
|
+
self.stderr = STDERR
|
16
|
+
|
11
17
|
def initialize(root_dir, options = {})
|
12
18
|
raise ArgumentError.new("Folder #{root_dir} is not found") unless Dir.exist?(root_dir)
|
13
19
|
self.project_root = root_dir
|
@@ -23,25 +29,36 @@ module RequireDir
|
|
23
29
|
::Dir.glob(project_root + folder + (recursive ? '/**/*.rb' : '/*.rb') ) do |file|
|
24
30
|
puts "Loading #{file}" if debug?
|
25
31
|
begin
|
26
|
-
Kernel.require
|
32
|
+
Kernel.require file
|
27
33
|
rescue SyntaxError, LoadError => e
|
28
|
-
|
29
|
-
|
30
|
-
STDERR.puts "⇨ #{file.bold.yellow} ⇦".bold.white
|
31
|
-
STDERR.puts '—' * len
|
32
|
-
STDERR.puts e.message.bold.red
|
33
|
-
STDERR.puts '—' * len
|
34
|
-
STDERR.puts e.backtrace.join("\n").bold.black if e.backtrace && !e.backtrace.empty?
|
35
|
-
exit 1
|
34
|
+
report_error(e, file)
|
35
|
+
raise(e)
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
39
|
-
|
40
38
|
end
|
41
39
|
|
42
40
|
def dir_r(folder)
|
43
41
|
dir(folder, true)
|
44
42
|
end
|
45
43
|
|
44
|
+
alias require_dir dir
|
45
|
+
alias require_dir_r dir_r
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def report_error(e, file)
|
50
|
+
len = file.length + 6
|
51
|
+
outputs '—' * len
|
52
|
+
outputs "⇨ #{file.bold.yellow} ⇦".bold.white
|
53
|
+
outputs '—' * len
|
54
|
+
outputs e.message.bold.red
|
55
|
+
outputs '—' * len
|
56
|
+
outputs e.backtrace.join("\n").bold.black if e.backtrace && !e.backtrace.empty?
|
57
|
+
end
|
58
|
+
|
59
|
+
def outputs(*args)
|
60
|
+
self.class.stderr.puts(*args) if self.class.stderr
|
61
|
+
end
|
62
|
+
|
46
63
|
end
|
47
64
|
end
|
data/lib/require_dir/version.rb
CHANGED
data/lib/require_dir.rb
CHANGED
@@ -1,28 +1,34 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
1
3
|
require 'require_dir/version'
|
2
4
|
require 'require_dir/loader'
|
3
|
-
require '
|
4
|
-
module RequireDir
|
5
|
-
attr_accessor :loader
|
5
|
+
require 'require_dir/initializer'
|
6
6
|
|
7
|
-
def project_folder_from(source: , offset: 0)
|
8
|
-
dirs_up = ''
|
9
|
-
offset.times { dirs_up << '/..' } if offset > 0
|
10
|
-
File.dirname(File.expand_path(source + dirs_up))
|
11
|
-
end
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
#
|
9
|
+
# This module should be used to enable directory-wide
|
10
|
+
# requiring of dependent ruby files. Recursive is also supported.
|
11
|
+
#
|
12
|
+
# @example of the usage:
|
13
|
+
#
|
14
|
+
# module Foo
|
15
|
+
# class Bar
|
16
|
+
# RequireDir.enable(self, __FILE__)
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
# Foo::Bar.dir()
|
20
|
+
module RequireDir
|
21
|
+
class << self
|
22
|
+
# @deprecated Please use {#enable_require_dir!} instead
|
23
|
+
def included(klass)
|
24
|
+
klass.extend(RequireDir::Initializer)
|
25
|
+
klass.include(RequireDir::Initializer)
|
26
|
+
end
|
17
27
|
|
18
|
-
|
19
|
-
|
28
|
+
def enable_require_dir!(klass, source_file, offset = 0, **options)
|
29
|
+
klass.extend(RequireDir::Initializer)
|
30
|
+
klass.include(RequireDir::Initializer)
|
31
|
+
klass.init(source_file, offset, options)
|
32
|
+
end
|
20
33
|
end
|
21
|
-
|
22
|
-
alias_method :init_from_source, :init_with_offset
|
23
|
-
|
24
|
-
extend Forwardable
|
25
|
-
def_delegators :@loader, :dir, :dir_r
|
26
|
-
|
27
|
-
extend self
|
28
34
|
end
|
data/require_dir.gemspec
CHANGED
@@ -17,8 +17,10 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
18
|
spec.require_paths = %w(lib)
|
19
19
|
|
20
|
+
spec.add_dependency 'colored2'
|
21
|
+
|
20
22
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
21
23
|
spec.add_development_dependency 'rake', '~> 10.0'
|
22
24
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
23
|
-
spec.add_development_dependency '
|
25
|
+
spec.add_development_dependency 'simplecov'
|
24
26
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: require_dir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Konstantin Gredeskoul
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colored2
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,19 +67,19 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '3.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: simplecov
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0
|
75
|
+
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0
|
82
|
+
version: '0'
|
69
83
|
description: 'Easily and non-intrusively require files from sub-folders. Without polluting
|
70
84
|
global namespace, or having modules clobber each other, include RequireDir and initialize
|
71
85
|
it to get access to #dir and #dir_r'
|
@@ -87,6 +101,7 @@ files:
|
|
87
101
|
- bin/console
|
88
102
|
- bin/setup
|
89
103
|
- lib/require_dir.rb
|
104
|
+
- lib/require_dir/initializer.rb
|
90
105
|
- lib/require_dir/loader.rb
|
91
106
|
- lib/require_dir/version.rb
|
92
107
|
- require_dir.gemspec
|
@@ -110,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
125
|
version: '0'
|
111
126
|
requirements: []
|
112
127
|
rubyforge_project:
|
113
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.7.6
|
114
129
|
signing_key:
|
115
130
|
specification_version: 4
|
116
131
|
summary: Easily and non-intrusively require files from sub-folders
|