require_dir 0.1.2 → 1.0.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
- SHA1:
3
- metadata.gz: 059b6f8de63b2557966908e76cead3d137642590
4
- data.tar.gz: a2c128d3165444e72c23458ae99c63750d1e8213
2
+ SHA256:
3
+ metadata.gz: 176bbfddf11657c59b8dd1f2254b5b6355fb9c47fa2424ab912148f816c33114
4
+ data.tar.gz: 557bafbcfee44d9e91fb1da631fd84cc27cbb07f9f7a06054b991557a5779dc4
5
5
  SHA512:
6
- metadata.gz: 94811d95ef361b928b7c6d8b5fcc40a38a578dd9fc169c7deeb1ee138e27b16b0bdcfd0e649f112193745f0791486c8c2fe4ad531960138080ea29e79c9fa2d3
7
- data.tar.gz: a6a5ce85dd1f6165c7a61e458c28b765c2addda65192eacc7433e80d93aedb3d874fa4f691bf22b19690503d836536dac1596036abc03e648f61f5af025e0bcd
6
+ metadata.gz: 7f8d135050287dfff5a2c49dd05e325578f14d34d456672e70906d7a9ed85d8c2d43f4adee13445e53807167ae3ccf6c755096e2f56c07613203e2e91b9bd346
7
+ data.tar.gz: 3c0524a4f194f2cb53caadbb44f08e408068362e8278b0c1d7c3ad39192b8336eedaac31e20861310c250eb7c256d7e23d70e09a64dfd8e9c6b493a5ed231f4d
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
+ .idea/
2
+ **/.DS_Store
1
3
  /.bundle/
2
4
  /.yardoc
3
5
  /Gemfile.lock
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
- --format documentation
1
+ --format progress
2
2
  --color
data/.travis.yml CHANGED
@@ -1,10 +1,20 @@
1
1
  language: ruby
2
2
  env:
3
- - CODECLIMATE_REPO_TOKEN=703cb4759e977bdd9502305ae454a0acdf7bd0d51d418e88048110f4735c4a80
3
+ global:
4
+ - CODECLIMATE_REPO_TOKEN=703cb4759e977bdd9502305ae454a0acdf7bd0d51d418e88048110f4735c4a80
4
5
  rvm:
5
- - 2.2.3
6
- - 2.3.0
7
- script: "bundle exec rspec"
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
  [![Gem Version](https://badge.fury.io/rb/require_dir.svg)](https://badge.fury.io/rb/require_dir)
4
4
  [![Downloads](http://ruby-gem-downloads-badge.herokuapp.com/require_dir?type=total)](https://rubygems.org/gems/require_dir)
5
5
 
6
- <br />
7
-
8
- [![Build Status](https://travis-ci.org/kigster/require_dir.svg?branch=master)](https://travis-ci.org/kigster/warp-dir)
9
- [![Code Climate](https://codeclimate.com/github/kigster/require_dir/badges/gpa.svg)](https://codeclimate.com/githb/kigster/require_dir)
10
- [![Test Coverage](https://codeclimate.com/github/kigster/require_dir/badges/coverage.svg)](https://codeclimate.com/github/kigster/require_dir/coverage)
6
+ [![Build Status](https://travis-ci.org/kigster/require_dir.svg?branch=master)](https://travis-ci.org/kigster/require_dir)
7
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/ad8aceb1bb3c22f72194/test_coverage)](https://codeclimate.com/github/kigster/require_dir/test_coverage)
8
+ [![Maintainability](https://api.codeclimate.com/v1/badges/ad8aceb1bb3c22f72194/maintainability)](https://codeclimate.com/github/kigster/require_dir/maintainability)
11
9
  [![Issue Count](https://codeclimate.com/github/kigster/require_dir/badges/issue_count.svg)](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), &copy; 2016, distributed under the MIT license.
18
+ This library is the work of [Konstantin Gredeskoul](http:/kig.re), &copy; 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
- extend RequireDir
47
- init __FILE__
44
+ RequireDir.enable_require_dir!(self, __FILE__)
48
45
  end
49
46
 
50
- Mylib.dir('mylib/subfolder') # loads all files in the folder 'lib/mylib/subfolder/*.rb'
51
- Mylib.dir_r('mylib/subfolder') # recursive load from 'lib/mylib/subfolder/**/*.rb'
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
- extend RequireDir
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
- extend RequireDir
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 "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
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
@@ -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(file)
32
+ Kernel.require file
27
33
  rescue SyntaxError, LoadError => e
28
- len = file.length + 6
29
- STDERR.puts '—' * len
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
@@ -1,3 +1,3 @@
1
1
  module RequireDir
2
- VERSION = '0.1.2'
2
+ VERSION = '1.0.0'
3
3
  end
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 'forwardable'
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
- def init_with_offset(source, offset = 0, options = {})
14
- project_folder = project_folder_from(source: source, offset: offset)
15
- self.loader = RequireDir::Loader.new(project_folder, options)
16
- end
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
- def init(source, options = {})
19
- init_with_offset(source, 0, options)
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 'codeclimate-test-reporter', '~> 0.5'
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.1.2
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: 2016-07-14 00:00:00.000000000 Z
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: codeclimate-test-reporter
70
+ name: simplecov
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: '0.5'
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.5'
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.5.1
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