autoloaded 1.7.0 → 2.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 +8 -4
- data/.rspec +1 -1
- data/.travis.yml +1 -15
- data/Gemfile +10 -11
- data/Guardfile +22 -21
- data/History.md +16 -40
- data/License.md +1 -1
- data/README.md +69 -79
- data/Rakefile +0 -4
- data/autoloaded.gemspec +37 -41
- data/lib/autoloaded/autoloader.rb +8 -31
- data/lib/autoloaded/deprecation.rb +20 -11
- data/lib/autoloaded/inflection.rb +9 -7
- data/lib/autoloaded/load_pathed_directory.rb +4 -2
- data/lib/autoloaded/specification.rb +0 -2
- data/lib/autoloaded/specifications.rb +10 -16
- data/lib/autoloaded/version.rb +1 -1
- data/lib/autoloaded/warning.rb +44 -26
- data/lib/autoloaded.rb +0 -40
- data/lib/tasks/lib_each.rake +3 -15
- data/lib/tasks/spec.rake +6 -3
- data/spec/autoloaded/autoloader_spec.rb +469 -0
- data/spec/autoloaded/inflection_spec.rb +30 -0
- data/spec/autoloaded/load_pathed_directory_spec.rb +120 -0
- data/spec/autoloaded/specification_spec.rb +98 -0
- data/spec/autoloaded/specifications_spec.rb +191 -0
- data/spec/autoloaded/version_spec.rb +3 -0
- data/spec/autoloaded/warning_spec.rb +115 -0
- data/spec/autoloaded_macro_sharedspec.rb +24 -0
- data/spec/autoloaded_spec.rb +173 -0
- data/spec/fixtures/autoloaded_with_conventional_filename/N-est-ed.rb +1 -0
- data/spec/fixtures/autoloaded_with_conventional_filename/nest_ed.rb +1 -0
- data/spec/fixtures/autoloaded_with_conventional_filename/nested/doubly_nested.rb +9 -0
- data/spec/fixtures/autoloaded_with_conventional_filename/nested.rb +16 -0
- data/spec/fixtures/autoloaded_with_conventional_filename/old_school_autoload.rb +5 -0
- data/spec/fixtures/autoloaded_with_conventional_filename.rb +12 -0
- data/spec/fixtures/autoloaded_with_unconventional_filename/N-est-ed.rb +7 -0
- data/spec/fixtures/autoloaded_with_unconventional_filename/nest_ed.rb +1 -0
- data/spec/fixtures/autoloaded_with_unconventional_filename/old_school_autoload.rb +5 -0
- data/spec/fixtures/autoloaded_with_unconventional_filename.rb +12 -0
- 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 +1 -0
- data/spec/fixtures/not_autoloaded/old_school_autoload.rb +5 -0
- data/spec/fixtures/not_autoloaded.rb +5 -0
- data/spec/matchers.rb +85 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/support/util.rb +42 -0
- data/spec/support/without_side_effects.rb +37 -0
- metadata +86 -25
- data/bin/console +0 -10
- data/bin/setup +0 -8
- data/lib/autoloaded/compatibility/refine_and_using.rb +0 -19
- data/lib/autoloaded/constant.rb +0 -94
- data/lib/autoloaded/refine/string/to_source_filename.rb +0 -58
- data/lib/autoloaded/refine/string.rb +0 -20
- data/lib/autoloaded/refine.rb +0 -16
data/autoloaded.gemspec
CHANGED
@@ -1,50 +1,46 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'autoloaded/version'
|
5
5
|
|
6
|
-
|
7
|
-
spec.name = 'autoloaded'
|
8
|
-
spec.version = Autoloaded::VERSION
|
9
|
-
spec.authors = ['Nils Jonsson']
|
10
|
-
spec.email = ['autoloaded@nilsjonsson.com']
|
6
|
+
require 'autoloaded'
|
11
7
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = 'autoloaded'
|
10
|
+
spec.version = Autoloaded::VERSION
|
11
|
+
spec.authors = ['Nils Jonsson']
|
12
|
+
spec.email = ['autoloaded@nilsjonsson.com']
|
13
|
+
spec.summary = <<-end_summary.chomp.gsub(/^\s+/, '').gsub("\n", ' ')
|
14
|
+
Eliminates the drudgery of handcrafting a Ruby Core
|
15
|
+
library `autoload` statement for each Ruby source code
|
16
|
+
file in your project. It also avoids the limitations of
|
17
|
+
rigid convention-driven facilities such as those
|
18
|
+
provided by the ActiveSupport RubyGem.
|
19
|
+
end_summary
|
20
|
+
spec.description = <<-end_description.chomp.gsub(/^\s+/, '').gsub("\n", ' ')
|
21
|
+
If you like the ‘Module#autoload’ feature of the Ruby
|
22
|
+
Core library, you may have wished for Autoloaded. It
|
23
|
+
eliminates the drudgery of handcrafting an `autoload`
|
24
|
+
statement for each Ruby source code file in your
|
25
|
+
project. It also avoids the limitations of rigid
|
26
|
+
convention-driven facilities such as those provided by
|
27
|
+
the ActiveSupport RubyGem. Autoloaded assumes, but does
|
28
|
+
not enforce, `CamelCase`-to-`snake_case` correspondence
|
29
|
+
between the names of constants and source files. You can
|
30
|
+
combine conventions, even putting multiple autoloaded
|
31
|
+
constants in a single source file.
|
32
|
+
end_description
|
33
|
+
spec.homepage = 'http://njonsson.github.io/autoloaded'
|
34
|
+
spec.license = 'MIT'
|
33
35
|
|
34
|
-
spec.
|
36
|
+
spec.files = `git ls-files -z`.split("\x0")
|
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']
|
35
40
|
|
36
|
-
spec.
|
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'
|
41
|
+
spec.required_ruby_version = '>= 1.9', '< 3'
|
43
42
|
|
44
|
-
spec.
|
45
|
-
|
46
|
-
|
47
|
-
spec.bindir = 'exe'
|
48
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename f }
|
49
|
-
spec.require_paths = %w(lib)
|
43
|
+
spec.add_development_dependency 'bundler', '~> 1'
|
44
|
+
spec.add_development_dependency 'rake', '~> 10'
|
45
|
+
spec.add_development_dependency 'rspec', '~> 3'
|
50
46
|
end
|
@@ -1,9 +1,3 @@
|
|
1
|
-
require 'autoloaded/inflection'
|
2
|
-
require 'autoloaded/load_pathed_directory'
|
3
|
-
require 'autoloaded/specification'
|
4
|
-
require 'autoloaded/specifications'
|
5
|
-
require 'autoloaded/warning'
|
6
|
-
|
7
1
|
module Autoloaded
|
8
2
|
|
9
3
|
# Autoloads files in a source directory.
|
@@ -13,7 +7,7 @@ module Autoloaded
|
|
13
7
|
|
14
8
|
# The source code context in which autoloading is to occur.
|
15
9
|
#
|
16
|
-
# @return [Binding]
|
10
|
+
# @return [Binding] the source code context in which autoloading is to occur.
|
17
11
|
#
|
18
12
|
# @see #autoload!
|
19
13
|
#
|
@@ -41,8 +35,8 @@ module Autoloaded
|
|
41
35
|
# @return [Array of Array] the arguments passed to each +autoload+ statement
|
42
36
|
# made
|
43
37
|
#
|
44
|
-
# @see
|
45
|
-
# @see
|
38
|
+
# @see http://ruby-doc.org/core/Module.html#method-i-autoload Module#autoload
|
39
|
+
# @see http://ruby-doc.org/core/Kernel.html#method-i-autoload Kernel#autoload
|
46
40
|
# @see #from
|
47
41
|
# @see #except
|
48
42
|
# @see #only
|
@@ -85,11 +79,6 @@ module Autoloaded
|
|
85
79
|
constant_names.each do |const|
|
86
80
|
next unless existing_constant?(const)
|
87
81
|
|
88
|
-
# Don't warn about an existing MyAwesomeGem::VERSION constant since
|
89
|
-
# probably it was loaded by a `require 'my_awesome_gem/version'`
|
90
|
-
# statement in 'my_awesome_gem.gemspec'.
|
91
|
-
next if (const == :VERSION)
|
92
|
-
|
93
82
|
Warning.existing_constant constant_name: constant_full_name(const),
|
94
83
|
source_filename: source_filename,
|
95
84
|
host_source_location: host_source_location
|
@@ -177,7 +166,7 @@ module Autoloaded
|
|
177
166
|
#
|
178
167
|
# @see #autoload!
|
179
168
|
# @see #from
|
180
|
-
|
169
|
+
[:except, :only, :with].each do |attr|
|
181
170
|
define_method attr do |*arguments|
|
182
171
|
attr_specs = specifications.send(attr)
|
183
172
|
if arguments.empty?
|
@@ -213,10 +202,7 @@ module Autoloaded
|
|
213
202
|
# @see #autoload!
|
214
203
|
# @see #host_binding
|
215
204
|
def from(value=nil)
|
216
|
-
if value.nil?
|
217
|
-
return (instance_variable_defined?(:@from) && @from && @from.path) ||
|
218
|
-
default_from
|
219
|
-
end
|
205
|
+
return((@from && @from.path) || default_from) if value.nil?
|
220
206
|
|
221
207
|
# Validate value.
|
222
208
|
@from = LoadPathedDirectory.new(value)
|
@@ -252,8 +238,7 @@ module Autoloaded
|
|
252
238
|
end
|
253
239
|
|
254
240
|
def from_load_pathed_directory
|
255
|
-
|
256
|
-
LoadPathedDirectory.new(default_from)
|
241
|
+
@from || LoadPathedDirectory.new(default_from)
|
257
242
|
end
|
258
243
|
|
259
244
|
def host_eval(statement)
|
@@ -263,19 +248,11 @@ module Autoloaded
|
|
263
248
|
end
|
264
249
|
|
265
250
|
def host_source_filename
|
266
|
-
|
267
|
-
host_eval "::File.expand_path '#{host_binding.source_location.first}'"
|
268
|
-
else
|
269
|
-
host_eval '::File.expand_path __FILE__'
|
270
|
-
end
|
251
|
+
host_eval '::File.expand_path __FILE__'
|
271
252
|
end
|
272
253
|
|
273
254
|
def host_source_location
|
274
|
-
|
275
|
-
host_binding.source_location
|
276
|
-
else
|
277
|
-
host_eval('[__FILE__, __LINE__]')
|
278
|
-
end.collect(&:to_s).join ':'
|
255
|
+
host_eval('[__FILE__, __LINE__]').collect(&:to_s).join ':'
|
279
256
|
end
|
280
257
|
|
281
258
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
module Autoloaded; end
|
2
|
+
|
1
3
|
# Prints deprecation messages to _stderr_.
|
2
4
|
#
|
3
5
|
# @since 1.3
|
@@ -22,21 +24,28 @@ module Autoloaded::Deprecation
|
|
22
24
|
# Prints a deprecation message to _#io_ regarding the specified
|
23
25
|
# _deprecated_usage_.
|
24
26
|
#
|
25
|
-
# @param [
|
26
|
-
# @
|
27
|
-
#
|
28
|
-
# @
|
29
|
-
#
|
27
|
+
# @param [Hash] keywords the parameters of the deprecation message
|
28
|
+
# @option keywords [String] :deprecated_usage API usage that is soon to be
|
29
|
+
# discontinued
|
30
|
+
# @option keywords [String] :sanctioned_usage API usage that will succeed
|
31
|
+
# _:deprecated_usage_
|
32
|
+
# @option keywords [String] :source_filename the file path of the source
|
33
|
+
# invoking the deprecated API
|
30
34
|
#
|
31
35
|
# @return [Module] _Deprecation_
|
32
36
|
#
|
33
37
|
# @raise [ArgumentError] one or more keywords are missing
|
34
|
-
def deprecate(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
def deprecate(keywords)
|
39
|
+
deprecated_usage = keywords.fetch :deprecated_usage do
|
40
|
+
raise ::ArgumentError, 'missing keyword: deprecated_usage'
|
41
|
+
end
|
42
|
+
sanctioned_usage = keywords.fetch :sanctioned_usage do
|
43
|
+
raise ::ArgumentError, 'missing keyword: sanctioned_usage'
|
44
|
+
end
|
45
|
+
source_filename = keywords.fetch :source_filename do
|
46
|
+
raise ::ArgumentError, 'missing keyword: source_filename'
|
47
|
+
end
|
48
|
+
|
40
49
|
deprecation = "\e[33m*** \e[7m DEPRECATED \e[0m " +
|
41
50
|
"\e[4m#{deprecated_usage}\e[0m -- use " +
|
42
51
|
"\e[4m#{sanctioned_usage}\e[0m instead in #{source_filename}"
|
@@ -1,6 +1,8 @@
|
|
1
|
+
module Autoloaded; end
|
2
|
+
|
1
3
|
# Translates source filenames into constants.
|
2
|
-
#
|
3
|
-
# @since 1.3
|
4
|
+
#
|
5
|
+
# @since 1.3
|
4
6
|
#
|
5
7
|
# @api private
|
6
8
|
module Autoloaded::Inflection
|
@@ -19,11 +21,11 @@ module Autoloaded::Inflection
|
|
19
21
|
source_filename = source_filename.to_s
|
20
22
|
raise(::ArgumentError, "can't be blank") if source_filename.empty?
|
21
23
|
|
22
|
-
translate(source_filename,
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
translate(source_filename, *[:file_basename,
|
25
|
+
:camelize_if_lowercase,
|
26
|
+
:nonalphanumeric_to_underscore,
|
27
|
+
:delete_leading_nonalphabetic,
|
28
|
+
:capitalize_first]).to_sym
|
27
29
|
end
|
28
30
|
|
29
31
|
private
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
|
3
|
+
module Autoloaded; end
|
4
|
+
|
3
5
|
# Enumerates the source files in a directory, relativizing their paths using the
|
4
6
|
# Ruby load path.
|
5
7
|
#
|
@@ -61,7 +63,7 @@ public
|
|
61
63
|
# @return [LoadPathedDirectory] the _LoadPathedDirectory_
|
62
64
|
#
|
63
65
|
# @see #path
|
64
|
-
# @see
|
66
|
+
# @see http://ruby-doc.org/core/Kernel.html#method-i-require Kernel#require
|
65
67
|
def each_source_filename
|
66
68
|
if (ruby_load_path = closest_ruby_load_path)
|
67
69
|
::Dir.chdir ruby_load_path do
|
@@ -95,7 +97,7 @@ private
|
|
95
97
|
# Don't use Pathname#relative_path_from because we want to avoid introducing
|
96
98
|
# double dots. The intent is to render the path as relative, if and only if
|
97
99
|
# it is a subdirectory of 'other_path'.
|
98
|
-
pattern = /^#{::Regexp.escape other_path.
|
100
|
+
pattern = /^#{::Regexp.escape other_path.chomp(::File::SEPARATOR)}#{::Regexp.escape ::File::SEPARATOR}?/
|
99
101
|
path.gsub pattern, ''
|
100
102
|
end
|
101
103
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
module Autoloaded; end
|
2
|
+
|
1
3
|
# Holds regulations for autoloading.
|
2
4
|
#
|
3
5
|
# @since 1.3
|
@@ -6,40 +8,32 @@
|
|
6
8
|
class Autoloaded::Specifications
|
7
9
|
|
8
10
|
# @!method except
|
9
|
-
#
|
10
|
-
#
|
11
|
-
# @return [Array of Specification]
|
11
|
+
# Specifications for excluding source files from being autoloaded.
|
12
12
|
#
|
13
|
-
# @
|
13
|
+
# @return [Array of Specification] a list of specifications
|
14
14
|
#
|
15
15
|
# @api private
|
16
16
|
#
|
17
17
|
# @!method only
|
18
|
-
#
|
18
|
+
# Specifications for narrowing the set of source files being autoloaded as
|
19
19
|
# well as optionally renaming and/or reorganizing their corresponding
|
20
20
|
# constants.
|
21
21
|
#
|
22
|
-
# @return [Array of Specification]
|
23
|
-
#
|
24
|
-
# @see Specification
|
22
|
+
# @return [Array of Specification] a list of specifications
|
25
23
|
#
|
26
24
|
# @api private
|
27
25
|
#
|
28
26
|
# @!method with
|
29
|
-
#
|
27
|
+
# Specifications for renaming and/or reorganizing the constants corresponding
|
30
28
|
# to source files being autoloaded.
|
31
29
|
#
|
32
|
-
# @return [Array of Specification]
|
33
|
-
#
|
34
|
-
# @see Specification
|
30
|
+
# @return [Array of Specification] a list of specifications
|
35
31
|
#
|
36
32
|
# @api private
|
37
|
-
|
33
|
+
[:except, :only, :with].each do |attribute_name|
|
38
34
|
define_method attribute_name do
|
39
35
|
variable_name = "@#{attribute_name}"
|
40
|
-
((
|
41
|
-
instance_variable_get(variable_name)) ||
|
42
|
-
[]).tap do |value|
|
36
|
+
(instance_variable_get(variable_name) || []).tap do |value|
|
43
37
|
instance_variable_set variable_name, value
|
44
38
|
end
|
45
39
|
end
|
data/lib/autoloaded/version.rb
CHANGED
data/lib/autoloaded/warning.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
module Autoloaded; end
|
2
|
+
|
1
3
|
# Prints warning messages to _stderr_.
|
2
4
|
#
|
3
5
|
# @since 1.3
|
@@ -22,25 +24,33 @@ module Autoloaded::Warning
|
|
22
24
|
# Prints a warning message to _#io_ concerning an existing autoloaded
|
23
25
|
# constant for which the autoloaded source file is being changed.
|
24
26
|
#
|
25
|
-
# @param [
|
26
|
-
# @
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
27
|
+
# @param [Hash] keywords the parameters of the warning message
|
28
|
+
# @option keywords [Symbol] :constant_name the name of the constant
|
29
|
+
# @option keywords [String] :old_source_filename the name of the existing
|
30
|
+
# autoloaded source file
|
31
|
+
# @option keywords [String] :new_source_filename the name of the new
|
32
|
+
# autoloaded source file
|
33
|
+
# @option keywords [String] :host_source_location the file and line number of
|
34
|
+
# the source establishing
|
35
|
+
# autoloading
|
32
36
|
#
|
33
37
|
# @return [Module] _Warning_
|
34
38
|
#
|
35
39
|
# @raise [ArgumentError] one or more keywords are missing
|
36
|
-
def changing_autoload(
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
def changing_autoload(keywords)
|
41
|
+
constant_name = keywords.fetch :constant_name do
|
42
|
+
raise ::ArgumentError, 'missing keyword: constant_name'
|
43
|
+
end
|
44
|
+
old_source_filename = keywords.fetch :old_source_filename do
|
45
|
+
raise ::ArgumentError, 'missing keyword: old_source_filename'
|
46
|
+
end
|
47
|
+
new_source_filename = keywords.fetch :new_source_filename do
|
48
|
+
raise ::ArgumentError, 'missing keyword: new_source_filename'
|
49
|
+
end
|
50
|
+
host_source_location = keywords.fetch :host_source_location do
|
51
|
+
raise ::ArgumentError, 'missing keyword: host_source_location'
|
52
|
+
end
|
53
|
+
|
44
54
|
message = "Existing autoload of \e[4m#{constant_name}\e[0m from " +
|
45
55
|
"#{old_source_filename.inspect} is being overridden to " +
|
46
56
|
"autoload from #{new_source_filename.inspect} -- avoid this " +
|
@@ -62,7 +72,7 @@ module Autoloaded::Warning
|
|
62
72
|
#
|
63
73
|
# @see .enabled?
|
64
74
|
def enable(enabling)
|
65
|
-
previous_value =
|
75
|
+
previous_value = @disabled
|
66
76
|
@disabled = not!(enabling)
|
67
77
|
if block_given?
|
68
78
|
begin
|
@@ -88,20 +98,28 @@ module Autoloaded::Warning
|
|
88
98
|
# Prints a warning message to _#io_ concerning a defined constant for which
|
89
99
|
# autoloading is being established.
|
90
100
|
#
|
91
|
-
# @param [
|
92
|
-
# @
|
93
|
-
# @
|
94
|
-
#
|
101
|
+
# @param [Hash] keywords the parameters of the warning message
|
102
|
+
# @option keywords [Symbol] :constant_name the name of the constant
|
103
|
+
# @option keywords [String] :source_filename the name of the autoloaded
|
104
|
+
# source file
|
105
|
+
# @option keywords [String] :host_source_location the file and line number of
|
106
|
+
# the source establishing
|
107
|
+
# autoloading
|
95
108
|
#
|
96
109
|
# @return [Module] _Warning_
|
97
110
|
#
|
98
111
|
# @raise [ArgumentError] one or more keywords are missing
|
99
|
-
def existing_constant(
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
112
|
+
def existing_constant(keywords)
|
113
|
+
constant_name = keywords.fetch :constant_name do
|
114
|
+
raise ::ArgumentError, 'missing keyword: constant_name'
|
115
|
+
end
|
116
|
+
source_filename = keywords.fetch :source_filename do
|
117
|
+
raise ::ArgumentError, 'missing keyword: source_filename'
|
118
|
+
end
|
119
|
+
host_source_location = keywords.fetch :host_source_location do
|
120
|
+
raise ::ArgumentError, 'missing keyword: host_source_location'
|
121
|
+
end
|
122
|
+
|
105
123
|
message = "Existing definition of \e[4m#{constant_name}\e[0m obviates " +
|
106
124
|
"autoloading from #{source_filename.inspect} -- avoid this " +
|
107
125
|
"warning by using an \e[4monly\e[0m or an \e[4mexcept\e[0m " +
|
data/lib/autoloaded.rb
CHANGED
@@ -5,53 +5,13 @@
|
|
5
5
|
module Autoloaded
|
6
6
|
|
7
7
|
autoload :Autoloader, 'autoloaded/autoloader'
|
8
|
-
autoload :Constant, 'autoloaded/constant'
|
9
|
-
autoload :Deprecation, 'autoloaded/deprecation'
|
10
8
|
autoload :Inflection, 'autoloaded/inflection'
|
11
9
|
autoload :LoadPathedDirectory, 'autoloaded/load_pathed_directory'
|
12
|
-
autoload :Refine, 'autoloaded/refine'
|
13
10
|
autoload :Specification, 'autoloaded/specification'
|
14
11
|
autoload :Specifications, 'autoloaded/specifications'
|
15
12
|
autoload :VERSION, 'autoloaded/version'
|
16
13
|
autoload :Warning, 'autoloaded/warning'
|
17
14
|
|
18
|
-
def self.extended(other_module)
|
19
|
-
caller_file_path = caller_locations.first.absolute_path
|
20
|
-
Deprecation.deprecate deprecated_usage: "extend #{name}",
|
21
|
-
sanctioned_usage: "#{name}.module { }",
|
22
|
-
source_filename: caller_file_path
|
23
|
-
dir_path = "#{::File.dirname caller_file_path}/#{::File.basename caller_file_path, '.rb'}"
|
24
|
-
other_module.module_eval <<-end_module_eval, __FILE__, __LINE__
|
25
|
-
def self.autoload?(symbol)
|
26
|
-
if (old_school = super)
|
27
|
-
return old_school
|
28
|
-
end
|
29
|
-
|
30
|
-
require 'autoloaded/constant'
|
31
|
-
filenames = []
|
32
|
-
::Autoloaded::Constant.new(symbol).each_matching_filename_in #{dir_path.inspect} do |filename|
|
33
|
-
filenames << filename
|
34
|
-
end
|
35
|
-
(filenames.length <= 1) ? filenames.first : filenames
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.const_missing(symbol)
|
39
|
-
require 'autoloaded/constant'
|
40
|
-
::Autoloaded::Constant.new(symbol).each_matching_filename_in #{dir_path.inspect} do |filename|
|
41
|
-
require filename
|
42
|
-
if const_defined?(symbol)
|
43
|
-
begin
|
44
|
-
return const_get(symbol)
|
45
|
-
rescue ::NameError
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
super
|
51
|
-
end
|
52
|
-
end_module_eval
|
53
|
-
end
|
54
|
-
|
55
15
|
# @!method self.module
|
56
16
|
# Autoloads constants that match files in the source directory.
|
57
17
|
#
|
data/lib/tasks/lib_each.rake
CHANGED
@@ -1,25 +1,13 @@
|
|
1
1
|
namespace :lib do
|
2
|
-
desc "
|
3
|
-
'environment variable to "t[rue]" to display the name of each file as ' +
|
4
|
-
'it is loaded.'
|
2
|
+
desc "Load each library file individually, looking for missing 'require' statements"
|
5
3
|
task :each do
|
6
|
-
def verbose?
|
7
|
-
ENV['VERBOSE'].to_s =~ /^T/i
|
8
|
-
end
|
9
|
-
|
10
4
|
Dir.chdir 'lib' do
|
11
5
|
Dir.glob( '**/*.rb' ) do |f|
|
12
6
|
next if f == 'tasks.rb'
|
13
7
|
|
14
|
-
|
15
|
-
|
16
|
-
else
|
17
|
-
print "\e[32m.\e[0m"
|
18
|
-
end
|
19
|
-
command = "/usr/bin/env ruby -e 'require File.expand_path(#{f.inspect})'"
|
20
|
-
break unless system(command)
|
8
|
+
puts "Loading #{f} ..."
|
9
|
+
fail unless system( "/usr/bin/env bundle exec ruby -e 'require #{f.inspect}'" )
|
21
10
|
end
|
22
11
|
end
|
23
|
-
puts unless verbose?
|
24
12
|
end
|
25
13
|
end
|
data/lib/tasks/spec.rake
CHANGED
@@ -44,8 +44,7 @@ else
|
|
44
44
|
else
|
45
45
|
noun_phrase = "#{uncommitted_spec_files.length} uncommitted spec file#{(uncommitted_spec_files.length == 1) ? nil : 's'}"
|
46
46
|
desc = "Run #{noun_phrase}"
|
47
|
-
define_spec_task :uncommitted, desc:
|
48
|
-
pattern: uncommitted_spec_files
|
47
|
+
define_spec_task :uncommitted, desc: desc, pattern: uncommitted_spec_files
|
49
48
|
end
|
50
49
|
else
|
51
50
|
noun_phrase = "#{uncommitted_files_in_spec.length} uncommitted file#{uncommitted_files_in_spec.length == 1 ? nil : 's'}"
|
@@ -53,12 +52,16 @@ else
|
|
53
52
|
define_spec_task :uncommitted, desc: desc, pattern: 'spec'
|
54
53
|
end
|
55
54
|
|
56
|
-
define_spec_task :warnings, desc:
|
55
|
+
define_spec_task :warnings, desc: 'Run specs with Ruby warnings enabled',
|
57
56
|
format: :progress,
|
58
57
|
profile: false,
|
59
58
|
warnings: true
|
60
59
|
end
|
61
60
|
|
61
|
+
desc 'Run specs'
|
62
|
+
task '' => :spec
|
63
|
+
task :default => :spec
|
64
|
+
|
62
65
|
# Support the 'gem test' command.
|
63
66
|
define_spec_task :test, desc: '', backtrace: true,
|
64
67
|
debug: false,
|