Skip to content

Commit

Permalink
Deprecated all of ActionController::Dependencies. All dependency load…
Browse files Browse the repository at this point in the history
…ing is now handled from Active Support [DHH]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4948 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information
dhh committed Sep 3, 2006
1 parent 5048aa9 commit 0f956d1
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 25 deletions.
2 changes: 2 additions & 0 deletions actionpack/CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
*SVN*

* Deprecated all of ActionController::Dependencies. All dependency loading is now handled from Active Support [DHH]

* Added assert_select* for CSS selector-based testing (deprecates assert_tag) #5936 [assaf.arkin@gmail.com]

* radio_button_tag generates unique id attributes. #3353 [Bob Silva, somekool@gmail.com]
Expand Down
2 changes: 1 addition & 1 deletion actionpack/lib/action_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
require 'action_controller/flash'
require 'action_controller/filters'
require 'action_controller/layout'
require 'action_controller/dependencies'
require 'action_controller/deprecated_dependencies'
require 'action_controller/mime_responds'
require 'action_controller/pagination'
require 'action_controller/scaffolding'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,23 @@ 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.
# Deprecated module. The responsibility of loading dependencies belong with Active Support now.
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
deprecate :model

# 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
deprecate :service

# 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.
Expand All @@ -49,16 +29,19 @@ def observer(*observers)
depend_on(:observer, observers)
instantiate_observers(observers)
end
deprecate :observer

# 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

deprecate :dependencies_on

def depend_on(layer, dependencies) #:nodoc:
write_inheritable_array("#{layer}_dependencies", dependencies)
end
deprecate :depend_on

private
def instantiate_observers(observers)
Expand Down

0 comments on commit 0f956d1

Please sign in to comment.