autoloaded 1.4.1 → 1.7.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 +4 -8
- data/.rspec +1 -1
- data/.travis.yml +15 -0
- data/Gemfile +11 -10
- data/Guardfile +21 -22
- data/History.md +35 -10
- data/License.md +1 -1
- data/README.md +78 -68
- data/Rakefile +4 -0
- data/autoloaded.gemspec +41 -37
- data/bin/console +10 -0
- data/bin/setup +8 -0
- data/lib/autoloaded/autoloader.rb +24 -6
- data/lib/autoloaded/constant.rb +1 -0
- data/lib/autoloaded/deprecation.rb +0 -2
- data/lib/autoloaded/inflection.rb +0 -2
- data/lib/autoloaded/load_pathed_directory.rb +2 -4
- data/lib/autoloaded/specification.rb +2 -0
- data/lib/autoloaded/specifications.rb +3 -3
- data/lib/autoloaded/version.rb +1 -1
- data/lib/autoloaded/warning.rb +1 -3
- data/lib/tasks/lib_each.rake +15 -3
- data/lib/tasks/spec.rake +3 -6
- metadata +22 -121
- data/spec/autoloaded/autoloader_spec.rb +0 -469
- data/spec/autoloaded/constant_spec.rb +0 -53
- data/spec/autoloaded/deprecation_spec.rb +0 -23
- data/spec/autoloaded/inflection_spec.rb +0 -30
- data/spec/autoloaded/load_pathed_directory_spec.rb +0 -120
- data/spec/autoloaded/refine/string/to_source_filename_spec.rb +0 -19
- data/spec/autoloaded/specification_spec.rb +0 -98
- data/spec/autoloaded/specifications_spec.rb +0 -191
- data/spec/autoloaded/version_spec.rb +0 -3
- data/spec/autoloaded/warning_spec.rb +0 -115
- data/spec/autoloaded_macro_sharedspec.rb +0 -24
- data/spec/autoloaded_spec.rb +0 -321
- data/spec/fixtures/autoloaded_with_conventional_filename/N-est-ed.rb +0 -1
- data/spec/fixtures/autoloaded_with_conventional_filename/nest_ed.rb +0 -1
- data/spec/fixtures/autoloaded_with_conventional_filename/nested/doubly_nested.rb +0 -9
- data/spec/fixtures/autoloaded_with_conventional_filename/nested.rb +0 -16
- data/spec/fixtures/autoloaded_with_conventional_filename/old_school_autoload.rb +0 -5
- data/spec/fixtures/autoloaded_with_conventional_filename.rb +0 -12
- data/spec/fixtures/autoloaded_with_unconventional_filename/N-est-ed.rb +0 -7
- data/spec/fixtures/autoloaded_with_unconventional_filename/nest_ed.rb +0 -1
- data/spec/fixtures/autoloaded_with_unconventional_filename/old_school_autoload.rb +0 -5
- data/spec/fixtures/autoloaded_with_unconventional_filename.rb +0 -12
- data/spec/fixtures/filenames/AFilename.rb +0 -0
- data/spec/fixtures/filenames/a-file-name.rb +0 -0
- data/spec/fixtures/filenames/a-filename.rb +0 -0
- data/spec/fixtures/filenames/a_file_name.rb +0 -0
- data/spec/fixtures/filenames/a_filename.rb +0 -0
- data/spec/fixtures/filenames/afile-name.rb +0 -0
- data/spec/fixtures/filenames/afile_name.rb +0 -0
- data/spec/fixtures/not_autoloaded/nested.rb +0 -1
- data/spec/fixtures/not_autoloaded/old_school_autoload.rb +0 -5
- data/spec/fixtures/not_autoloaded.rb +0 -5
- data/spec/fixtures/old_api/autoloaded_with_conventional_filename/N-est-ed.rb +0 -1
- data/spec/fixtures/old_api/autoloaded_with_conventional_filename/nest_ed.rb +0 -1
- data/spec/fixtures/old_api/autoloaded_with_conventional_filename/nested.rb +0 -5
- data/spec/fixtures/old_api/autoloaded_with_conventional_filename/old_school_autoload.rb +0 -5
- data/spec/fixtures/old_api/autoloaded_with_conventional_filename.rb +0 -10
- data/spec/fixtures/old_api/autoloaded_with_conventional_filename_only/nested.rb +0 -5
- data/spec/fixtures/old_api/autoloaded_with_conventional_filename_only/old_school_autoload.rb +0 -5
- data/spec/fixtures/old_api/autoloaded_with_conventional_filename_only.rb +0 -10
- data/spec/fixtures/old_api/autoloaded_with_unconventional_filenames/N-est-ed.rb +0 -5
- data/spec/fixtures/old_api/autoloaded_with_unconventional_filenames/nest_ed.rb +0 -0
- data/spec/fixtures/old_api/autoloaded_with_unconventional_filenames/old_school_autoload.rb +0 -5
- data/spec/fixtures/old_api/autoloaded_with_unconventional_filenames.rb +0 -10
- data/spec/fixtures/old_api/not_autoloaded/nested.rb +0 -1
- data/spec/fixtures/old_api/not_autoloaded/old_school_autoload.rb +0 -5
- data/spec/fixtures/old_api/not_autoloaded.rb +0 -6
- data/spec/matchers.rb +0 -85
- data/spec/spec_helper.rb +0 -91
- data/spec/support/util.rb +0 -43
- data/spec/support/without_side_effects.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0736db59154581469d671b352eed15faaa35a23d962de033d9106fd69bb56887
|
4
|
+
data.tar.gz: 58857610f89eda2d2e933767e81cb2e2901b78b4b7cc25ebbde7ff94acab75b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a1ca3c1af68c99bb541d136fcc38e3679f59bc77da1270f6a4f9e8b225cf4ded70c4678a25312ccb1bda6a7a5ce9a6634f2c13a16bd3df9c2f0550b2f91e7c5
|
7
|
+
data.tar.gz: 97751b780b02f4d838bf0702bbae78c152ce3bcd41107369ded24f91319ed55d6388fe026cd2da9da9f642659a04096142f08d5bbef4715ad974869b1433e318
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.travis.yml
CHANGED
@@ -3,10 +3,25 @@ bundler_args: --without debug doc tooling
|
|
3
3
|
rvm:
|
4
4
|
- 2.0
|
5
5
|
- 2.1
|
6
|
+
- 2.2
|
7
|
+
- 2.3
|
8
|
+
- 2.4
|
9
|
+
- 2.5
|
10
|
+
- 2.6
|
11
|
+
- 2.7
|
12
|
+
- 3.0
|
6
13
|
- ruby-head
|
7
14
|
- jruby-head
|
15
|
+
- rbx
|
16
|
+
- rbx-2
|
8
17
|
script: "bundle exec rake test"
|
9
18
|
matrix:
|
10
19
|
allow_failures:
|
20
|
+
- rvm: 1.9
|
11
21
|
- rvm: ruby-head
|
12
22
|
- rvm: jruby-head
|
23
|
+
- rvm: rbx
|
24
|
+
- rvm: rbx-2
|
25
|
+
branches:
|
26
|
+
except:
|
27
|
+
- /^gh-pages.*$/
|
data/Gemfile
CHANGED
@@ -3,22 +3,23 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
group :debug do
|
6
|
-
gem 'pry-byebug',
|
7
|
-
|
6
|
+
gem 'pry-byebug', '~> 3', platforms: [:mri_20,
|
7
|
+
:mri_21,
|
8
|
+
:mri_22,
|
9
|
+
:mri_23,
|
10
|
+
:mri_24,
|
11
|
+
:mri_25]
|
12
|
+
gem 'pry-debugger', '~> 0', platforms: :mri_19
|
8
13
|
end
|
9
14
|
|
10
15
|
group :doc do
|
11
|
-
gem 'yard',
|
12
|
-
gem 'rdiscount',
|
13
|
-
end
|
14
|
-
|
15
|
-
group :test do
|
16
|
-
gem 'codeclimate-test-reporter', '~> 0', require: false
|
16
|
+
gem 'yard', '>= 0.9.11', '< 1', require: false
|
17
|
+
gem 'rdiscount', '~> 2', require: false
|
17
18
|
end
|
18
19
|
|
19
20
|
group :tooling do
|
20
|
-
gem 'guard-rspec',
|
21
|
+
gem 'guard-rspec', '~> 4', require: false
|
21
22
|
if RUBY_PLATFORM =~ /darwin/i
|
22
|
-
gem 'rb-fsevent',
|
23
|
+
gem 'rb-fsevent', '~> 0', require: false
|
23
24
|
end
|
24
25
|
end
|
data/Guardfile
CHANGED
@@ -1,38 +1,37 @@
|
|
1
|
-
|
1
|
+
require 'guard/rspec/dsl'
|
2
2
|
|
3
3
|
debugger_gem = %w(pry-byebug pry-debugger).detect do |gem|
|
4
4
|
`bundle show #{gem} 2>&1 >/dev/null`
|
5
5
|
$?.success?
|
6
6
|
end
|
7
7
|
debugger_require = debugger_gem ? " --require #{debugger_gem}" : nil
|
8
|
-
guard :rspec, all_after_pass: true,
|
9
|
-
all_on_start: true,
|
10
|
-
cmd: "bundle exec rspec#{debugger_require} --format progress" do
|
11
|
-
# Run the corresponding spec (or all specs) when code changes.
|
12
|
-
watch( %r{^lib/(.+)\.rb$} ) do |match|
|
13
|
-
Dir["spec/#{match[1]}_spec.rb"].first || 'spec'
|
14
|
-
end
|
15
8
|
|
16
|
-
|
17
|
-
|
9
|
+
guard :rspec, all_on_start: true,
|
10
|
+
all_after_pass: true,
|
11
|
+
cmd: "bundle exec rspec --format progress#{debugger_require}" do
|
12
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
13
|
+
rspec, ruby = dsl.rspec, dsl.ruby
|
18
14
|
|
19
|
-
#
|
20
|
-
watch(
|
15
|
+
# RSpec files
|
16
|
+
watch('.rspec') { rspec.spec_dir }
|
17
|
+
watch rspec.spec_helper { rspec.spec_dir }
|
18
|
+
watch rspec.spec_support { rspec.spec_dir }
|
19
|
+
watch(%r{^spec/support}) { rspec.spec_dir } # This should not be necessary.
|
20
|
+
watch rspec.spec_files
|
21
21
|
|
22
22
|
# Run all specs when a matcher changes.
|
23
|
-
watch(
|
23
|
+
watch('spec/matchers.rb') { 'spec' }
|
24
24
|
|
25
|
-
# Run all specs when a
|
26
|
-
watch(
|
25
|
+
# Run all specs when a shared spec changes.
|
26
|
+
watch(%r{^spec/.+_sharedspec\.rb$}) { rspec.spec_dir }
|
27
27
|
|
28
28
|
# Run all specs when a fixture changes.
|
29
|
-
watch(
|
30
|
-
|
31
|
-
# Run all specs when the RSpec configuration changes.
|
32
|
-
watch( '.rspec' ) { 'spec' }
|
33
|
-
watch( 'spec/spec_helper.rb' ) { 'spec' }
|
29
|
+
watch(%r{^spec/fixtures}) { rspec.spec_dir }
|
34
30
|
|
35
31
|
# Run all specs when the bundle changes.
|
36
|
-
watch(
|
37
|
-
watch(
|
32
|
+
watch('Gemfile.lock') { rspec.spec_dir }
|
33
|
+
watch(%r{^(.+)\.gemspec$}) { rspec.spec_dir }
|
34
|
+
|
35
|
+
# Ruby files
|
36
|
+
dsl.watch_spec_files_for ruby.lib_files
|
38
37
|
end
|
data/History.md
CHANGED
@@ -1,8 +1,28 @@
|
|
1
|
-
# Version history for the
|
1
|
+
# Version history for the *Autoloaded* project
|
2
|
+
|
3
|
+
## <a name="v1.7.0"></a>v1.7.0, Sat 9/19/2021
|
4
|
+
|
5
|
+
* Add support for Ruby v3 (thanks to [@krimsonkla][GitHub-user-krimsonkla])
|
6
|
+
|
7
|
+
## <a name="v1.6.0"></a>v1.6.0, Sun 4/05/2020
|
8
|
+
|
9
|
+
* Eliminate Ruby warnings about
|
10
|
+
[*Binding#source_location*][Ruby-Core-Binding-source_location] (thanks to
|
11
|
+
[@guss77][GitHub-user-guss77])
|
12
|
+
|
13
|
+
## <a name="v1.5.1"></a>v1.5.1, Wed 10/18/2017
|
14
|
+
|
15
|
+
* Eliminate Ruby warnings about undefined instance variables
|
16
|
+
|
17
|
+
## <a name="v1.5.0"></a>v1.5.0, Wed 2/22/2017
|
18
|
+
|
19
|
+
* Add support for Ruby load paths (`$:`) that contain one or more
|
20
|
+
[*Pathname*][Ruby-Stdlib-Pathname] objects (thanks to
|
21
|
+
[@ekampp][GitHub-user-ekampp])
|
2
22
|
|
3
23
|
## <a name="v1.4.1"></a>v1.4.1, Sat 1/24/2015
|
4
24
|
|
5
|
-
* Don’t warn about a
|
25
|
+
* Don’t warn about a *VERSION* constant presumably loaded by a *.gemspec*
|
6
26
|
|
7
27
|
## <a name="v1.3.0"></a>v1.3.0, Fri 12/26/2014
|
8
28
|
|
@@ -16,11 +36,11 @@
|
|
16
36
|
|
17
37
|
* Correct/improve autoload behavior
|
18
38
|
* Instead of returning the source **directory** path from
|
19
|
-
[
|
39
|
+
[*Module#autoload?*][Ruby-Core-Module-autoload], return one or more matching
|
20
40
|
source **file** path(s)
|
21
41
|
* Use Ruby load path (`$:`) to handle relative source file paths
|
22
|
-
* Explain
|
23
|
-
[
|
42
|
+
* Explain *Module#autoload?* and
|
43
|
+
[*Module#constants*][Ruby-Core-Module-constants] in the [readme][readme] and
|
24
44
|
in [inline documentation][inline-documentation]
|
25
45
|
|
26
46
|
## <a name="v1.0.0"></a>v1.0.0, Wed 10/29/2014
|
@@ -31,8 +51,13 @@
|
|
31
51
|
|
32
52
|
(First release)
|
33
53
|
|
34
|
-
[
|
35
|
-
[
|
36
|
-
[
|
37
|
-
[
|
38
|
-
[
|
54
|
+
[GitHub-user-krimsonkla]: https://github.com/krimsonkla "GitHub user @krimsonkla"
|
55
|
+
[GitHub-user-ekampp]: https://github.com/ekampp "GitHub user @ekampp"
|
56
|
+
[GitHub-user-guss77]: https://github.com/guss77 "GitHub user @guss77"
|
57
|
+
[JRuby]: https://www.jruby.org/
|
58
|
+
[Ruby-Core-Binding-source_location]: https://ruby-doc.org/core/Binding.html#method-i-source_location "‘Binding#source_location’ method in the Ruby Core Library"
|
59
|
+
[Ruby-Core-Module-autoload]: https://ruby-doc.org/core/Module.html#method-i-autoload-3F "‘Module#autoload’ method in the Ruby Core Library"
|
60
|
+
[Ruby-Core-Module-constants]: https://ruby-doc.org/core/Module.html#method-i-constants "‘Module#constants’ method in the Ruby Core Library"
|
61
|
+
[Ruby-Stdlib-Pathname]: https://ruby-doc.org/stdlib/libdoc/pathname/rdoc/Pathname.html "‘Pathname’ class in the Ruby Standard Library"
|
62
|
+
[readme]: https://github.com/njonsson/autoloaded/blob/master/README.md "Autoloaded readme"
|
63
|
+
[inline-documentation]: https://www.rubydoc.info/github/njonsson/autoloaded "Autoloaded inline documentation"
|
data/License.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# The MIT License
|
2
2
|
|
3
|
-
Source code for
|
3
|
+
Source code for *Autoloaded* is Copyright © 2014 [Nils Jonsson][mail] and
|
4
4
|
[contributors][contributors].
|
5
5
|
|
6
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
data/README.md
CHANGED
@@ -6,18 +6,17 @@
|
|
6
6
|
[![Code Climate quality report] ][Code-Climate-report]
|
7
7
|
[![Code Climate coverage report]][Code-Climate-report]
|
8
8
|
|
9
|
-
[![Gemnasium build status] ][Gemnasium-build-status]
|
10
9
|
[![Inch CI build status] ][Inch-CI-build-status]
|
11
10
|
[![RubyGems release] ][RubyGems-release]
|
12
11
|
|
13
|
-
If you like the [
|
14
|
-
Ruby Core library, you may have wished for
|
12
|
+
If you like the [*Module#autoload*][Ruby-Core-Module-autoload] feature of the
|
13
|
+
Ruby Core library, you may have wished for *Autoloaded*. It eliminates the
|
15
14
|
drudgery of handcrafting an `autoload` statement for each Ruby source code file
|
16
15
|
in your project. It also avoids the limitations of rigid convention-driven
|
17
16
|
facilities such as those provided by the [ActiveSupport][ActiveSupport-Autoload]
|
18
17
|
RubyGem.
|
19
18
|
|
20
|
-
|
19
|
+
*Autoloaded* assumes, but does not enforce, `CamelCase`-to-`snake_case`
|
21
20
|
correspondence between the names of constants and source files. You can combine
|
22
21
|
conventions, even putting multiple autoloaded constants in a single source file.
|
23
22
|
|
@@ -27,7 +26,7 @@ Install [the RubyGem][RubyGems-release].
|
|
27
26
|
|
28
27
|
$ gem install autoloaded
|
29
28
|
|
30
|
-
Use
|
29
|
+
Use *Autoloaded* in your RubyGem project by making it a runtime dependency.
|
31
30
|
|
32
31
|
```ruby
|
33
32
|
# my_awesome_gem.gemspec
|
@@ -39,13 +38,13 @@ Gem::Specification.new do |spec|
|
|
39
38
|
end
|
40
39
|
```
|
41
40
|
|
42
|
-
Or you may want to make
|
41
|
+
Or you may want to make *Autoloaded* a dependency of your project by using
|
43
42
|
[Bundler][Bundler].
|
44
43
|
|
45
44
|
```ruby
|
46
45
|
# Gemfile
|
47
46
|
|
48
|
-
source '
|
47
|
+
source 'https://rubygems.org'
|
49
48
|
|
50
49
|
gem 'autoloaded', '~> 1'
|
51
50
|
```
|
@@ -66,15 +65,15 @@ Suppose you have the following source files.
|
|
66
65
|
│ └─ version.rb
|
67
66
|
└─ my_awesome_gem.rb
|
68
67
|
|
69
|
-
### The
|
68
|
+
### The *Autoloaded.module* or *Autoloaded.class* method
|
70
69
|
|
71
|
-
The
|
72
|
-
[
|
70
|
+
The *Autoloaded.module* and *Autoloaded.class* method calls below invoke
|
71
|
+
[*Module#autoload*][Ruby-Core-Module-autoload] for each source file in the
|
73
72
|
calling module’s corresponding directory. Note that these methods must receive a
|
74
73
|
block, even if it’s an empty block.
|
75
74
|
|
76
75
|
The file paths used are abbreviated, if possible, using a directory of the Ruby
|
77
|
-
load path (`$:`). They are also rendered without their
|
76
|
+
load path (`$:`). They are also rendered without their *.rb* extension.
|
78
77
|
|
79
78
|
```ruby
|
80
79
|
# lib/my_awesome_gem.rb
|
@@ -152,7 +151,7 @@ MyAwesomeGem::DB::Mysql # Raises NameError because
|
|
152
151
|
|
153
152
|
### The `with` specification
|
154
153
|
|
155
|
-
|
154
|
+
*Autoloaded* needs hints from you concerning unpredictable spellings,
|
156
155
|
stylization, and organization of constant names and/or source file names. You can
|
157
156
|
specify `with` as:
|
158
157
|
|
@@ -173,21 +172,21 @@ You can specify `with` multiple times, and its effects are cumulative.
|
|
173
172
|
# lib/my_awesome_gem.rb
|
174
173
|
module MyAwesomeGem
|
175
174
|
|
176
|
-
Autoloaded.module do |
|
177
|
-
|
175
|
+
Autoloaded.module do |autoloading|
|
176
|
+
autoloading.with :DB, :VERSION
|
178
177
|
# Or:
|
179
|
-
#
|
180
|
-
#
|
178
|
+
# autoloading.with :DB
|
179
|
+
# autoloading.with :VERSION
|
181
180
|
# Or:
|
182
|
-
#
|
181
|
+
# autoloading.with DB: 'db', VERSION: 'version'
|
183
182
|
# Or:
|
184
|
-
#
|
185
|
-
#
|
183
|
+
# autoloading.with DB: 'db'
|
184
|
+
# autoloading.with VERSION: 'version'
|
186
185
|
# Or:
|
187
|
-
#
|
186
|
+
# autoloading.with 'db' => :DB, 'version' => :VERSION
|
188
187
|
# Or:
|
189
|
-
#
|
190
|
-
#
|
188
|
+
# autoloading.with 'db' => :DB
|
189
|
+
# autoloading.with 'version' => :VERSION
|
191
190
|
end
|
192
191
|
|
193
192
|
# The above is the equivalent of:
|
@@ -202,20 +201,20 @@ module MyAwesomeGem
|
|
202
201
|
|
203
202
|
class DB
|
204
203
|
|
205
|
-
Autoloaded.class do |
|
206
|
-
|
204
|
+
Autoloaded.class do |autoloading|
|
205
|
+
autoloading.with :MySQL, :PostgreSQL, [:Access, :SQLServer] => 'MicroSoft'
|
207
206
|
# Or:
|
208
|
-
#
|
209
|
-
#
|
210
|
-
#
|
211
|
-
#
|
207
|
+
# autoloading.with :MySQL,
|
208
|
+
# :PostgreSQL,
|
209
|
+
# Access: 'MicroSoft',
|
210
|
+
# SQLServer: 'MicroSoft'
|
212
211
|
# Or:
|
213
|
-
#
|
212
|
+
# autoloading.with :MySQL, :PostgreSQL, 'MicroSoft' => [:Access, :SQLServer]
|
214
213
|
# Or:
|
215
|
-
#
|
216
|
-
#
|
217
|
-
#
|
218
|
-
#
|
214
|
+
# autoloading.with :MySQL,
|
215
|
+
# :PostgreSQL,
|
216
|
+
# 'MicroSoft' => :Access,
|
217
|
+
# 'MicroSoft' => :SQLServer
|
219
218
|
# Or ...
|
220
219
|
end
|
221
220
|
|
@@ -283,12 +282,12 @@ module MyAwesomeGem
|
|
283
282
|
|
284
283
|
class DB
|
285
284
|
|
286
|
-
Autoloaded.class do |
|
287
|
-
|
285
|
+
Autoloaded.class do |autoloading|
|
286
|
+
autoloading.with :MySQL, :PostgreSQL, [:Access, :SQLServer] => 'MicroSoft'
|
288
287
|
|
289
|
-
|
288
|
+
autoloading.except 'SELF-DESTRUCT!'
|
290
289
|
# Or:
|
291
|
-
#
|
290
|
+
# autoloading.except :SELF_DESTRUCT_
|
292
291
|
# Or ...
|
293
292
|
end
|
294
293
|
|
@@ -340,9 +339,9 @@ cumulative.
|
|
340
339
|
|
341
340
|
### The `from` specification
|
342
341
|
|
343
|
-
It’s recommended that you call
|
342
|
+
It’s recommended that you call *Autoloaded.module* or *Autoloaded.class* from
|
344
343
|
within the source file where your module or class is defined. This practice
|
345
|
-
allows
|
344
|
+
allows *Autoloaded* to assume that the source files to be autoloaded are in a
|
346
345
|
directory of the same name (and in the same location) as the module’s defining
|
347
346
|
source file.
|
348
347
|
|
@@ -357,12 +356,12 @@ which source files should be autoloaded.
|
|
357
356
|
|
358
357
|
module MyAwesomeGem
|
359
358
|
|
360
|
-
Autoloaded.module do |
|
359
|
+
Autoloaded.module do |autoloading|
|
361
360
|
# The following code is not actually very useful since the installed location
|
362
361
|
# of a RubyGem varies with the operating system and user preferences. How to
|
363
362
|
# compute the path properly is outside the scope of this readme and is left
|
364
363
|
# as an exercise for the reader.
|
365
|
-
|
364
|
+
autoloading.from '/absolute/path/to/my_awesome_gem'
|
366
365
|
end
|
367
366
|
|
368
367
|
end
|
@@ -371,18 +370,18 @@ end
|
|
371
370
|
A path provided to `from` cannot be relative; it must start with the filesystem
|
372
371
|
root.
|
373
372
|
|
374
|
-
If you specify `from` multiple times in an
|
373
|
+
If you specify `from` multiple times in an *Autoloaded* block, only the last one
|
375
374
|
takes effect.
|
376
375
|
|
377
|
-
### The
|
376
|
+
### The *Autoloaded.warn* method
|
378
377
|
|
379
|
-
There are two circumstances under which
|
378
|
+
There are two circumstances under which *Autoloaded* by default will write
|
380
379
|
warnings to stderr:
|
381
380
|
|
382
381
|
* Overriding an established autoload
|
383
382
|
* Establishing an autoload for a defined constant
|
384
383
|
|
385
|
-
You can silence these warnings by passing `false` to
|
384
|
+
You can silence these warnings by passing `false` to *Autoloaded.warn*. (Passing
|
386
385
|
`true` turns warnings on if they are off.)
|
387
386
|
|
388
387
|
```ruby
|
@@ -438,7 +437,7 @@ end
|
|
438
437
|
|
439
438
|
### How to debug autoloading
|
440
439
|
|
441
|
-
The
|
440
|
+
The *Autoloaded.module* or *Autoloaded.class* method returns an ordered list of
|
442
441
|
arguments it has passed to `autoload`.
|
443
442
|
|
444
443
|
```ruby
|
@@ -448,9 +447,9 @@ module MyAwesomeGem
|
|
448
447
|
|
449
448
|
class DB
|
450
449
|
|
451
|
-
results = Autoloaded.class do |
|
452
|
-
|
453
|
-
|
450
|
+
results = Autoloaded.class do |autoloading|
|
451
|
+
autoloading.with :MySQL, :PostgreSQL, [:Access, :SQLServer] => 'MicroSoft'
|
452
|
+
autoloading.except 'SELF-DESTRUCT!'
|
454
453
|
end
|
455
454
|
STDOUT.puts results.inspect # See output below.
|
456
455
|
|
@@ -465,20 +464,20 @@ end
|
|
465
464
|
# [:PostgreSQL, 'my_awesome_gem/db/postgre_sql']]
|
466
465
|
```
|
467
466
|
|
468
|
-
You can also hook [
|
469
|
-
[
|
467
|
+
You can also hook [*Module#autoload*][Ruby-Core-Module-autoload] and
|
468
|
+
[*Kernel#autoload*][Ruby-Core-Kernel-autoload] via monkeypatching or other means
|
470
469
|
in order to see what’s happening.
|
471
470
|
|
472
471
|
### Source filenames are relative to the `from` specification
|
473
472
|
|
474
473
|
You may have noticed that source filenames in the above examples are not
|
475
|
-
absolute. They are relative to the
|
474
|
+
absolute. They are relative to the *Autoloaded* block’s `from` specification
|
476
475
|
(which I recommend that you allow to be computed for you —
|
477
476
|
[see above](#the-from-specification)).
|
478
477
|
|
479
478
|
### Recursive autoloading not supported
|
480
479
|
|
481
|
-
|
480
|
+
*Autoloaded* does not perform deep autoloading of nested namespaces and
|
482
481
|
directories. This is by design.
|
483
482
|
|
484
483
|
## Contributing
|
@@ -489,6 +488,19 @@ directories. This is by design.
|
|
489
488
|
4. Push to the branch: `git push origin my-new-feature`.
|
490
489
|
5. [Create][compare-Autoloaded-branches] a new pull request.
|
491
490
|
|
491
|
+
Development
|
492
|
+
-----------
|
493
|
+
|
494
|
+
After cloning the repository, `bin/setup` to install dependencies. Then `rake` to
|
495
|
+
run the tests. You can also `bin/console` to get an interactive prompt that will
|
496
|
+
allow you to experiment.
|
497
|
+
|
498
|
+
To install this gem onto your local machine, `bundle exec rake install`. To
|
499
|
+
release a new version, update the version number in *lib/autoloaded/version.rb*,
|
500
|
+
and then `bundle exec rake release`, which will create a Git tag for the version,
|
501
|
+
push Git commits and tags, and push the *.gem* file to
|
502
|
+
[RubyGems.org](RubyGems-release).
|
503
|
+
|
492
504
|
## License
|
493
505
|
|
494
506
|
Released under the [MIT License][MIT-License].
|
@@ -497,20 +509,18 @@ Released under the [MIT License][MIT-License].
|
|
497
509
|
[Travis CI build status]: https://secure.travis-ci.org/njonsson/autoloaded.svg?branch=v1.x
|
498
510
|
[Code Climate quality report]: https://codeclimate.com/github/njonsson/autoloaded/badges/gpa.svg
|
499
511
|
[Code Climate coverage report]: https://codeclimate.com/github/njonsson/autoloaded/badges/coverage.svg
|
500
|
-
[
|
501
|
-
[Inch CI build status]: http://inch-ci.org/github/njonsson/autoloaded.svg?branch=v1.x
|
512
|
+
[Inch CI build status]: https://www.inch-ci.org/github/njonsson/autoloaded.svg?branch=v1.x
|
502
513
|
[RubyGems release]: https://badge.fury.io/rb/autoloaded.svg
|
503
514
|
|
504
|
-
[spider-gear-image]: https://www.flickr.com/photos/dongkwan/4941065976
|
505
|
-
[Travis-CI-build-status]:
|
506
|
-
[Code-Climate-report]:
|
507
|
-
[
|
508
|
-
[
|
509
|
-
[
|
510
|
-
[
|
511
|
-
[
|
512
|
-
[
|
513
|
-
[
|
514
|
-
[
|
515
|
-
[
|
516
|
-
[MIT-License]: http://github.com/njonsson/autoloaded/blob/master/License.md "MIT License claim for Autoloaded"
|
515
|
+
[spider-gear-image]: https://www.flickr.com/photos/dongkwan/4941065976 "spider gear image by Ernesto Andrade"
|
516
|
+
[Travis-CI-build-status]: https://www.travis-ci.org/njonsson/autoloaded "Travis CI build status for Autoloaded"
|
517
|
+
[Code-Climate-report]: https://codeclimate.com/github/njonsson/autoloaded "Code Climate report for Autoloaded"
|
518
|
+
[Inch-CI-build-status]: https://www.inch-ci.org/github/njonsson/autoloaded "Inch CI build status for Autoloaded"
|
519
|
+
[RubyGems-release]: https://rubygems.org/gems/autoloaded "RubyGems release of Autoloaded"
|
520
|
+
[Ruby-Core-Module-autoload]: https://ruby-doc.org/core/Module.html#method-i-autoload "‘Module#autoload’ method in the Ruby Core Library"
|
521
|
+
[ActiveSupport-Autoload]: https://api.rubyonrails.org/classes/ActiveSupport/Autoload.html "‘ActiveSupport::Autoload’ module in the Rails API"
|
522
|
+
[Bundler]: https://bundler.io/
|
523
|
+
[Ruby-Core-Kernel-autoload]: https://ruby-doc.org/core/Kernel.html#method-i-autoload "‘Kernel#autoload’ method in the Ruby Core Library"
|
524
|
+
[fork-Autoloaded]: https://github.com/njonsson/autoloaded/fork "Fork the official repository of Autoloaded"
|
525
|
+
[compare-Autoloaded-branches]: https://github.com/njonsson/autoloaded/compare "Compare branches of Autoloaded repositories"
|
526
|
+
[MIT-License]: https://github.com/njonsson/autoloaded/blob/master/License.md "MIT License claim for Autoloaded"
|
data/Rakefile
CHANGED
data/autoloaded.gemspec
CHANGED
@@ -1,46 +1,50 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
2
|
lib = File.expand_path('../lib', __FILE__)
|
4
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
|
6
|
-
require 'autoloaded'
|
4
|
+
require 'autoloaded/version'
|
7
5
|
|
8
6
|
Gem::Specification.new do |spec|
|
9
|
-
spec.name
|
10
|
-
spec.version
|
11
|
-
spec.authors
|
12
|
-
spec.email
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
spec.homepage
|
34
|
-
spec.license
|
7
|
+
spec.name = 'autoloaded'
|
8
|
+
spec.version = Autoloaded::VERSION
|
9
|
+
spec.authors = ['Nils Jonsson']
|
10
|
+
spec.email = ['autoloaded@nilsjonsson.com']
|
11
|
+
|
12
|
+
spec.summary = <<-end_summary.chomp.gsub(/^\s+/, '').gsub("\n", ' ')
|
13
|
+
Eliminates the drudgery of handcrafting a Ruby Core
|
14
|
+
library `autoload` statement for each Ruby source code
|
15
|
+
file in your project. It also avoids the limitations of
|
16
|
+
rigid convention-driven facilities such as those provided
|
17
|
+
by the ActiveSupport RubyGem.
|
18
|
+
end_summary
|
19
|
+
spec.description = <<-end_description.chomp.gsub(/^\s+/, '').gsub("\n", ' ')
|
20
|
+
If you like the ‘Module#autoload’ feature of the Ruby Core
|
21
|
+
library, you may have wished for Autoloaded. It eliminates
|
22
|
+
the drudgery of handcrafting an `autoload` statement for
|
23
|
+
each Ruby source code file in your project. It also avoids
|
24
|
+
the limitations of rigid convention-driven facilities such
|
25
|
+
as those provided by the ActiveSupport RubyGem. Autoloaded
|
26
|
+
assumes, but does not enforce, `CamelCase`-to-`snake_case`
|
27
|
+
correspondence between the names of constants and source
|
28
|
+
files. You can combine conventions, even putting multiple
|
29
|
+
autoloaded constants in a single source file.
|
30
|
+
end_description
|
31
|
+
spec.homepage = 'https://njonsson.github.io/autoloaded'
|
32
|
+
spec.license = 'MIT'
|
35
33
|
|
36
|
-
spec.
|
37
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename f }
|
38
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
39
|
-
spec.require_paths = ['lib']
|
34
|
+
spec.required_ruby_version = '>= 2', '< 4'
|
40
35
|
|
41
|
-
spec.
|
36
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0'
|
37
|
+
if RUBY_VERSION < '2.2'
|
38
|
+
spec.add_development_dependency 'rake', '~> 12'
|
39
|
+
else
|
40
|
+
spec.add_development_dependency 'rake', '~> 13'
|
41
|
+
end
|
42
|
+
spec.add_development_dependency 'rspec', '~> 3.3'
|
42
43
|
|
43
|
-
spec.
|
44
|
-
|
45
|
-
|
44
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
45
|
+
f.match(%r{^(test|spec|features)/})
|
46
|
+
end
|
47
|
+
spec.bindir = 'exe'
|
48
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename f }
|
49
|
+
spec.require_paths = %w(lib)
|
46
50
|
end
|