aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/lazy_load_hooks.rb
diff options
context:
space:
mode:
authorwycats <wycats@gmail.com>2010-03-07 06:24:30 -0800
committerwycats <wycats@gmail.com>2010-03-07 06:24:30 -0800
commit39d6f9e112f2320d8c2006ee3bcc160cfa761d0a (patch)
tree5c3e4434a5d76ceb7b8fd088d62809ef9a50f025 /activesupport/lib/active_support/lazy_load_hooks.rb
parenta424f199a9143e7ea451ba6f5e7dc54eb6103988 (diff)
downloadrails-39d6f9e112f2320d8c2006ee3bcc160cfa761d0a.tar.gz
rails-39d6f9e112f2320d8c2006ee3bcc160cfa761d0a.tar.bz2
rails-39d6f9e112f2320d8c2006ee3bcc160cfa761d0a.zip
Make many parts of Rails lazy. In order to facilitate this,
add lazy_load_hooks.rb, which allows us to declare code that should be run at some later time. For instance, this allows us to defer requiring ActiveRecord::Base at boot time purely to apply configuration. Instead, we register a hook that should apply configuration once ActiveRecord::Base is loaded. With these changes, brings down total boot time of a new app to 300ms in production and 400ms in dev. TODO: rename base_hook
Diffstat (limited to 'activesupport/lib/active_support/lazy_load_hooks.rb')
-rw-r--r--activesupport/lib/active_support/lazy_load_hooks.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/lazy_load_hooks.rb b/activesupport/lib/active_support/lazy_load_hooks.rb
new file mode 100644
index 0000000000..36acfda524
--- /dev/null
+++ b/activesupport/lib/active_support/lazy_load_hooks.rb
@@ -0,0 +1,25 @@
+module ActiveSupport
+ module LazyLoadHooks
+ def _setup_base_hooks
+ @base_hooks ||= Hash.new {|h,k| h[k] = [] }
+ @base ||= {}
+ end
+
+ def base_hook(name = nil, &block)
+ _setup_base_hooks
+
+ if base = @base[name]
+ base.instance_eval(&block)
+ else
+ @base_hooks[name] << block
+ end
+ end
+
+ def run_base_hooks(base, name = nil)
+ _setup_base_hooks
+
+ @base_hooks[name].each { |hook| base.instance_eval(&hook) } if @base_hooks
+ @base[name] = base
+ end
+ end
+end \ No newline at end of file