提交 9d5bc3c2 编写于 作者: V Vijay Dev

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

module ActionDispatch module ActionDispatch
module Http module Http
# Provides access to the request's HTTP headers from the environment.
#
# env = { "CONTENT_TYPE" => "text/plain" }
# headers = ActionDispatch::Http::Headers.new(env)
# headers["Content-Type"] # => "text/plain"
class Headers class Headers
CGI_VARIABLES = %w( CGI_VARIABLES = %w(
CONTENT_TYPE CONTENT_LENGTH CONTENT_TYPE CONTENT_LENGTH
...@@ -14,14 +19,16 @@ class Headers ...@@ -14,14 +19,16 @@ class Headers
include Enumerable include Enumerable
attr_reader :env attr_reader :env
def initialize(env = {}) def initialize(env = {}) # :nodoc:
@env = env @env = env
end end
# Returns the value for the given key mapped to @env.
def [](key) def [](key)
@env[env_name(key)] @env[env_name(key)]
end end
# Sets the given value for the key mapped to @env.
def []=(key, value) def []=(key, value)
@env[env_name(key)] = value @env[env_name(key)] = value
end end
...@@ -31,6 +38,13 @@ def key?(key) ...@@ -31,6 +38,13 @@ def key?(key)
end end
alias :include? :key? alias :include? :key?
# Returns the value for the given key mapped to @env.
#
# If the key is not found and an optional code block is not provided,
# raises a <tt>KeyError</tt> exception.
#
# If the code block is provided, then it will be run and
# its result returned.
def fetch(key, *args, &block) def fetch(key, *args, &block)
@env.fetch env_name(key), *args, &block @env.fetch env_name(key), *args, &block
end end
...@@ -39,12 +53,17 @@ def each(&block) ...@@ -39,12 +53,17 @@ def each(&block)
@env.each(&block) @env.each(&block)
end end
# Returns a new Http::Headers instance containing the contents of
# <tt>headers_or_env</tt> and the original instance.
def merge(headers_or_env) def merge(headers_or_env)
headers = Http::Headers.new(env.dup) headers = Http::Headers.new(env.dup)
headers.merge!(headers_or_env) headers.merge!(headers_or_env)
headers headers
end end
# Adds the contents of <tt>headers_or_env</tt> to original instance
# entries; duplicate keys are overwritten with the values from
# <tt>headers_or_env</tt>.
def merge!(headers_or_env) def merge!(headers_or_env)
headers_or_env.each do |key, value| headers_or_env.each do |key, value|
self[env_name(key)] = value self[env_name(key)] = value
...@@ -52,6 +71,8 @@ def merge!(headers_or_env) ...@@ -52,6 +71,8 @@ def merge!(headers_or_env)
end end
private private
# Converts a HTTP header name to an environment variable name if it is
# not contained within the headers hash.
def env_name(key) def env_name(key)
key = key.to_s key = key.to_s
if key =~ HTTP_HEADER if key =~ HTTP_HEADER
......
...@@ -20,8 +20,10 @@ A short rundown of some of the major features: ...@@ -20,8 +20,10 @@ A short rundown of some of the major features:
class Product < ActiveRecord::Base class Product < ActiveRecord::Base
end end
The Product class is automatically mapped to the table named "products", {Learn more}[link:classes/ActiveRecord/Base.html]
which might look like this:
The Product class is automatically mapped to the table named "products",
which might look like this:
CREATE TABLE products ( CREATE TABLE products (
id int(11) NOT NULL auto_increment, id int(11) NOT NULL auto_increment,
...@@ -29,10 +31,8 @@ A short rundown of some of the major features: ...@@ -29,10 +31,8 @@ A short rundown of some of the major features:
PRIMARY KEY (id) PRIMARY KEY (id)
); );
This would also define the following accessors: `Product#name` and This would also define the following accessors: `Product#name` and
`Product#name=(new_name)` `Product#name=(new_name)`.
{Learn more}[link:classes/ActiveRecord/Base.html]
* Associations between objects defined by simple class methods. * Associations between objects defined by simple class methods.
......
...@@ -11,6 +11,15 @@ module AttributeAssignment ...@@ -11,6 +11,15 @@ module AttributeAssignment
# If the passed hash responds to <tt>permitted?</tt> method and the return value # If the passed hash responds to <tt>permitted?</tt> method and the return value
# of this method is +false+ an <tt>ActiveModel::ForbiddenAttributesError</tt> # of this method is +false+ an <tt>ActiveModel::ForbiddenAttributesError</tt>
# exception is raised. # exception is raised.
#
# cat = Cat.new(name: "Gorby", status: "yawning")
# cat.attributes # => { "name" => "Gorby", "status" => "yawning" }
# cat.assign_attributes(status: "sleeping")
# cat.attributes # => { "name" => "Gorby", "status" => "sleeping" }
#
# New attributes will be persisted in the database when the object is saved.
#
# Aliased to <tt>attributes=</tt>.
def assign_attributes(new_attributes) def assign_attributes(new_attributes)
if !new_attributes.respond_to?(:stringify_keys) if !new_attributes.respond_to?(:stringify_keys)
raise ArgumentError, "When assigning attributes, you must pass a hash as an argument." raise ArgumentError, "When assigning attributes, you must pass a hash as an argument."
......
...@@ -72,6 +72,8 @@ def binary? ...@@ -72,6 +72,8 @@ def binary?
end end
# Casts a Ruby value to something appropriate for writing to the database. # Casts a Ruby value to something appropriate for writing to the database.
# Numeric columns will typecast boolean and string to appropriate numeric
# values.
def type_cast_for_write(value) def type_cast_for_write(value)
return value unless number? return value unless number?
......
...@@ -98,6 +98,9 @@ def self.extract_value_from_default(default) ...@@ -98,6 +98,9 @@ def self.extract_value_from_default(default)
end end
end end
# Casts a Ruby value to something appropriate for writing to PostgreSQL.
# see ActiveRecord::ConnectionAdapters::Class#type_cast_for_write
# see ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID::Type
def type_cast_for_write(value) def type_cast_for_write(value)
if @oid_type.respond_to?(:type_cast_for_write) if @oid_type.respond_to?(:type_cast_for_write)
@oid_type.type_cast_for_write(value) @oid_type.type_cast_for_write(value)
......
...@@ -185,8 +185,11 @@ def rfc2822 ...@@ -185,8 +185,11 @@ def rfc2822
end end
alias_method :rfc822, :rfc2822 alias_method :rfc822, :rfc2822
# <tt>:db</tt> format outputs time in UTC; all others output time in local. # Returns a string of the object's date and time.
# Uses TimeWithZone's +strftime+, so <tt>%Z</tt> and <tt>%z</tt> work correctly. # Accepts an optional <tt>format</tt>:
# * <tt>:default</tt> - default value, mimics Ruby 1.9 Time#to_s format.
# * <tt>:db</tt> - format outputs time in UTC :db time. See Time#to_formatted_s(:db).
# * Any key in <tt>Time::DATE_FORMATS</tt> can be used. See active_support/core_ext/time/conversions.rb.
def to_s(format = :default) def to_s(format = :default)
if format == :db if format == :db
utc.to_s(format) utc.to_s(format)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册