autoloaded 1.4.1 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +4 -8
  3. data/.rspec +1 -1
  4. data/.travis.yml +15 -0
  5. data/Gemfile +11 -10
  6. data/Guardfile +21 -22
  7. data/History.md +35 -10
  8. data/License.md +1 -1
  9. data/README.md +78 -68
  10. data/Rakefile +4 -0
  11. data/autoloaded.gemspec +41 -37
  12. data/bin/console +10 -0
  13. data/bin/setup +8 -0
  14. data/lib/autoloaded/autoloader.rb +24 -6
  15. data/lib/autoloaded/constant.rb +1 -0
  16. data/lib/autoloaded/deprecation.rb +0 -2
  17. data/lib/autoloaded/inflection.rb +0 -2
  18. data/lib/autoloaded/load_pathed_directory.rb +2 -4
  19. data/lib/autoloaded/specification.rb +2 -0
  20. data/lib/autoloaded/specifications.rb +3 -3
  21. data/lib/autoloaded/version.rb +1 -1
  22. data/lib/autoloaded/warning.rb +1 -3
  23. data/lib/tasks/lib_each.rake +15 -3
  24. data/lib/tasks/spec.rake +3 -6
  25. metadata +22 -121
  26. data/spec/autoloaded/autoloader_spec.rb +0 -469
  27. data/spec/autoloaded/constant_spec.rb +0 -53
  28. data/spec/autoloaded/deprecation_spec.rb +0 -23
  29. data/spec/autoloaded/inflection_spec.rb +0 -30
  30. data/spec/autoloaded/load_pathed_directory_spec.rb +0 -120
  31. data/spec/autoloaded/refine/string/to_source_filename_spec.rb +0 -19
  32. data/spec/autoloaded/specification_spec.rb +0 -98
  33. data/spec/autoloaded/specifications_spec.rb +0 -191
  34. data/spec/autoloaded/version_spec.rb +0 -3
  35. data/spec/autoloaded/warning_spec.rb +0 -115
  36. data/spec/autoloaded_macro_sharedspec.rb +0 -24
  37. data/spec/autoloaded_spec.rb +0 -321
  38. data/spec/fixtures/autoloaded_with_conventional_filename/N-est-ed.rb +0 -1
  39. data/spec/fixtures/autoloaded_with_conventional_filename/nest_ed.rb +0 -1
  40. data/spec/fixtures/autoloaded_with_conventional_filename/nested/doubly_nested.rb +0 -9
  41. data/spec/fixtures/autoloaded_with_conventional_filename/nested.rb +0 -16
  42. data/spec/fixtures/autoloaded_with_conventional_filename/old_school_autoload.rb +0 -5
  43. data/spec/fixtures/autoloaded_with_conventional_filename.rb +0 -12
  44. data/spec/fixtures/autoloaded_with_unconventional_filename/N-est-ed.rb +0 -7
  45. data/spec/fixtures/autoloaded_with_unconventional_filename/nest_ed.rb +0 -1
  46. data/spec/fixtures/autoloaded_with_unconventional_filename/old_school_autoload.rb +0 -5
  47. data/spec/fixtures/autoloaded_with_unconventional_filename.rb +0 -12
  48. data/spec/fixtures/filenames/AFilename.rb +0 -0
  49. data/spec/fixtures/filenames/a-file-name.rb +0 -0
  50. data/spec/fixtures/filenames/a-filename.rb +0 -0
  51. data/spec/fixtures/filenames/a_file_name.rb +0 -0
  52. data/spec/fixtures/filenames/a_filename.rb +0 -0
  53. data/spec/fixtures/filenames/afile-name.rb +0 -0
  54. data/spec/fixtures/filenames/afile_name.rb +0 -0
  55. data/spec/fixtures/not_autoloaded/nested.rb +0 -1
  56. data/spec/fixtures/not_autoloaded/old_school_autoload.rb +0 -5
  57. data/spec/fixtures/not_autoloaded.rb +0 -5
  58. data/spec/fixtures/old_api/autoloaded_with_conventional_filename/N-est-ed.rb +0 -1
  59. data/spec/fixtures/old_api/autoloaded_with_conventional_filename/nest_ed.rb +0 -1
  60. data/spec/fixtures/old_api/autoloaded_with_conventional_filename/nested.rb +0 -5
  61. data/spec/fixtures/old_api/autoloaded_with_conventional_filename/old_school_autoload.rb +0 -5
  62. data/spec/fixtures/old_api/autoloaded_with_conventional_filename.rb +0 -10
  63. data/spec/fixtures/old_api/autoloaded_with_conventional_filename_only/nested.rb +0 -5
  64. data/spec/fixtures/old_api/autoloaded_with_conventional_filename_only/old_school_autoload.rb +0 -5
  65. data/spec/fixtures/old_api/autoloaded_with_conventional_filename_only.rb +0 -10
  66. data/spec/fixtures/old_api/autoloaded_with_unconventional_filenames/N-est-ed.rb +0 -5
  67. data/spec/fixtures/old_api/autoloaded_with_unconventional_filenames/nest_ed.rb +0 -0
  68. data/spec/fixtures/old_api/autoloaded_with_unconventional_filenames/old_school_autoload.rb +0 -5
  69. data/spec/fixtures/old_api/autoloaded_with_unconventional_filenames.rb +0 -10
  70. data/spec/fixtures/old_api/not_autoloaded/nested.rb +0 -1
  71. data/spec/fixtures/old_api/not_autoloaded/old_school_autoload.rb +0 -5
  72. data/spec/fixtures/old_api/not_autoloaded.rb +0 -6
  73. data/spec/matchers.rb +0 -85
  74. data/spec/spec_helper.rb +0 -91
  75. data/spec/support/util.rb +0 -43
  76. data/spec/support/without_side_effects.rb +0 -37
