subload 1.0.3 → 1.1.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.
@@ -0,0 +1,7 @@
1
+ === 1.1.0 / 2010-03-17
2
+
3
+ * 1 major enhancement
4
+
5
+ * Moved to Hoe
6
+ * Modification from coderrr to support C2C2Api -> c2c2_api
7
+
@@ -0,0 +1,19 @@
1
+ CHANGELOG.rdoc
2
+ Manifest.txt
3
+ README.rdoc
4
+ Rakefile
5
+ examples/a.rb
6
+ examples/a/foo.rb
7
+ examples/a/foo/bar.rb
8
+ examples/a/foo/baz.rb
9
+ examples/rails/loader.rb
10
+ lib/subload.rb
11
+ subload.gemspec
12
+ test/test_subload.rb
13
+ test/test_subload/a.rb
14
+ test/test_subload/b.rb
15
+ test/test_subload/c.rb
16
+ test/test_subload/d.rb
17
+ test/test_subload/e.rb
18
+ test/test_subload/f.rb
19
+ test/test_subload/f/a.rb
@@ -0,0 +1,117 @@
1
+ = subload
2
+
3
+ * http://rubygems.org/gems/subload
4
+ * docs: http://libraggi.rubyforge.org/subload/
5
+ * source: http://github.com/raggi/subload/
6
+ * issues: http://github.com/raggi/subload/issues
7
+ * rubyforge: http://rubyforge.org/projects/libraggi
8
+
9
+ == DESCRIPTION:
10
+
11
+ A handy dandy autoload / require / load helper for your rubies. Similar to
12
+ using[1], but with a few differences of opinion, and a bit shorter.
13
+
14
+ Basically, expand path is fine, up until a point. Sometimes there's no point
15
+ (i.e. when the load path already contains most of the path you're trying to
16
+ open). When you're writing libs that users might require sub parts with
17
+ 'libname/sub_part', then expand_path combined with say, rubygems, can lead to
18
+ double requires. Lets not do that. :-)
19
+
20
+ [1] http://github.com/smtlaissezfaire/using/
21
+
22
+ == FEATURES/PROBLEMS:
23
+
24
+ * File.expand_path: Expand path is good if you're traversing up directories.
25
+ It is bad if you're loading something within a library that is on the load
26
+ path. If the library is on the load path, and you require files with an
27
+ expanded path, there is the likelihood of a double require when other code
28
+ contains a require that is expectant of the load path modification.
29
+
30
+ * Frameworks: Sometimes require explicit load order control. In these cases,
31
+ overriding the loader and either tracking, or performing stateful operations
32
+ works well.
33
+
34
+ * Abusive use of override_mode: Override mode is potentially dangerous. As per
35
+ the other documentation, override mode should be reserved for use in
36
+ application code only. Libraries setting override mode could cause
37
+ additional failure cases for foreign libraries, although gratuitous addition
38
+ of loading mechanisms is not recommended.
39
+
40
+ * Generated code loading: When you're doing code generation, sometimes it is
41
+ desirable to have tow locations from which to load a class. One will contain
42
+ custom class defintions, and the other will contain generated definitions.
43
+ Using a custom loader, one can then utilise a single subload statement to
44
+ correctly load both files.
45
+
46
+ * TODO Chaotic Overloading
47
+
48
+ * Consider vertical vs. horizontal delegation rules and use cases for new
49
+ loaders in non-framework libraries that perform custom loads such that it is
50
+ easy to say "invoke the current load mode with the following options".
51
+
52
+ == SYNOPSIS:
53
+
54
+ module A
55
+
56
+ # The nominal use case, A.autoload :B, 'a/b'
57
+ # You rarely need much else!
58
+ subload :B
59
+
60
+ # A custom path, A.autoload :C, 'a/c'
61
+ subload :C, :path => 'a/c'
62
+ # For example when 'a/c' defines several constants:
63
+ subload :Ca, :path => 'a/c'
64
+ subload :Cb, :path => 'a/c'
65
+
66
+ # An expanded path, A.autoload :D, File.join(Dir.pwd, 'a/d')
67
+ subload :D, :expand_path => true
68
+ # This has interesting uses in combination, although not generally
69
+ # recommended:
70
+ subload :E, :path => '../../path/e', :expand_path => true
71
+
72
+ # Explicitly override the mode, for this call only, A.require 'a/f'
73
+ subload :F, :mode => :require
74
+
75
+ # Set the mode for all subsiquent calls to subload in this class/module
76
+ subload_with :require
77
+ subload :G # => require 'a/g'
78
+ subload :H # => require 'a/h'
79
+
80
+ # Other features intended for library and framework developers are described
81
+ # in the class documentation.
82
+
83
+ end
84
+
85
+
86
+ == REQUIREMENTS:
87
+
88
+ * ruby
89
+
90
+ == INSTALL:
91
+
92
+ * gem install subload
93
+
94
+ == LICENSE:
95
+
96
+ (The MIT License)
97
+
98
+ Copyright (c) 2010 James Tucker <raggi@rubyforge.org>
99
+
100
+ Permission is hereby granted, free of charge, to any person obtaining
101
+ a copy of this software and associated documentation files (the
102
+ 'Software'), to deal in the Software without restriction, including
103
+ without limitation the rights to use, copy, modify, merge, publish,
104
+ distribute, sublicense, and/or sell copies of the Software, and to
105
+ permit persons to whom the Software is furnished to do so, subject to
106
+ the following conditions:
107
+
108
+ The above copyright notice and this permission notice shall be
109
+ included in all copies or substantial portions of the Software.
110
+
111
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
112
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
113
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
114
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
115
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
116
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
117
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,109 +1,27 @@
1
1
  #!/usr/bin/env rake
