autoloaded 1.7.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,
|