From 0b554201bb2deb6bbb23de9b00aebd53b134921b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 16 Dec 2004 17:45:37 +0000 Subject: Updated documentation git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@194 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/base.rb | 2 +- actionpack/lib/action_controller/cookies.rb | 16 +++++---- actionpack/lib/action_controller/dependencies.rb | 31 +++++++++++++++-- actionpack/lib/action_controller/helpers.rb | 2 +- actionpack/lib/action_controller/rescue.rb | 2 +- actionpack/lib/action_controller/test_process.rb | 39 ++++++++++++---------- actionpack/lib/action_view.rb | 9 ----- actionpack/lib/action_view/base.rb | 2 +- .../action_view/helpers/active_record_helper.rb | 6 ++-- actionpack/lib/action_view/helpers/form_helper.rb | 6 ++-- actionpack/lib/action_view/helpers/tag_helper.rb | 10 +++--- actionpack/lib/action_view/helpers/url_helper.rb | 8 ++--- 12 files changed, 80 insertions(+), 53 deletions(-) diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index 8bcf12a1a9..1eb32d2152 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -58,7 +58,7 @@ module ActionController #:nodoc: # accessing the environment hash, like this: # # def hello_ip - # location = @request.env["REMOTE_ADDRESS"] + # location = @request.env["REMOTE_IP"] # render_text "Hello stranger from #{location}" # end # diff --git a/actionpack/lib/action_controller/cookies.rb b/actionpack/lib/action_controller/cookies.rb index 6b9954f84d..76ca12e913 100644 --- a/actionpack/lib/action_controller/cookies.rb +++ b/actionpack/lib/action_controller/cookies.rb @@ -10,15 +10,19 @@ module ActionController #:nodoc: # # cookies["user_name"] # => "david" # cookies.size # => 2 + # + # Example for deleting: + # + # cookies.delete "user_name" # # All the option symbols for setting cookies are: # - # value:: the cookie's value or list of values (as an array). - # path:: the path for which this cookie applies. Defaults to the root of the application. - # domain:: the domain for which this cookie applies. - # expires:: the time at which this cookie expires, as a +Time+ object. - # secure:: whether this cookie is a secure cookie or not (default to false). - # Secure cookies are only transmitted to HTTPS servers. + # * value - the cookie's value or list of values (as an array). + # * path - the path for which this cookie applies. Defaults to the root of the application. + # * domain - the domain for which this cookie applies. + # * expires - the time at which this cookie expires, as a +Time+ object. + # * secure - whether this cookie is a secure cookie or not (default to false). + # Secure cookies are only transmitted to HTTPS servers. module Cookies # Returns the cookie container, which operates as described above. def cookies diff --git a/actionpack/lib/action_controller/dependencies.rb b/actionpack/lib/action_controller/dependencies.rb index 6680d6cffd..d17369e5e1 100644 --- a/actionpack/lib/action_controller/dependencies.rb +++ b/actionpack/lib/action_controller/dependencies.rb @@ -20,33 +20,60 @@ module ActionController #:nodoc: 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 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 module ClassMethods # Loads the file_name if reload_dependencies is true or requires if it's false. def require_dependency(file_name) reload_dependencies ? silence_warnings { load("#{file_name}.rb") } : require(file_name) end + # 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 - def dependencies_on(layer) # :nodoc: + # Returns an array of symbols that specify the dependencies on a given layer. For the example at the top, calling + # ApplicationController.dependencies_on(:model) would return [:account, :company, :person, :project, :category] + def dependencies_on(layer) read_inheritable_attribute("#{layer}_dependencies") end - def depend_on(layer, dependencies) + def depend_on(layer, dependencies) #:nodoc: write_inheritable_array("#{layer}_dependencies", dependencies) end diff --git a/actionpack/lib/action_controller/helpers.rb b/actionpack/lib/action_controller/helpers.rb index 3def790cc6..06bbd56283 100644 --- a/actionpack/lib/action_controller/helpers.rb +++ b/actionpack/lib/action_controller/helpers.rb @@ -31,7 +31,7 @@ module ActionController #:nodoc: # Makes all the (instance) methods in the helper module available to templates rendered through this controller. # See ActionView::Helpers (link:classes/ActionView/Helpers.html) for more about making your own helper modules # available to the templates. - def add_template_helper(helper_module) + def add_template_helper(helper_module) #:nodoc: template_class.class_eval "include #{helper_module}" end diff --git a/actionpack/lib/action_controller/rescue.rb b/actionpack/lib/action_controller/rescue.rb index e1ba86be6e..9d7c3d95b2 100644 --- a/actionpack/lib/action_controller/rescue.rb +++ b/actionpack/lib/action_controller/rescue.rb @@ -15,7 +15,7 @@ module ActionController #:nodoc: end end - module ClassMethods + module ClassMethods #:nodoc: def process_with_exception(request, response, exception) new.process(request, response, :rescue_action, exception) end diff --git a/actionpack/lib/action_controller/test_process.rb b/actionpack/lib/action_controller/test_process.rb index 314f087f6f..3590d29cd3 100644 --- a/actionpack/lib/action_controller/test_process.rb +++ b/actionpack/lib/action_controller/test_process.rb @@ -187,25 +187,28 @@ end end end -class Test::Unit::TestCase #:nodoc: - private - # execute the request and set/volley the response - def process(action, parameters = nil, session = nil) - @request.env['REQUEST_METHOD'] ||= "GET" - @request.action = action.to_s - @request.parameters.update(parameters) unless parameters.nil? - @request.session = ActionController::TestSession.new(session) unless session.nil? - @controller.process(@request, @response) - end +module Test + module Unit + class TestCase #:nodoc: + private + # execute the request and set/volley the response + def process(action, parameters = nil, session = nil) + @request.env['REQUEST_METHOD'] ||= "GET" + @request.action = action.to_s + @request.parameters.update(parameters) unless parameters.nil? + @request.session = ActionController::TestSession.new(session) unless session.nil? + @controller.process(@request, @response) + end - # execute the request simulating a specific http method and set/volley the response - %w( get post put delete head ).each do |method| - class_eval <<-EOV - def #{method}(action, parameters = nil, session = nil) - @request.env['REQUEST_METHOD'] = "#{method.upcase}" - process(action, parameters, session) + # execute the request simulating a specific http method and set/volley the response + %w( get post put delete head ).each do |method| + class_eval <<-EOV + def #{method}(action, parameters = nil, session = nil) + @request.env['REQUEST_METHOD'] = "#{method.upcase}" + process(action, parameters, session) + end + EOV end - EOV end - + end end \ No newline at end of file diff --git a/actionpack/lib/action_view.rb b/actionpack/lib/action_view.rb index c39765d436..4caf9d8236 100644 --- a/actionpack/lib/action_view.rb +++ b/actionpack/lib/action_view.rb @@ -28,15 +28,6 @@ rescue LoadError # RubyGems is not available, use included Builder $:.unshift(File.dirname(__FILE__) + "/action_view/vendor") require 'action_view/vendor/builder' -ensure - # Temporary patch until it's in Builder 1.2.2 - class BlankSlate - class << self - def hide(name) - undef_method name if instance_methods.include?(name) and name !~ /^(__|instance_eval)/ - end - end - end end require 'action_view/base' diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index 24c33cd11d..ad809e2bff 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -141,7 +141,7 @@ module ActionView #:nodoc: end end - def self.controller_delegate(*methods) + def self.controller_delegate(*methods)#:nodoc: methods.flatten.each do |method| class_eval <<-end_eval def #{method}(*args, &block) diff --git a/actionpack/lib/action_view/helpers/active_record_helper.rb b/actionpack/lib/action_view/helpers/active_record_helper.rb index a2b5a8b004..07ede179e6 100644 --- a/actionpack/lib/action_view/helpers/active_record_helper.rb +++ b/actionpack/lib/action_view/helpers/active_record_helper.rb @@ -83,9 +83,9 @@ module ActionView # Returns a string with a div containing all the error messages for the object located as an instance variable by the name # of object_name. This div can be tailored by the following options: # - # ::header_tag: Used for the header of the error div (default: h2) - # ::id: The id of the error div (default: errorExplanation) - # ::class: The class of the error div (default: errorExplanation) + # * header_tag - Used for the header of the error div (default: h2) + # * id - The id of the error div (default: errorExplanation) + # * class - The class of the error div (default: errorExplanation) def error_messages_for(object_name, options={}) object = instance_eval "@#{object_name}" unless object.errors.empty? diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb index 0a406cfc47..253b389a79 100644 --- a/actionpack/lib/action_view/helpers/form_helper.rb +++ b/actionpack/lib/action_view/helpers/form_helper.rb @@ -91,11 +91,13 @@ module ActionView # # Example (call, result). Imagine that @post.validated? returns 1: # check_box("post", "validated") - # + # + # # # Example (call, result). Imagine that @puppy.gooddog returns no: # check_box("puppy", "gooddog", {}, "yes", "no") - # + # + # def check_box(object, method, options = {}, checked_value = "1", unchecked_value = "0") InstanceTag.new(object, method, self).to_check_box_tag(options, checked_value, unchecked_value) end diff --git a/actionpack/lib/action_view/helpers/tag_helper.rb b/actionpack/lib/action_view/helpers/tag_helper.rb index 6139943567..bf81d5d909 100644 --- a/actionpack/lib/action_view/helpers/tag_helper.rb +++ b/actionpack/lib/action_view/helpers/tag_helper.rb @@ -7,16 +7,16 @@ module ActionView include ERB::Util # Examples: - # * tag("br") =>
- # * tag("input", { "type" => "text"}) => + # * tag("br") =>
+ # * tag("input", { "type" => "text"}) => def tag(name, options = {}, open = false) "<#{name}#{tag_options(options)}" + (open ? ">" : " />") end # Examples: - # * content_tag("p", "Hello world!") =>

