autoloaded 1.2.0 → 1.3.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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/History.md +4 -0
  4. data/README.md +411 -60
  5. data/autoloaded.gemspec +19 -14
  6. data/lib/autoloaded.rb +104 -91
  7. data/lib/autoloaded/autoloader.rb +260 -0
  8. data/lib/autoloaded/compatibility/refine_and_using.rb +2 -0
  9. data/lib/autoloaded/constant.rb +5 -2
  10. data/lib/autoloaded/deprecation.rb +50 -0
  11. data/lib/autoloaded/inflection.rb +71 -0
  12. data/lib/autoloaded/load_pathed_directory.rb +112 -0
  13. data/lib/autoloaded/refine.rb +7 -1
  14. data/lib/autoloaded/refine/string.rb +7 -0
  15. data/lib/autoloaded/refine/string/to_source_filename.rb +12 -0
  16. data/lib/autoloaded/specification.rb +97 -0
  17. data/lib/autoloaded/specifications.rb +66 -0
  18. data/lib/autoloaded/version.rb +3 -1
  19. data/lib/autoloaded/warning.rb +125 -0
  20. data/spec/autoloaded/autoloader_spec.rb +469 -0
  21. data/spec/autoloaded/constant_spec.rb +0 -2
  22. data/spec/autoloaded/deprecation_spec.rb +23 -0
  23. data/spec/autoloaded/inflection_spec.rb +30 -0
  24. data/spec/autoloaded/load_pathed_directory_spec.rb +120 -0
  25. data/spec/autoloaded/refine/string/to_source_filename_spec.rb +0 -2
  26. data/spec/autoloaded/specification_spec.rb +98 -0
  27. data/spec/autoloaded/specifications_spec.rb +191 -0
  28. data/spec/autoloaded/version_spec.rb +0 -2
  29. data/spec/autoloaded/warning_spec.rb +115 -0
  30. data/spec/autoloaded_macro_sharedspec.rb +24 -0
  31. data/spec/autoloaded_spec.rb +277 -95
  32. data/spec/fixtures/autoloaded_with_conventional_filename.rb +3 -1
  33. data/spec/fixtures/autoloaded_with_conventional_filename/nested.rb +12 -1
  34. data/spec/fixtures/autoloaded_with_conventional_filename/nested/doubly_nested.rb +9 -0
  35. data/spec/fixtures/autoloaded_with_unconventional_filename.rb +12 -0
  36. data/spec/fixtures/autoloaded_with_unconventional_filename/N-est-ed.rb +7 -0
  37. data/spec/fixtures/autoloaded_with_unconventional_filename/nest_ed.rb +1 -0
  38. data/spec/fixtures/autoloaded_with_unconventional_filename/old_school_autoload.rb +5 -0
  39. data/spec/fixtures/not_autoloaded/nested.rb +1 -0
  40. data/spec/fixtures/old_api/autoloaded_with_conventional_filename.rb +10 -0
  41. data/spec/fixtures/old_api/autoloaded_with_conventional_filename/N-est-ed.rb +1 -0
  42. data/spec/fixtures/old_api/autoloaded_with_conventional_filename/nest_ed.rb +1 -0
  43. data/spec/fixtures/old_api/autoloaded_with_conventional_filename/nested.rb +5 -0
  44. data/spec/fixtures/old_api/autoloaded_with_conventional_filename/old_school_autoload.rb +5 -0
  45. data/spec/fixtures/{autoloaded_with_conventional_filename_only.rb → old_api/autoloaded_with_conventional_filename_only.rb} +1 -1
  46. data/spec/fixtures/{autoloaded_with_conventional_filename_only → old_api/autoloaded_with_conventional_filename_only}/nested.rb +0 -0
  47. data/spec/fixtures/{autoloaded_with_conventional_filename_only → old_api/autoloaded_with_conventional_filename_only}/old_school_autoload.rb +0 -0
  48. data/spec/fixtures/{autoloaded_with_unconventional_filenames.rb → old_api/autoloaded_with_unconventional_filenames.rb} +1 -1
  49. data/spec/fixtures/{autoloaded_with_unconventional_filenames → old_api/autoloaded_with_unconventional_filenames}/N-est-ed.rb +0 -0
  50. data/spec/fixtures/{autoloaded_with_unconventional_filenames → old_api/autoloaded_with_unconventional_filenames}/nest_ed.rb +0 -0
  51. data/spec/fixtures/{autoloaded_with_unconventional_filenames → old_api/autoloaded_with_unconventional_filenames}/old_school_autoload.rb +0 -0
  52. data/spec/fixtures/old_api/not_autoloaded.rb +6 -0
  53. data/spec/fixtures/old_api/not_autoloaded/nested.rb +1 -0
  54. data/spec/fixtures/old_api/not_autoloaded/old_school_autoload.rb +5 -0
  55. data/spec/matchers.rb +4 -33
  56. data/spec/spec_helper.rb +2 -0
  57. metadata +95 -41
