1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge branch 'master' of github.com:lifo/docrails

This commit is contained in:
Vijay Dev 2012-04-18 00:10:06 +05:30
commit 5b336ff443
11 changed files with 63 additions and 27 deletions

View file

@ -99,7 +99,7 @@ module HTML
self.allowed_protocols = Set.new(%w(ed2k ftp http https irc mailto news gopher nntp telnet webcal xmpp callto self.allowed_protocols = Set.new(%w(ed2k ftp http https irc mailto news gopher nntp telnet webcal xmpp callto
feed svn urn aim rsync tag ssh sftp rtsp afs)) feed svn urn aim rsync tag ssh sftp rtsp afs))
# Specifies the default Set of acceptable css keywords that #sanitize and #sanitize_css will accept. # Specifies the default Set of acceptable css properties that #sanitize and #sanitize_css will accept.
self.allowed_css_properties = Set.new(%w(azimuth background-color border-bottom-color border-collapse self.allowed_css_properties = Set.new(%w(azimuth background-color border-bottom-color border-collapse
border-color border-left-color border-right-color border-top-color clear color cursor direction display border-color border-left-color border-right-color border-top-color clear color cursor direction display
elevation float font font-family font-size font-style font-variant font-weight height letter-spacing line-height elevation float font font-family font-size font-style font-variant font-weight height letter-spacing line-height

View file

@ -29,7 +29,7 @@ module ActionDispatch # :nodoc:
# class DemoControllerTest < ActionDispatch::IntegrationTest # class DemoControllerTest < ActionDispatch::IntegrationTest
# def test_print_root_path_to_console # def test_print_root_path_to_console
# get('/') # get('/')
# puts @response.body # puts response.body
# end # end
# end # end
class Response class Response

View file

@ -17,7 +17,7 @@ module ActionDispatch
# def create # def create
# # save post # # save post
# flash[:notice] = "Post successfully created" # flash[:notice] = "Post successfully created"
# redirect_to posts_path(@post) # redirect_to @post
# end # end
# #
# def show # def show

View file

@ -67,10 +67,13 @@ module ActionDispatch
# params, depending of how many arguments your block accepts. A string is required as a # params, depending of how many arguments your block accepts. A string is required as a
# return value. # return value.
# #
# match 'jokes/:number', :to => redirect do |params, request| # match 'jokes/:number', :to => redirect { |params, request|
# path = (params[:number].to_i.even? ? "/wheres-the-beef" : "/i-love-lamp") # path = (params[:number].to_i.even? ? "wheres-the-beef" : "i-love-lamp")
# "http://#{request.host_with_port}/#{path}" # "http://#{request.host_with_port}/#{path}"
# end # }
#
# Note that the `do end` syntax for the redirect block wouldn't work, as Ruby would pass
# the block to `match` instead of `redirect`. Use `{ ... }` instead.
# #
# The options version of redirect allows you to supply only the parts of the url which need # The options version of redirect allows you to supply only the parts of the url which need
# to change, it also supports interpolation of the path similar to the first example. # to change, it also supports interpolation of the path similar to the first example.

View file

@ -130,12 +130,12 @@ module ActiveModel
# has more than one error message, yields once for each error message. # has more than one error message, yields once for each error message.
# #
# p.errors.add(:name, "can't be blank") # p.errors.add(:name, "can't be blank")
# p.errors.each do |attribute, errors_array| # p.errors.each do |attribute, error|
# # Will yield :name and "can't be blank" # # Will yield :name and "can't be blank"
# end # end
# #
# p.errors.add(:name, "must be specified") # p.errors.add(:name, "must be specified")
# p.errors.each do |attribute, errors_array| # p.errors.each do |attribute, error|
# # Will yield :name and "can't be blank" # # Will yield :name and "can't be blank"
# # then yield :name and "must be specified" # # then yield :name and "must be specified"
# end # end

View file

@ -2,11 +2,11 @@ module ActiveModel
# == Active Model Basic Model # == Active Model Basic Model
# #
# Includes the required interface for an object to interact with +ActionPack+, # Includes the required interface for an object to interact with <tt>ActionPack</tt>,
# using different +ActiveModel+ modules. It includes model name introspections, # using different <tt>ActiveModel</tt> modules. It includes model name introspections,
# conversions, translations and validations. Besides that, it allows you to # conversions, translations and validations. Besides that, it allows you to
# initialize the object with a hash of attributes, pretty much like # initialize the object with a hash of attributes, pretty much like
# +ActiveRecord+ does. # <tt>ActiveRecord</tt> does.
# #
# A minimal implementation could be: # A minimal implementation could be:
# #
@ -19,8 +19,8 @@ module ActiveModel
# person.name # => 'bob' # person.name # => 'bob'
# person.age # => 18 # person.age # => 18
# #
# Note that, by default, +ActiveModel::Model+ implements +persisted?+ to # Note that, by default, <tt>ActiveModel::Model</tt> implements <tt>persisted?</tt> to
# return +false+, which is the most common case. You may want to override it # return <tt>false</tt>, which is the most common case. You may want to override it
# in your class to simulate a different scenario: # in your class to simulate a different scenario:
# #
# class Person # class Person
@ -35,14 +35,14 @@ module ActiveModel
# person = Person.new(:id => 1, :name => 'bob') # person = Person.new(:id => 1, :name => 'bob')
# person.persisted? # => true # person.persisted? # => true
# #
# Also, if for some reason you need to run code on +initialize+, make sure you # Also, if for some reason you need to run code on <tt>initialize</tt>, make sure you
# call super if you want the attributes hash initialization to happen. # call super if you want the attributes hash initialization to happen.
# #
# class Person # class Person
# include ActiveModel::Model # include ActiveModel::Model
# attr_accessor :id, :name, :omg # attr_accessor :id, :name, :omg
# #
# def initialize(attributes) # def initialize(attributes={})
# super # super
# @omg ||= true # @omg ||= true
# end # end
@ -52,7 +52,7 @@ module ActiveModel
# person.omg # => true # person.omg # => true
# #
# For more detailed information on other functionalities available, please refer # For more detailed information on other functionalities available, please refer
# to the specific modules included in +ActiveModel::Model+ (see below). # to the specific modules included in <tt>ActiveModel::Model</tt> (see below).
module Model module Model
def self.included(base) def self.included(base)
base.class_eval do base.class_eval do

View file

@ -8,7 +8,8 @@ module ActiveModel
# Provides an interface for any class to have <tt>before_validation</tt> and # Provides an interface for any class to have <tt>before_validation</tt> and
# <tt>after_validation</tt> callbacks. # <tt>after_validation</tt> callbacks.
# #
# First, extend ActiveModel::Callbacks from the class you are creating: # First, include ActiveModel::Validations::Callbacks from the class you are
# creating:
# #
# class MyModel # class MyModel
# include ActiveModel::Validations::Callbacks # include ActiveModel::Validations::Callbacks

View file

@ -376,7 +376,7 @@ module ActiveRecord
# Note: SQLite doesn't support index length # Note: SQLite doesn't support index length
# #
# ====== Creating an index with a sort order (desc or asc, asc is the default) # ====== Creating an index with a sort order (desc or asc, asc is the default)
# add_index(:accounts, [:branch_id, :party_id, :surname], :order => {:branch_id => :desc, :part_id => :asc}) # add_index(:accounts, [:branch_id, :party_id, :surname], :order => {:branch_id => :desc, :party_id => :asc})
# generates # generates
# CREATE INDEX by_branch_desc_party ON accounts(branch_id DESC, party_id ASC, surname) # CREATE INDEX by_branch_desc_party ON accounts(branch_id DESC, party_id ASC, surname)
# #

View file

@ -4,7 +4,7 @@ require 'active_support/notifications/fanout'
module ActiveSupport module ActiveSupport
# = Notifications # = Notifications
# #
# +ActiveSupport::Notifications+ provides an instrumentation API for Ruby. # <tt>ActiveSupport::Notifications</tt> provides an instrumentation API for Ruby.
# #
# == Instrumenters # == Instrumenters
# #
@ -44,26 +44,53 @@ module ActiveSupport
# event.duration # => 10 (in milliseconds) # event.duration # => 10 (in milliseconds)
# event.payload # => { :extra => :information } # event.payload # => { :extra => :information }
# #
# The block in the +subscribe+ call gets the name of the event, start # The block in the <tt>subscribe</tt> call gets the name of the event, start
# timestamp, end timestamp, a string with a unique identifier for that event # timestamp, end timestamp, a string with a unique identifier for that event
# (something like "535801666f04d0298cd6"), and a hash with the payload, in # (something like "535801666f04d0298cd6"), and a hash with the payload, in
# that order. # that order.
# #
# If an exception happens during that particular instrumentation the payload will # If an exception happens during that particular instrumentation the payload will
# have a key +:exception+ with an array of two elements as value: a string with # have a key <tt>:exception</tt> with an array of two elements as value: a string with
# the name of the exception class, and the exception message. # the name of the exception class, and the exception message.
# #
# As the previous example depicts, the class +ActiveSupport::Notifications::Event+ # As the previous example depicts, the class <tt>ActiveSupport::Notifications::Event</tt>
# is able to take the arguments as they come and provide an object-oriented # is able to take the arguments as they come and provide an object-oriented
# interface to that data. # interface to that data.
# #
# It is also possible to pass an object as the second parameter passed to the
# <tt>subscribe</tt> method instead of a block:
#
# module ActionController
# class PageRequest
# def call(name, started, finished, unique_id, payload)
# Rails.logger.debug ["notification:", name, started, finished, unique_id, payload].join(" ")
# end
# end
# end
#
# ActiveSupport::Notifications.subscribe('process_action.action_controller', ActionController::PageRequest.new)
#
# resulting in the following output within the logs including a hash with the payload:
#
# notification: process_action.action_controller 2012-04-13 01:08:35 +0300 2012-04-13 01:08:35 +0300 af358ed7fab884532ec7 {
# :controller=>"Devise::SessionsController",
# :action=>"new",
# :params=>{"action"=>"new", "controller"=>"devise/sessions"},
# :format=>:html,
# :method=>"GET",
# :path=>"/login/sign_in",
# :status=>200,
# :view_runtime=>279.3080806732178,
# :db_runtime=>40.053
# }
#
# You can also subscribe to all events whose name matches a certain regexp: # You can also subscribe to all events whose name matches a certain regexp:
# #
# ActiveSupport::Notifications.subscribe(/render/) do |*args| # ActiveSupport::Notifications.subscribe(/render/) do |*args|
# ... # ...
# end # end
# #
# and even pass no argument to +subscribe+, in which case you are subscribing # and even pass no argument to <tt>subscribe</tt>, in which case you are subscribing
# to all events. # to all events.
# #
# == Temporary Subscriptions # == Temporary Subscriptions

View file

@ -539,7 +539,9 @@ And this will give you a single +Order+ object for each date where there are ord
The SQL that would be executed would be something like this: The SQL that would be executed would be something like this:
<sql> <sql>
SELECT date(created_at) as ordered_date, sum(price) as total_price FROM orders GROUP BY date(created_at) SELECT date(created_at) as ordered_date, sum(price) as total_price
FROM orders
GROUP BY date(created_at)
</sql> </sql>
h3. Having h3. Having
@ -555,7 +557,10 @@ Order.select("date(created_at) as ordered_date, sum(price) as total_price").grou
The SQL that would be executed would be something like this: The SQL that would be executed would be something like this:
<sql> <sql>
SELECT date(created_at) as ordered_date, sum(price) as total_price FROM orders GROUP BY date(created_at) HAVING sum(price) > 100 SELECT date(created_at) as ordered_date, sum(price) as total_price
FROM orders
GROUP BY date(created_at)
HAVING sum(price) > 100
</sql> </sql>
This will return single order objects for each day, but only those that are ordered more than $100 in a day. This will return single order objects for each day, but only those that are ordered more than $100 in a day.
@ -829,7 +834,7 @@ SELECT categories.* FROM categories
INNER JOIN posts ON posts.category_id = categories.id INNER JOIN posts ON posts.category_id = categories.id
</sql> </sql>
Or, in English: "return a Category object for all categories with posts". Note that you will see duplicate categories if more than one post has the same category. If you want unique categories, you can use Category.joins(:post).select("distinct(categories.id)"). Or, in English: "return a Category object for all categories with posts". Note that you will see duplicate categories if more than one post has the same category. If you want unique categories, you can use Category.joins(:posts).select("distinct(categories.id)").
h5. Joining Multiple Associations h5. Joining Multiple Associations

View file

@ -779,7 +779,7 @@ Both migrations work for Alice.
Bob comes back from vacation and: Bob comes back from vacation and:
# Updates the source - which contains both migrations and the latests version of # Updates the source - which contains both migrations and the latest version of
the Product model. the Product model.
# Runs outstanding migrations with +rake db:migrate+, which # Runs outstanding migrations with +rake db:migrate+, which
includes the one that updates the +Product+ model. includes the one that updates the +Product+ model.