aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/dependencies.rb
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2006-09-03 23:08:43 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2006-09-03 23:08:43 +0000
commit0f956d1d6d7afc7beaa9816815b43d2f9312eddf (patch)
treecb3c66aa8617031b1033104cc0f84ad0a17ec642 /actionpack/lib/action_controller/dependencies.rb
parent5048aa9831a4ecda14eeb02f3a58157efa8f608f (diff)
downloadrails-0f956d1d6d7afc7beaa9816815b43d2f9312eddf.tar.gz
rails-0f956d1d6d7afc7beaa9816815b43d2f9312eddf.tar.bz2
rails-0f956d1d6d7afc7beaa9816815b43d2f9312eddf.zip
Deprecated all of ActionController::Dependencies. All dependency loading is now handled from Active Support [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4948 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib/action_controller/dependencies.rb')
-rw-r--r--actionpack/lib/action_controller/dependencies.rb82
1 files changed, 0 insertions, 82 deletions
diff --git a/actionpack/lib/action_controller/dependencies.rb b/actionpack/lib/action_controller/dependencies.rb
deleted file mode 100644
index d316552f49..0000000000
--- a/actionpack/lib/action_controller/dependencies.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-module ActionController #:nodoc:
- module Dependencies #:nodoc:
- def self.included(base)
- base.extend(ClassMethods)
- end
-
- # Dependencies control what classes are needed for the controller to run its course. This is an alternative to doing explicit
- # +require+ statements that bring a number of benefits. It's more succinct, communicates what type of dependency we're talking about,
- # can trigger special behavior (as in the case of +observer+), and enables Rails to be clever about reloading in cached environments
- # like FCGI. Example:
- #
- # class ApplicationController < ActionController::Base
- # model :account, :company, :person, :project, :category
- # helper :access_control
- # service :notifications, :billings
- # observer :project_change_observer
- # end
- #
- # Please note that a controller like ApplicationController will automatically attempt to require_dependency on a model of its
- # singuralized name and a helper of its name. If nothing is found, no error is raised. This is especially useful for concrete
- # controllers like PostController:
- #
- # class PostController < ApplicationController
- # # model :post (already required)
- # # helper :post (already required)
- # end
- #
- # Also note, that if the models follow the pattern of just 1 class per file in the form of MyClass => my_class.rb, then these
- # classes don't have to be required as Active Support will auto-require them.
- module ClassMethods #:nodoc:
- # Specifies a variable number of models that this controller depends on. Models are normally Active Record classes or a similar
- # backend for modelling entity classes.
- def model(*models)
- require_dependencies(:model, models)
- depend_on(:model, models)
- end
-
- # Specifies a variable number of services that this controller depends on. Services are normally singletons or factories, like
- # Action Mailer service or a Payment Gateway service.
- def service(*services)
- require_dependencies(:service, services)
- depend_on(:service, services)
- end
-
- # Specifies a variable number of observers that are to govern when this controller is handling actions. The observers will
- # automatically have .instance called on them to make them active on assignment.
- def observer(*observers)
- require_dependencies(:observer, observers)
- depend_on(:observer, observers)
- instantiate_observers(observers)
- end
-
- # Returns an array of symbols that specify the dependencies on a given layer. For the example at the top, calling
- # <tt>ApplicationController.dependencies_on(:model)</tt> would return <tt>[:account, :company, :person, :project, :category]</tt>
- def dependencies_on(layer)
- read_inheritable_attribute("#{layer}_dependencies")
- end
-
- def depend_on(layer, dependencies) #:nodoc:
- write_inheritable_array("#{layer}_dependencies", dependencies)
- end
-
- private
- def instantiate_observers(observers)
- observers.flatten.each { |observer| Object.const_get(Inflector.classify(observer.to_s)).instance }
- end
-
- def require_dependencies(layer, dependencies)
- dependencies.flatten.each do |dependency|
- begin
- require_dependency(dependency.to_s)
- rescue LoadError => e
- raise LoadError.new("Missing #{layer} #{dependency}.rb").copy_blame!(e)
- rescue Exception => exception # error from loaded file
- exception.blame_file! "=> #{layer} #{dependency}.rb"
- raise
- end
- end
- end
- end
- end
-end