aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyan Bigg <radarlistener@gmail.com>2010-04-09 17:52:34 +1000
committerRyan Bigg <radarlistener@gmail.com>2010-04-09 17:52:34 +1000
commit11f838dc2e6a32a9e55e77f2c1114dbbfa6af6b2 (patch)
treea4df701a455cdbc56457857e8d1f2da7e1b05638
parent395dbd53ed87aa8c7e06ffeca9c80af6d50a9f18 (diff)
downloadrails-11f838dc2e6a32a9e55e77f2c1114dbbfa6af6b2.tar.gz
rails-11f838dc2e6a32a9e55e77f2c1114dbbfa6af6b2.tar.bz2
rails-11f838dc2e6a32a9e55e77f2c1114dbbfa6af6b2.zip
Expansion on require method from runtime.rb
-rw-r--r--railties/guides/source/initialization.textile37
1 files changed, 36 insertions, 1 deletions
diff --git a/railties/guides/source/initialization.textile b/railties/guides/source/initialization.textile
index 7013c3c324..d8d119f608 100644
--- a/railties/guides/source/initialization.textile
+++ b/railties/guides/source/initialization.textile
@@ -2229,9 +2229,44 @@ The second +require+ method here:
load(gemfile).require(*groups)
</ruby>
-Is defined on _bundler/runtime.rb_
+Is defined on _bundler/runtime.rb_:
+<ruby>
+ def require(*groups)
+ groups.map! { |g| g.to_sym }
+ groups = [:default] if groups.empty?
+ autorequires = autorequires_for_groups(*groups)
+
+ groups.each do |group|
+ (autorequires[group] || [[]]).each do |path, explicit|
+ if explicit
+ Kernel.require(path)
+ else
+ begin
+ Kernel.require(path)
+ rescue LoadError
+ end
+ end
+ end
+ end
+ end
+</ruby>
+
+This method does TODO: Describe what magic this undertakes.
+The first method to be called here is +autorequires_for_groups+:
+
+<ruby>
+ def autorequires_for_groups(*groups)
+ groups.map! { |g| g.to_sym }
+ autorequires = Hash.new { |h,k| h[k] = [] }
+
+ ordered_deps = []
+ specs_for(*groups).each do |g|
+ dep = @definition.dependencies.find{|d| d.name == g.name }
+ ordered_deps << dep if dep && !ordered_deps.include?(dep)
+ end
+</ruby>
h3. Firing it up!