@@ -1,5 +1,3 @@
1
- require 'autoloaded/version'
2
-
3
1
  RSpec.describe "#{Autoloaded.name}::VERSION" do
4
2
  specify { expect(Autoloaded::VERSION).to match( /^\d+\.\d+\.\d+/ ) }
5
3
  end
@@ -0,0 +1,115 @@
1
+ require 'stringio'
2
+
3
+ RSpec.describe Autoloaded::Warning do
4
+ before :each do
5
+ warning_module.io = io
6
+ end
7
+
8
+ let(:warning_module) { described_class }
9
+
10
+ let(:io) { StringIO.new }
11
+
12
+ describe '.enable' do
13
+ describe 'simple form' do
14
+ describe 'with nil argument' do
15
+ specify('sets .enabled? as expected') {
16
+ warning_module.enable nil
17
+ expect(warning_module.enabled?).to eq(false)
18
+ }
19
+ end
20
+
21
+ describe 'with false argument' do
22
+ specify('sets .enabled? as expected') {
23
+ warning_module.enable false
24
+ expect(warning_module.enabled?).to eq(false)
25
+ }
26
+ end
27
+
28
+ describe 'with string argument' do
29
+ specify('sets .enabled? as expected') {
30
+ warning_module.enable 'foo'
31
+ expect(warning_module.enabled?).to eq(true)
32
+ }
33
+ end
34
+
35
+ describe 'with true argument' do
36
+ specify('sets .enabled? as expected') {
37
+ warning_module.enable true
38
+ expect(warning_module.enabled?).to eq(true)
39
+ }
40
+ end
41
+
42
+ specify("returns #{Autoloaded::Warning.name}") {
43
+ expect(warning_module.enable('foo')).to eq(warning_module)
44
+ }
45
+ end
46
+
47
+ describe 'block form' do
48
+ specify('returns the result of the block') {
49
+ result = warning_module.enable('foo') do
50
+ :block_result
51
+ end
52
+ expect(result).to eq(:block_result)
53
+ }
54
+
55
+ describe 'if the block returns' do
56
+ specify('resets .enabled?') {
57
+ expect {
58
+ warning_module.enable(false) { }
59
+ }.not_to change { warning_module.enabled? }
60
+ expect {
61
+ warning_module.enable(true) { }
62
+ }.not_to change { warning_module.enabled? }
63
+ }
64
+ end
65
+
66
+ describe 'if the block raises an error' do
67
+ specify('resets .enabled?') {
68
+ expect {
69
+ begin
70
+ warning_module.enable(false) do
71
+ 1 / 0
72
+ end
73
+ rescue ZeroDivisionError
74
+ end
75
+ }.not_to change { warning_module.enabled? }
76
+ expect {
77
+ begin
78
+ warning_module.enable(true) do
79
+ 1 / 0
80
+ end
81
+ rescue ZeroDivisionError
82
+ end
83
+ }.not_to change { warning_module.enabled? }
84
+ }
85
+ end
86
+ end
87
+ end
88
+
89
+ describe '.changing_autoload' do
90
+ before :each do
91
+ warning_module.enable true
92
+ warning_module.changing_autoload constant_name: :Foo,
93
+ old_source_filename: 'bar',
94
+ new_source_filename: 'baz',
95
+ host_source_location: 'qux.rb:123'
96
+ end
97
+
98
+ specify('writes the expected message to .io') {
99
+ expect(io.string).to eq(%Q(\e[33m*** \e[7m WARNING \e[0m Existing autoload of \e[4mFoo\e[0m from "bar" is being overridden to autoload from "baz" -- avoid this warning by using an \e[4monly\e[0m or an \e[4mexcept\e[0m specification in the block at qux.rb:123\n))
100
+ }
101
+ end
102
+
103
+ describe '.existing_constant' do
104
+ before :each do
105
+ warning_module.enable true
106
+ warning_module.existing_constant constant_name: :Foo,
107
+ source_filename: 'bar',
108
+ host_source_location: 'baz.rb:123'
109
+ end
110
+
111
+ specify('writes the expected message to .io') {
112
+ expect(io.string).to eq(%Q(\e[33m*** \e[7m WARNING \e[0m Existing definition of \e[4mFoo\e[0m obviates autoloading from "bar" -- avoid this warning by using an \e[4monly\e[0m or an \e[4mexcept\e[0m specification in the block at baz.rb:123\n))
113
+ }
114
+ end
115
+ end
@@ -0,0 +1,24 @@
1
+ RSpec.shared_examples_for "an #{Autoloaded.name} macro" do |macro|
2
+ before :each do
3
+ allow(autoloader_class).to receive(:new).and_return(autoloader)
4
+ allow_any_instance_of(autoloader_class).to receive(:autoload!)
5
+ end
6
+
7
+ let(:autoloaded_module) { Autoloaded }
8
+
9
+ let(:autoloader) { autoloader_class.new binding }
10
+
11
+ let(:autoloader_class) { autoloaded_module::Autoloader }
12
+
13
+ specify("yields an #{Autoloaded::Autoloader.name}") {
14
+ autoloaded_module.send macro do |autoloaded|
15
+ expect(autoloaded).to equal(autoloader)
16
+ end
17
+ }
18
+
19
+ specify("calls #{Autoloaded::Autoloader.name}#autoload!") {
20
+ expect(autoloader).to receive(:autoload!)
21
+ autoloaded_module.send macro do |autoloaded|
22
+ end
23
+ }
24
+ end
@@ -1,138 +1,320 @@
1
- require 'autoloaded'
1
+ require 'autoloaded_macro_sharedspec'
2
2
  require 'matchers'
3
+ require 'stringio'
3
4
 
4
5
  RSpec.describe Autoloaded do
5
- before :each do
6
- class << self
7
- alias_method :define_constant, :define_constants
8
- end
9
- end
6
+ let(:autoloaded_module) { described_class }
10
7
 
11
- begin
12
- fork
13
- rescue NotImplementedError => e
14
- pending "[pending because #{e.message}]"
15
- else
16
- describe 'not extending a namespace' do
17
- subject(:source_file) { 'spec/fixtures/not_autoloaded.rb' }
8
+ let(:warning_module) { autoloaded_module::Warning }
18
9
 
19
- it { is_expected.to define_constant(:NotAutoloaded) }
10
+ describe '.class' do
11
+ it_behaves_like "an #{Autoloaded.name} macro", :class
12
+ end
20
13
 
21
- it { is_expected.to define_constant('NotAutoloaded::OldSchoolAutoload') }
14
+ describe '.module' do
15
+ it_behaves_like "an #{Autoloaded.name} macro", :module
16
+ end
22
17
 
23
- it { is_expected.not_to define_constant('NotAutoloaded::Nested') }
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
24
 
25
- it {
26
- is_expected.to set_up_autoload_for_constant('NotAutoloaded::OldSchoolAutoload').
27
- from_file('fixtures/not_autoloaded/old_school_autoload')
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'
28
30
  }
29
31
 
30
- it {
31
- is_expected.not_to set_up_autoload_for_constant('NotAutoloaded::Nested')
32
+ specify("returns #{Autoloaded.name}") {
33
+ expect(autoloaded_module.warn('foo')).to eq(autoloaded_module)
32
34
  }
33
35
  end
34
36
 
35
- describe 'extending a namespace whose constituent source files have' do
36
- describe 'conventional names used for autoloading' do
37
- subject(:source_file) {
38
- 'spec/fixtures/autoloaded_with_conventional_filename.rb'
39
- }
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
40
50
 
41
- it { is_expected.to define_constant(:AutoloadedWithConventionalFilename) }
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
42
58
 
43
- it {
44
- is_expected.to define_constant('AutoloadedWithConventionalFilename::OldSchoolAutoload')
45
- }
59
+ describe 'integration' do
60
+ before :each do
61
+ class << self
62
+ alias_method :define_constant, :define_constants
63
+ end
64
+ end
46
65
 
47
- it {
48
- is_expected.to define_constant('AutoloadedWithConventionalFilename::Nested').
49
- dynamically
50
- }
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' }
51
79
 
52
- it {
53
- is_expected.not_to define_constant('AutoloadedWithConventionalFilename::NONEXISTENT')
54
- }
80
+ it { is_expected.to define_constant(:NotAutoloaded) }
55
81
 
56
- it {
57
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::OldSchoolAutoload').
58
- from_file('fixtures/autoloaded_with_conventional_filename/old_school_autoload')
59
- }
82
+ it { is_expected.to define_constant('NotAutoloaded::OldSchoolAutoload') }
83
+
84
+ it { is_expected.not_to define_constant('NotAutoloaded::Nested') }
60
85
 
61
86
  it {
62
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::Nested').
63
- from_files('fixtures/autoloaded_with_conventional_filename/nested',
64
- 'fixtures/autoloaded_with_conventional_filename/N-est-ed',
65
- 'fixtures/autoloaded_with_conventional_filename/nest_ed')
87
+ is_expected.to set_up_autoload_for_constant('NotAutoloaded::OldSchoolAutoload').
88
+ from_file('fixtures/not_autoloaded/old_school_autoload')
66
89
  }
67
90
 
68
91
  it {
69
- is_expected.not_to set_up_autoload_for_constant('AutoloadedWithConventionalFilename::NONEXISTENT')
92
+ is_expected.not_to set_up_autoload_for_constant('NotAutoloaded::Nested')
70
93
  }
71
94
  end
72
95
 
73
- describe 'conventional names' do
74
- subject(:source_file) {
75
- 'spec/fixtures/autoloaded_with_conventional_filename_only.rb'
76
- }
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
+ }
77
101
 
78
- it { is_expected.to define_constant(:AutoloadedWithConventionalFilenameOnly) }
102
+ it {
103
+ is_expected.to define_constant(:AutoloadedWithConventionalFilename)
104
+ }
79
105
 
80
- it {
81
- is_expected.to define_constant('AutoloadedWithConventionalFilenameOnly::OldSchoolAutoload')
82
- }
106
+ it {
107
+ is_expected.to define_constant('AutoloadedWithConventionalFilename::OldSchoolAutoload')
108
+ }
83
109
 
84
- it {
85
- is_expected.to define_constant('AutoloadedWithConventionalFilenameOnly::Nested').
86
- dynamically
87
- }
110
+ it {
111
+ is_expected.to define_constant('AutoloadedWithConventionalFilename::Nested')
112
+ }
88
113
 
89
- it {
90
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilenameOnly::OldSchoolAutoload').
91
- from_file('fixtures/autoloaded_with_conventional_filename_only/old_school_autoload')
92
- }
114
+ it {
115
+ is_expected.not_to define_constant('AutoloadedWithConventionalFilename::NONEXISTENT')
116
+ }
93
117
 
94
- it {
95
- is_expected.to set_up_autoload_for_constant('AutoloadedWithConventionalFilenameOnly::Nested').
96
- from_file('fixtures/autoloaded_with_conventional_filename_only/nested')
97
- }
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
+ }
98
122
 
99
- it {
100
- is_expected.not_to set_up_autoload_for_constant('AutoloadedWithConventionalFilenameOnly::NONEXISTENT')
101
- }
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
102
170
  end
171
+ end
103
172
 
104
- describe 'unconventional names' do
105
- subject(:source_file) {
106
- 'spec/fixtures/autoloaded_with_unconventional_filenames.rb'
107
- }
173
+ describe 'old API' do
174
+ before :each do
175
+ autoloaded_module::Deprecation.io = StringIO.new
176
+ end
108
177
 
109
- it {
110
- is_expected.to define_constant(:AutoloadedWithUnconventionalFilenames)
111
- }
178
+ after :each do
179
+ autoloaded_module::Deprecation.io = nil
180
+ end
112
181
 
113
- it {
114
- is_expected.to define_constant('AutoloadedWithUnconventionalFilenames::OldSchoolAutoload')
115
- }
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' }
116
195
 
117
- it {
118
- is_expected.to define_constants('AutoloadedWithUnconventionalFilenames::Nested').
119
- dynamically
120
- }
196
+ it { is_expected.to define_constant(:NotAutoloaded) }
121
197
 
122
- it {
123
- is_expected.to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilenames::OldSchoolAutoload').
124
- from_file('fixtures/autoloaded_with_unconventional_filenames/old_school_autoload')
125
- }
198
+ it {
199
+ is_expected.to define_constant('NotAutoloaded::OldSchoolAutoload')
200
+ }
126
201
 
127
- it {
128
- is_expected.to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilenames::Nested').
129
- from_files('fixtures/autoloaded_with_unconventional_filenames/N-est-ed',
130
- 'fixtures/autoloaded_with_unconventional_filenames/nest_ed')
131
- }
202
+ it { is_expected.not_to define_constant('NotAutoloaded::Nested') }
132
203
 
133
- it {
134
- is_expected.not_to set_up_autoload_for_constant('AutoloadedWithUnconventionalFilenames::NONEXISTENT')
135
- }
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
136
318
  end
137
319
  end
138
320
  end