2
- require 'rake/clean'
3
2
 
4
- task :default => :spec
3
+ require 'hoe'
4
+ Hoe.plugin :doofus, :git, :gemcutter
5
5
 
6
- def spec(file = Dir['*.gemspec'].first)
7
- @spec ||=
8
- begin
9
- require 'rubygems/specification'
10
- Thread.abort_on_exception = true
11
- data = File.read(file)
12
- spec = nil
13
- Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
14
- spec.instance_variable_set(:@filename, file)
15
- def spec.filename; @filename; end
16
- spec
17
- end
6
+ hoe = Hoe.spec 'subload' do
7
+ developer "James Tucker", "raggi@rubyforge.org"
8
+ extra_dev_deps << %w(hoe-doofus >=1.0.0)
9
+ extra_dev_deps << %w(hoe-git >=1.3.0)
10
+ extra_dev_deps << %w(hoe-gemcutter >=1.0.0)
11
+ self.extra_rdoc_files = FileList["**/*.rdoc"]
12
+ self.history_file = "CHANGELOG.rdoc"
13
+ self.readme_file = "README.rdoc"
14
+ self.rubyforge_name = 'libraggi'
18
15
  end
19
16
 
20
- def manifest; @manifest ||= `git ls-files`.split("\n").reject{|s|s=~/\.gemspec$|\.gitignore$/}; end
17
+ # TODO make a plugin to deal with this
18
+ gem_spec_file = hoe.spec.name + '.gemspec'
19
+ version_file = %Q{lib/#{hoe.spec.name}.rb}
21
20
 
22
- @gem_package_task_type = begin
23
- require 'rubygems/package_task'
24
- Gem::PackageTask
25
- rescue LoadError
26
- require 'rake/gempackagetask'
27
- Rake::GemPackageTask
21
+ desc "Generate #{gem_spec_file}"
22
+ file gem_spec_file => hoe.spec.files - [gem_spec_file] do
23
+ open(gem_spec_file, 'w') { |f| f.write hoe.spec.to_ruby }
28
24
  end
29
- def gem_task; @gem_task ||= @gem_package_task_type.new(spec); end
30
- gem_task.define
31
- Rake::Task[:clobber].enhance [:clobber_package]
32
25
 
33
- require 'rake/testtask'
34
- Rake::TestTask.new(:test) do |t|
35
- t.test_files = spec.test_files
36
- t.ruby_opts = ['-rubygems'] if defined? Gem
37
- t.warning = true
38
- end unless spec.test_files.empty?
39
-
40
- rdoc_task_type = begin
41
- require 'rdoc/task'
42
- RDoc::Task
43
- rescue LoadError
44
- require 'rake/rdoctask'
45
- Rake::RDocTask
46
- end
47
- df = begin; require 'rdoc/generator/darkfish'; true; rescue LoadError; end
48
- rdtask = rdoc_task_type.new do |rd|
49
- rd.title = spec.name
50
- rd.main = spec.extra_rdoc_files.first
51
- lib_rexp = spec.require_paths.map { |p| Regexp.escape p }.join('|')
52
- rd.rdoc_files.include(*manifest.grep(/^(?:#{lib_rexp})/))
53
- rd.rdoc_files.include(*spec.extra_rdoc_files)
54
- rd.template = 'darkfish' if df
55
- end
56
-
57
- Rake::Task[:clobber].enhance [:clobber_rdoc]
58
-
59
- require 'yaml'
60
- require 'rake/contrib/sshpublisher'
61
- desc "Publish rdoc to rubyforge"
62
- task :publish => rdtask.name do
63
- rf_cfg = File.expand_path '~/.rubyforge/user-config.yml'
64
- host = "#{YAML.load_file(rf_cfg)['username']}@rubyforge.org"
65
- remote_dir = "/var/www/gforge-projects/#{spec.rubyforge_project}/#{spec.name}/"
66
- Rake::SshDirPublisher.new(host, remote_dir, rdtask.rdoc_dir).upload
67
- end
68
-
69
- desc 'Generate and open documentation'
70
- task :docs => :rdoc do
71
- path = rdtask.send :rdoc_target
72
- case RUBY_PLATFORM
73
- when /darwin/ ; sh "open #{path}"
74
- when /mswin|mingw/ ; sh "start #{path}"
75
- else
76
- sh "firefox #{path}"
77
- end
78
- end
79
-
80
- desc "Regenerate gemspec"
81
- task :gemspec => spec.filename
82
-
83
- task spec.filename do
84
- spec.files = manifest
85
- spec.test_files = FileList['{test,spec}/**/{test,spec}_*.rb']
86
- open(spec.filename, 'w') { |w| w.write spec.to_ruby }
87
- end
88
-
89
- desc "Bump version from #{spec.version} to #{spec.version.to_s.succ}"
90
- task :bump do
91
- spec.version = spec.version.to_s.succ
92
- end
93
-
94
- desc "Tag version #{spec.version}"
95
- task :tag do
96
- tagged = Dir.new('.git/refs/tags').entries.include? spec.version.to_s
97
- if tagged
98
- warn "Tag #{spec.version} already exists"
99
- else
100
- # TODO release message in tag message
101
- sh "git tag #{spec.version}"
102
- end
103
- end
104
-
105
- desc "Release #{gem_task.gem_file} to rubyforge and gemcutter"
106
- task :release => [:tag, :gem, :publish] do |t|
107
- sh "rubyforge add_release #{spec.rubyforge_project} #{spec.name} #{spec.version} #{gem_task.package_dir}/#{gem_task.gem_file}"
108
- sh "gem push #{gem_task.package_dir}/#{gem_task.gem_file}"
109
- end
26
+ task :package => gem_spec_file
27
+ task :check_manifest => gem_spec_file
@@ -1,5 +1,7 @@
1
1
  # TODO convert to yardoc
2
2
  module Subload
3
+ VERSION = '1.1.0'
4
+
3
5
  # To add modes to subload, simply add them to this hash. Please use the
4
6
  # a namespace convention, starting with +:projectname_operationdescription+.
5
7
  MODES = {
@@ -62,7 +64,7 @@ module Subload
62
64
  subload_with(mode)[self, symbol, path, options]
63
65
  end
64
66
 
65
- LONG_UPPER_CONSTS = [/([A-Z]+)([A-Z][a-z]+)/, '\1_\2']
67
+ LONG_UPPER_CONSTS = [/([A-Z\d]+)([A-Z][a-z]+)/, '\1_\2']
66
68
  TAIL_UPPER_CONSTS = [/([a-z])([A-Z])/, '\1_\2']
67
69
  DOUBLE_UNDERSCORE = '__'
68
70
  DOUBLE_COLON = '::'
@@ -98,4 +100,4 @@ class Module
98
100
  else
99
101
  alias __name__ name
100
102
  end
101
- end
103
+ end
@@ -0,0 +1,52 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{subload}
5
+ s.version = "1.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["James Tucker"]
9
+ s.date = %q{2010-03-17}
10
+ s.description = %q{A handy dandy autoload / require / load helper for your rubies. Similar to
11
+ using[1], but with a few differences of opinion, and a bit shorter.
12
+
13
+ Basically, expand path is fine, up until a point. Sometimes there's no point
14
+ (i.e. when the load path already contains most of the path you're trying to
15
+ open). When you're writing libs that users might require sub parts with
16
+ 'libname/sub_part', then expand_path combined with say, rubygems, can lead to
17
+ double requires. Lets not do that. :-)
18
+
19
+ [1] http://github.com/smtlaissezfaire/using/}
20
+ s.email = ["raggi@rubyforge.org"]
21
+ s.extra_rdoc_files = ["Manifest.txt", "CHANGELOG.rdoc", "README.rdoc"]
22
+ s.files = ["CHANGELOG.rdoc", "Manifest.txt", "README.rdoc", "Rakefile", "examples/a.rb", "examples/a/foo.rb", "examples/a/foo/bar.rb", "examples/a/foo/baz.rb", "examples/rails/loader.rb", "lib/subload.rb", "subload.gemspec", "test/test_subload.rb", "test/test_subload/a.rb", "test/test_subload/b.rb", "test/test_subload/c.rb", "test/test_subload/d.rb", "test/test_subload/e.rb", "test/test_subload/f.rb", "test/test_subload/f/a.rb"]
23
+ s.homepage = %q{http://rubygems.org/gems/subload}
24
+ s.rdoc_options = ["--main", "README.rdoc"]
25
+ s.require_paths = ["lib"]
26
+ s.rubyforge_project = %q{libraggi}
27
+ s.rubygems_version = %q{1.3.6}
28
+ s.summary = %q{A handy dandy autoload / require / load helper for your rubies}
29
+ s.test_files = ["test/test_subload.rb"]
30
+
31
+ if s.respond_to? :specification_version then
32
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
33
+ s.specification_version = 3
34
+
35
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
36
+ s.add_development_dependency(%q<hoe-doofus>, [">= 1.0.0"])
37
+ s.add_development_dependency(%q<hoe-git>, [">= 1.3.0"])
38
+ s.add_development_dependency(%q<hoe-gemcutter>, [">= 1.0.0"])
39
+ s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
40
+ else
41
+ s.add_dependency(%q<hoe-doofus>, [">= 1.0.0"])
42
+ s.add_dependency(%q<hoe-git>, [">= 1.3.0"])
43
+ s.add_dependency(%q<hoe-gemcutter>, [">= 1.0.0"])
44
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
45
+ end
46
+ else
47
+ s.add_dependency(%q<hoe-doofus>, [">= 1.0.0"])
48
+ s.add_dependency(%q<hoe-git>, [">= 1.3.0"])
49
+ s.add_dependency(%q<hoe-gemcutter>, [">= 1.0.0"])
50
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
51
+ end
52
+ end
@@ -1,6 +1,4 @@
1
1
  require "test/unit"
2
-
3
- $:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
4
2
  require "subload"
5
3
 
6
4
  class TestSubload < Test::Unit::TestCase
@@ -68,4 +66,10 @@ class TestSubload < Test::Unit::TestCase
68
66
  assert_equal("Module", Module.__name__)
69
67
  end
70
68
 
71
- end
69
+ def test_to_path
70
+ assert_equal 'c2c2_api', Subload.to_path('C2C2Api')
71
+ assert_equal '123_api', Subload.to_path('123Api')
72
+ assert_equal 'http_error', Subload.to_path('HTTPError')
73
+ assert_equal 'no_method_error', Subload.to_path('NoMethodError')
74
+ end
75
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subload
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 1
8
+ - 0
9
+ version: 1.1.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - James Tucker
@@ -9,39 +14,90 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-09-10 00:00:00 +01:00
17
+ date: 2010-03-17 00:00:00 +00:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: rdoc
21
+ name: hoe-doofus
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 0
30
+ - 0
31
+ version: 1.0.0
17
32
  type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: hoe-git
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
20
38
  requirements:
21
39
  - - ">="
22
40
  - !ruby/object:Gem::Version
23
- version: 2.4.3
24
- version:
41
+ segments:
42
+ - 1
43
+ - 3
44
+ - 0
45
+ version: 1.3.0
46
+ type: :development
47
+ version_requirements: *id002
25
48
  - !ruby/object:Gem::Dependency
26
- name: rake
49
+ name: hoe-gemcutter
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 1
57
+ - 0
58
+ - 0
59
+ version: 1.0.0
27
60
  type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: hoe
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
30
66
  requirements:
31
67
  - - ">="
32
68
  - !ruby/object:Gem::Version
33
- version: 0.8.7
34
- version:
35
- description: An autoload/require/custom loader wrapper
36
- email: raggi@rubyforge.org
69
+ segments:
70
+ - 2
71
+ - 3
72
+ - 3
73
+ version: 2.3.3
74
+ type: :development
75
+ version_requirements: *id004
76
+ description: |-
77
+ A handy dandy autoload / require / load helper for your rubies. Similar to
78
+ using[1], but with a few differences of opinion, and a bit shorter.
79
+
80
+ Basically, expand path is fine, up until a point. Sometimes there's no point
81
+ (i.e. when the load path already contains most of the path you're trying to
82
+ open). When you're writing libs that users might require sub parts with
83
+ 'libname/sub_part', then expand_path combined with say, rubygems, can lead to
84
+ double requires. Lets not do that. :-)
85
+
86
+ [1] http://github.com/smtlaissezfaire/using/
87
+ email:
88
+ - raggi@rubyforge.org
37
89
  executables: []
38
90
 
39
91
  extensions: []
40
92
 
41
93
  extra_rdoc_files:
42
- - README
94
+ - Manifest.txt
95
+ - CHANGELOG.rdoc
96
+ - README.rdoc
43
97
  files:
44
- - README
98
+ - CHANGELOG.rdoc
99
+ - Manifest.txt
100
+ - README.rdoc
45
101
  - Rakefile
46
102
  - examples/a.rb
47
103
  - examples/a/foo.rb
@@ -49,6 +105,7 @@ files:
49
105
  - examples/a/foo/baz.rb
50
106
  - examples/rails/loader.rb
51
107
  - lib/subload.rb
108
+ - subload.gemspec
52
109
  - test/test_subload.rb
53
110
  - test/test_subload/a.rb
54
111
  - test/test_subload/b.rb
@@ -58,37 +115,35 @@ files:
58
115
  - test/test_subload/f.rb
59
116
  - test/test_subload/f/a.rb
60
117
  has_rdoc: true
61
- homepage: http://libraggi.rubyforge.org/subload
118
+ homepage: http://rubygems.org/gems/subload
62
119
  licenses: []
63
120
 
64
121
  post_install_message:
65
122
  rdoc_options:
66
- - --line-numbers
67
- - --inline-source
68
- - --title
69
- - Subload
70
123
  - --main
71
- - README
124
+ - README.rdoc
72
125
  require_paths:
73
126
  - lib
74
127
  required_ruby_version: !ruby/object:Gem::Requirement
75
128
  requirements:
76
129
  - - ">="
77
130
  - !ruby/object:Gem::Version
131
+ segments:
132
+ - 0
78
133
  version: "0"
79
- version:
80
134
  required_rubygems_version: !ruby/object:Gem::Requirement
81
135
  requirements:
82
136
  - - ">="
83
137
  - !ruby/object:Gem::Version
138
+ segments:
139
+ - 0
84
140
  version: "0"
85
- version:
86
141
  requirements: []
87
142
 
88
143
  rubyforge_project: libraggi
89
- rubygems_version: 1.3.5
144
+ rubygems_version: 1.3.6
90
145
  signing_key:
91
- specification_version: 2
92
- summary: An autoload/require/custom loader wrapper
146
+ specification_version: 3
147
+ summary: A handy dandy autoload / require / load helper for your rubies
93
148
  test_files:
94
149
  - test/test_subload.rb
data/README DELETED
@@ -1,77 +0,0 @@
1
- subload
2
-
3
- A handy dandy autoload / require / load helper for your rubies. Similar to
4
- using[1], but with a few differences of opinion, and a bit shorter.
5
-
6
- Basically, expand path is fine, up until a point. Sometimes there's no point
7
- (i.e. when the load path already contains most of the path you're trying to
8
- open). When you're writing libs that users might require sub parts with
9
- 'libname/sub_part', then expand_path combined with say, rubygems, can lead to
10
- double requires. Lets not do that. :-)
11
-
12
- [1] http://github.com/smtlaissezfaire/using/
13
-
14
- TODO - replace me... more...
15
-
16
- Examples:
17
-
18
- module A
19
-
20
- # The nominal use case, A.autoload :B, 'a/b'
21
- # You rarely need much else!
22
- subload :B
23
-
24
- # A custom path, A.autoload :C, 'a/c'
25
- subload :C, :path => 'a/c'
26
- # For example when 'a/c' defines several constants:
27
- subload :Ca, :path => 'a/c'
28
- subload :Cb, :path => 'a/c'
29
-
30
- # An expanded path, A.autoload :D, File.join(Dir.pwd, 'a/d')
31
- subload :D, :expand_path => true
32
- # This has interesting uses in combination, although not generally
33
- # recommended:
34
- subload :E, :path => '../../path/e', :expand_path => true
35
-
36
- # Explicitly override the mode, for this call only, A.require 'a/f'
37
- subload :F, :mode => :require
38
-
39
- # Set the mode for all subsiquent calls to subload in this class/module
40
- subload_with :require
41
- subload :G # => require 'a/g'
42
- subload :H # => require 'a/h'
43
-
44
- # Other features intended for library and framework developers are described
45
- # in the class documentation.
46
-
47
- end
48
-
49
- Some Notes:
50
-
51
- * File.expand_path: Expand path is good if you're traversing up directories.
52
- It is bad if you're loading something within a library that is on the load
53
- path. If the library is on the load path, and you require files with an
54
- expanded path, there is the likelihood of a double require when other code
55
- contains a require that is expectant of the load path modification.
56
-
57
- * Frameworks: Sometimes require explicit load order control. In these cases,
58
- overriding the loader and either tracking, or performing stateful operations
59
- works well.
60
-
61
- * Abusive use of override_mode: Override mode is potentially dangerous. As per
62
- the other documentation, override mode should be reserved for use in
63
- application code only. Libraries setting override mode could cause
64
- additional failure cases for foreign libraries, although gratuitous addition
65
- of loading mechanisms is not recommended.
66
-
67
- * Generated code loading: When you're doing code generation, sometimes it is
68
- desirable to have tow locations from which to load a class. One will contain
69
- custom class defintions, and the other will contain generated definitions.
70
- Using a custom loader, one can then utilise a single subload statement to
71
- correctly load both files.
72
-
73
- TODO Chaotic Overloading
74
-
75
- Consider vertical vs. horizontal delegation rules and use cases for new
76
- loaders in non-framework libraries that perform custom loads such that it is
77
- easy to say "invoke the current load mode with the following options".