@@ -1,321 +0,0 @@
1
- require 'autoloaded_macro_sharedspec'
2
- require 'matchers'
3
- require 'stringio'
4
-
5
- RSpec.describe Autoloaded do
6
- let(:autoloaded_module) { described_class }
7
-
8
- let(:warning_module) { autoloaded_module::Warning }
9
-
10
- describe '.class' do
11
- it_behaves_like "an #{Autoloaded.name} macro", :class
12
- end
13
-
14
- describe '.module' do
15
- it_behaves_like "an #{Autoloaded.name} macro", :module
16
- end
17
-
18
- describe '.warn' do
19
- describe 'simple form' do
20
- before :each do
21
- allow(warning_module).to receive(:enable).
22
- and_return(:warning_enable_result)
23
- end
24
-
25
- specify("delegates to #{Autoloaded::Warning.name}.enable") {
26
- expect(warning_module).to receive(:enable).
27
- with('foo').
28
- and_return(:warning_enable_result)
29
- autoloaded_module.warn 'foo'
30
- }
31
-
32
- specify("returns #{Autoloaded.name}") {
33
- expect(autoloaded_module.warn('foo')).to eq(autoloaded_module)
34
- }
35
- end
36
-
37
- describe 'block form' do
38
- specify("delegates to #{Autoloaded::Warning.name}.enable") {
39
- expect(warning_module).to receive(:enable).
40
- with('foo').
41
- and_yield.
42
- and_return(:warning_enable_result)
43
- result = autoloaded_module.warn('foo') do
44
- :block_result
45
- end
46
- expect(result).to eq(:warning_enable_result)
47
- }
48
- end
49
- end
50
-
51
- describe '.warn?' do
52
- specify("delegates to #{Autoloaded::Warning.name}.enabled?") {
53
- expect(warning_module).to receive(:enabled?).
54
- and_return(:warning_enabled_result)
55
- expect(autoloaded_module.warn?).to eq(:warning_enabled_result)
56
- }
57
- end
58
-
59
- describe 'integration' do
60
- before :each do
61
- class << self
62
- alias_method :define_constant, :define_constants
63
- end
64
- end
65
-
66
- begin
67
- fork do
68
- # The codeclimate-test-reporter RubyGem uses Kernel#at_exit to hook the
69
- # end of test/spec runs for sending coverage statistics to their web
70
- # service. We need to skip that hook in this process fork because this is
71
- # not the end of a test/spec run, only of a process fork.
72
- exit!(true) if ENV['CODECLIMATE_REPO_TOKEN']
73
- end
74
- rescue NotImplementedError => e
75
- pending "[pending because #{e.message}]"
76
- else
77
- describe 'not extending a namespace' do
78
- subject(:source_file) { 'spec/fixtures/not_autoloaded.rb' }
79
-
80
- it { is_expected.to define_constant(:NotAutoloaded) }
81
-
82
- it { is_expected.to define_constant('NotAutoloaded::OldSchoolAutoload') }
83
-
84
- it { is_expected.not_to define_constant('NotAutoloaded::Nested') }
85
-
86
- it {
87
- is_expected.to set_up_autoload_for_constant('NotAutoloaded::OldSchoolAutoload').
88
- from_file('fixtures/not_autoloaded/old_school_autoload')
89
- }
90
-
91
- it {
92
- is_expected.not_to set_up_autoload_for_constant('NotAutoloaded::Nested')
93
- }
94
- end
95
-
96
- describe 'extending a namespace whose constituent source files include' do
97
- describe 'a conventional source filename used for autoloading' do
98
- subject(:source_file) {
99
- 'spec/fixtures/autoloaded_with_conventional_filename.rb'
100
- }
101
-
102
- it {
103
- is_expected.to define_constant(:AutoloadedWithConventionalFilename)
104
- }
105
-
106
- it {
107
- is_expected.to define_constant('AutoloadedWithConventionalFilename::OldSchoolAutoload')
108
- }
109
-
110
- it {
111
- is_expected.to define_constant('AutoloadedWithConventionalFilename::Nested')
112
- }
113
-
114
- it {
115
- is_expected.not_to define_constant('AutoloadedWithConventionalFilename::NONEXISTENT')
116
- }
117
-
118
- it {
119
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::OldSchoolAutoload').
120
- from_file('fixtures/autoloaded_with_conventional_filename/old_school_autoload')
121
- }
122
-
123
- it {
124
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::Nested').
125
- from_file('fixtures/autoloaded_with_conventional_filename/nested')
126
- }
127
-
128
- it {
129
- is_expected.not_to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::NONEXISTENT')
130
- }
131
- end
132
-
133
- describe 'unconventional source filenames' do
134
- subject(:source_file) {
135
- 'spec/fixtures/autoloaded_with_unconventional_filename.rb'
136
- }
137
-
138
- it {
139
- is_expected.to define_constant(:AutoloadedWithUnconventionalFilename)
140
- }
141
-
142
- it {
143
- is_expected.to define_constant('AutoloadedWithUnconventionalFilename::OldSchoolAutoload')
144
- }
145
-
146
- it {
147
- is_expected.to define_constants('AutoloadedWithUnconventionalFilename::Nested1',
148
- 'AutoloadedWithUnconventionalFilename::Nested2')
149
- }
150
-
151
- it {
152
- is_expected.to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilename::OldSchoolAutoload').
153
- from_file('fixtures/autoloaded_with_unconventional_filename/old_school_autoload')
154
- }
155
-
156
- it {
157
- is_expected.to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilename::Nested1').
158
- from_file('fixtures/autoloaded_with_unconventional_filename/N-est-ed')
159
- }
160
-
161
- it {
162
- is_expected.to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilename::Nested2').
163
- from_file('fixtures/autoloaded_with_unconventional_filename/N-est-ed')
164
- }
165
-
166
- it {
167
- is_expected.not_to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilename::NONEXISTENT')
168
- }
169
- end
170
- end
171
- end
172
-
173
- describe 'old API' do
174
- before :each do
175
- autoloaded_module::Deprecation.io = StringIO.new
176
- end
177
-
178
- after :each do
179
- autoloaded_module::Deprecation.io = nil
180
- end
181
-
182
- begin
183
- fork do
184
- # The codeclimate-test-reporter RubyGem uses Kernel#at_exit to hook the
185
- # end of test/spec runs for sending coverage statistics to their web
186
- # service. We need to skip that hook in this process fork because this is
187
- # not the end of a test/spec run, only of a process fork.
188
- exit!(true) if ENV['CODECLIMATE_REPO_TOKEN']
189
- end
190
- rescue NotImplementedError => e
191
- pending "[pending because #{e.message}]"
192
- else
193
- describe 'not extending a namespace' do
194
- subject(:source_file) { 'spec/fixtures/old_api/not_autoloaded.rb' }
195
-
196
- it { is_expected.to define_constant(:NotAutoloaded) }
197
-
198
- it {
199
- is_expected.to define_constant('NotAutoloaded::OldSchoolAutoload')
200
- }
201
-
202
- it { is_expected.not_to define_constant('NotAutoloaded::Nested') }
203
-
204
- it {
205
- is_expected.to set_up_autoload_for_constant('NotAutoloaded::OldSchoolAutoload').
206
- from_file('fixtures/old_api/not_autoloaded/old_school_autoload')
207
- }
208
-
209
- it {
210
- is_expected.not_to set_up_autoload_for_constant('NotAutoloaded::Nested')
211
- }
212
- end
213
-
214
- describe 'extending a namespace whose constituent source files include' do
215
- describe 'a conventional source filename used for autoloading' do
216
- subject(:source_file) {
217
- 'spec/fixtures/old_api/autoloaded_with_conventional_filename.rb'
218
- }
219
-
220
- it {
221
- is_expected.to define_constant(:AutoloadedWithConventionalFilename)
222
- }
223
-
224
- it {
225
- is_expected.to define_constant('AutoloadedWithConventionalFilename::OldSchoolAutoload')
226
- }
227
-
228
- it {
229
- is_expected.to define_constant('AutoloadedWithConventionalFilename::Nested')
230
- }
231
-
232
- it {
233
- is_expected.not_to define_constant('AutoloadedWithConventionalFilename::NONEXISTENT')
234
- }
235
-
236
- it {
237
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::OldSchoolAutoload').
238
- from_file('fixtures/old_api/autoloaded_with_conventional_filename/old_school_autoload')
239
- }
240
-
241
- it {
242
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::Nested').
243
- from_files('fixtures/old_api/autoloaded_with_conventional_filename/nested',
244
- 'fixtures/old_api/autoloaded_with_conventional_filename/N-est-ed',
245
- 'fixtures/old_api/autoloaded_with_conventional_filename/nest_ed')
246
- }
247
-
248
- it {
249
- is_expected.not_to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::NONEXISTENT')
250
- }
251
- end
252
-
253
- describe 'a conventional source filename only' do
254
- subject(:source_file) {
255
- 'spec/fixtures/old_api/autoloaded_with_conventional_filename_only.rb'
256
- }
257
-
258
- it {
259
- is_expected.to define_constant(:AutoloadedWithConventionalFilenameOnly)
260
- }
261
-
262
- it {
263
- is_expected.to define_constant('AutoloadedWithConventionalFilenameOnly::OldSchoolAutoload')
264
- }
265
-
266
- it {
267
- is_expected.to define_constant('AutoloadedWithConventionalFilenameOnly::Nested')
268
- }
269
-
270
- it {
271
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilenameOnly::OldSchoolAutoload').
272
- from_file('fixtures/old_api/autoloaded_with_conventional_filename_only/old_school_autoload')
273
- }
274
-
275
- it {
276
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilenameOnly::Nested').
277
- from_file('fixtures/old_api/autoloaded_with_conventional_filename_only/nested')
278
- }
279
-
280
- it {
281
- is_expected.not_to set_up_autoload_for_constant('AutoloadedWithConventionalFilenameOnly::NONEXISTENT')
282
- }
283
- end
284
-
285
- describe 'unconventional source filenames' do
286
- subject(:source_file) {
287
- 'spec/fixtures/old_api/autoloaded_with_unconventional_filenames.rb'
288
- }
289
-
290
- it {
291
- is_expected.to define_constant(:AutoloadedWithUnconventionalFilenames)
292
- }
293
-
294
- it {
295
- is_expected.to define_constant('AutoloadedWithUnconventionalFilenames::OldSchoolAutoload')
296
- }
297
-
298
- it {
299
- is_expected.to define_constants('AutoloadedWithUnconventionalFilenames::Nested')
300
- }
301
-
302
- it {
303
- is_expected.to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilenames::OldSchoolAutoload').
304
- from_file('fixtures/old_api/autoloaded_with_unconventional_filenames/old_school_autoload')
305
- }
306
-
307
- it {
308
- is_expected.to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilenames::Nested').
309
- from_files('fixtures/old_api/autoloaded_with_unconventional_filenames/N-est-ed',
310
- 'fixtures/old_api/autoloaded_with_unconventional_filenames/nest_ed')
311
- }
312
-
313
- it {
314
- is_expected.not_to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilenames::NONEXISTENT')
315
- }
316
- end
317
- end
318
- end
319
- end
320
- end
321
- end
@@ -1 +0,0 @@
1
- raise "The file #{__FILE__} should not have been loaded"
@@ -1 +0,0 @@
1
- raise "The file #{__FILE__} should not have been loaded"
@@ -1,9 +0,0 @@
1
- module AutoloadedWithConventionalFilename
2
-
3
- module Nested
4
-
5
- module DoublyNested; end
6
-
7
- end
8
-
9
- end
@@ -1,16 +0,0 @@
1
- require 'autoloaded'
2
-
3
- module AutoloadedWithConventionalFilename
4
-
5
- module Nested
6
-
7
- # module DoublyNested; end
8
- # autoload :DoublyNested, 'somewhere/else'
9
-
10
- ::Autoloaded.module { }
11
-
12
- DoublyNested
13
-
14
- end
15
-
16
- end
@@ -1,5 +0,0 @@
1
- module AutoloadedWithConventionalFilename
2
-
3
- module OldSchoolAutoload; end
4
-
5
- end
@@ -1,12 +0,0 @@
1
- require 'autoloaded'
2
-
3
- module AutoloadedWithConventionalFilename
4
-
5
- autoload :OldSchoolAutoload,
6
- 'fixtures/autoloaded_with_conventional_filename/old_school_autoload'
7
-
8
- ::Autoloaded.module do |autoloaded|
9
- autoloaded.except 'N-est-ed', 'nest_ed'
10
- end
11
-
12
- end
@@ -1,7 +0,0 @@
1
- module AutoloadedWithUnconventionalFilename
2
-
3
- module Nested1; end
4
-
5
- module Nested2; end
6
-
7
- end
@@ -1 +0,0 @@
1
- raise "The file #{__FILE__} should not have been loaded"
@@ -1,5 +0,0 @@
1
- module AutoloadedWithUnconventionalFilename
2
-
3
- module OldSchoolAutoload; end
4
-
5
- end
@@ -1,12 +0,0 @@
1
- require 'autoloaded'
2
-
3
- module AutoloadedWithUnconventionalFilename
4
-
5
- autoload :OldSchoolAutoload,
6
- 'fixtures/autoloaded_with_unconventional_filename/old_school_autoload'
7
-
8
- ::Autoloaded.module do |autoloaded|
9
- autoloaded.only 'N-est-ed' => [:Nested1, :Nested2]
10
- end
11
-
12
- end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1 +0,0 @@
1
- raise "The file #{__FILE__} should not have been loaded"
@@ -1,5 +0,0 @@
1
- module NotAutoloaded
2
-
3
- module OldSchoolAutoload; end
4
-
5
- end
@@ -1,5 +0,0 @@
1
- module NotAutoloaded
2
-
3
- autoload :OldSchoolAutoload, 'fixtures/not_autoloaded/old_school_autoload'
4
-
5
- end
@@ -1 +0,0 @@
1
- raise "The file #{__FILE__} should not have been loaded"
@@ -1 +0,0 @@
1
- raise "The file #{__FILE__} should not have been loaded"
@@ -1,5 +0,0 @@
1
- module AutoloadedWithConventionalFilename
2
-
3
- module Nested; end
4
-
5
- end
@@ -1,5 +0,0 @@
1
- module AutoloadedWithConventionalFilename
2
-
3
- module OldSchoolAutoload; end
4
-
5
- end
@@ -1,10 +0,0 @@
1
- require 'autoloaded'
2
-
3
- module AutoloadedWithConventionalFilename
4
-
5
- autoload :OldSchoolAutoload,
6
- 'fixtures/old_api/autoloaded_with_conventional_filename/old_school_autoload'
7
-
8
- extend ::Autoloaded
9
-
10
- end
@@ -1,5 +0,0 @@
1
- module AutoloadedWithConventionalFilenameOnly
2
-
3
- module Nested; end
4
-
5
- end
@@ -1,5 +0,0 @@
1
- module AutoloadedWithConventionalFilenameOnly
2
-
3
- module OldSchoolAutoload; end
4
-
5
- end
@@ -1,10 +0,0 @@
1
- require 'autoloaded'
2
-
3
- module AutoloadedWithConventionalFilenameOnly
4
-
5
- autoload :OldSchoolAutoload,
6
- 'fixtures/old_api/autoloaded_with_conventional_filename_only/old_school_autoload'
7
-
8
- extend ::Autoloaded
9
-
10
- end
@@ -1,5 +0,0 @@
1
- module AutoloadedWithUnconventionalFilenames
2
-
3
- module Nested; end
4
-
5
- end
@@ -1,5 +0,0 @@
1
- module AutoloadedWithUnconventionalFilenames
2
-
3
- module OldSchoolAutoload; end
4
-
5
- end
@@ -1,10 +0,0 @@
1
- require 'autoloaded'
2
-
3
- module AutoloadedWithUnconventionalFilenames
4
-
5
- autoload :OldSchoolAutoload,
6
- 'fixtures/old_api/autoloaded_with_unconventional_filenames/old_school_autoload'
7
-
8
- extend ::Autoloaded
9
-
10
- end
@@ -1 +0,0 @@
1
- raise "The file #{__FILE__} should not have been loaded"
@@ -1,5 +0,0 @@
1
- module NotAutoloaded
2
-
3
- module OldSchoolAutoload; end
4
-
5
- end
@@ -1,6 +0,0 @@
1
- module NotAutoloaded
2
-
3
- autoload :OldSchoolAutoload,
4
- 'fixtures/old_api/not_autoloaded/old_school_autoload'
5
-
6
- end
data/spec/matchers.rb DELETED
@@ -1,85 +0,0 @@
1
- require 'support/util'
2
- require 'support/without_side_effects'
3
-
4
- RSpec::Matchers.define :define_constants do |*constant_names|
5
- match do |source_file|
6
- # Ensure the file exists.
7
- File.open source_file, 'r' do
8
- end
9
-
10
- without_side_effects do
11
- constant_names.each do |constant_name|
12
- if Util.constantize(constant_name)
13
- fail "constant #{constant_name} is already defined outside #{source_file}"
14
- end
15
- end
16
-
17
- load source_file
18
-
19
- constant_names.all? do |constant_name|
20
- Util.namespace_and_unqualified_constant_name constant_name,
21
- raise_if_namespace_invalid: true
22
- Util.constantize constant_name
23
- end
24
- end
25
- end
26
-
27
- description do
28
- fragments = []
29
- fragments << case constant_names.length
30
- when 0
31
- 'no constants'
32
- when 1
33
- "constant #{constant_names.first}"
34
- else
35
- "constants #{constant_names.join ' and '}"
36
- end
37
- "define #{fragments.join ' '}"
38
- end
39
- end
40
-
41
- RSpec::Matchers.define :set_up_autoload_for_constant do |constant_name|
42
- match do |source_file|
43
- # Ensure the file exists.
44
- File.open source_file, 'r' do
45
- end
46
-
47
- without_side_effects do
48
- namespace, unqualified_constant_name = Util.namespace_and_unqualified_constant_name(constant_name)
49
- if namespace && namespace.autoload?(unqualified_constant_name)
50
- fail "#{namespace.name}::#{unqualified_constant_name} is already set up for autoload outside #{source_file}"
51
- end
52
-
53
- load source_file
54
-
55
- namespace, unqualified_constant_name = Util.namespace_and_unqualified_constant_name(constant_name,
56
- raise_if_namespace_invalid: true)
57
- if filename_or_filenames
58
- Array(filename_or_filenames).sort == Array(namespace.autoload?(unqualified_constant_name)).sort
59
- else
60
- namespace.autoload? unqualified_constant_name
61
- end
62
- end
63
- end
64
-
65
- chain :from_file do |filename|
66
- @filename_or_filenames = filename
67
- end
68
-
69
- chain :from_files do |*filenames|
70
- @filename_or_filenames = filenames
71
- end
72
-
73
- description do
74
- fragments = []
75
- fragments << "constant #{constant_name}"
76
- if filename_or_filenames
77
- unless (filenames = Array(filename_or_filenames)).empty?
78
- fragments << "from file#{(filenames.length == 1) ? nil : 's'} #{filenames.join ' and '}"
79
- end
80
- end
81
- "set up #{Module.name}#autoload? for #{fragments.join ' '}"
82
- end
83
-
84
- attr_reader :filename_or_filenames
85
- end