Hello world!

- # * content_tag("div", content_tag("p", "Hello world!"), "class" => "strong") => - #

Hello world!

+ # * content_tag("p", "Hello world!") =>

Hello world!

+ # * content_tag("div", content_tag("p", "Hello world!"), "class" => "strong") => + #

Hello world!

def content_tag(name, content, options = {}) "<#{name}#{tag_options(options)}>#{content}" end diff --git a/actionpack/lib/action_view/helpers/url_helper.rb b/actionpack/lib/action_view/helpers/url_helper.rb index f0eed442cf..127c7a42d5 100644 --- a/actionpack/lib/action_view/helpers/url_helper.rb +++ b/actionpack/lib/action_view/helpers/url_helper.rb @@ -30,10 +30,10 @@ module ActionView # get a link tag that just points without consideration. The html_options works jointly for the image and ahref tag by # letting the following special values enter the options on the image and the rest goes to the ahref: # - # ::alt: If no alt text is given, the file name part of the +src+ is used (capitalized and without the extension) - # ::size: Supplied as "XxY", so "30x45" becomes width="30" and height="45" - # ::border: Is set to 0 by default - # ::align: Sets the alignment, no special features + # * alt - If no alt text is given, the file name part of the +src+ is used (capitalized and without the extension) + # * size - Supplied as "XxY", so "30x45" becomes width="30" and height="45" + # * border - Is set to 0 by default + # * align - Sets the alignment, no special features # # The +src+ can be supplied as a... # * full path, like "/my_images/image.gif" -- cgit v1.2.3