Fixed documentation and prepared for release of 0.12

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1216 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 f46486d3
*SVN* *0.9.0* (19th April, 2005)
* Added that deliver_* will now return the email that was sent * Added that deliver_* will now return the email that was sent
* Fixed quoting for all address headers, not just to #955 [Jamis Buck]
* Added that quoting to UTF-8 only happens if the characters used are in that range #955 [Jamis Buck] * Added that quoting to UTF-8 only happens if the characters used are in that range #955 [Jamis Buck]
* Fixed quoting for all address headers, not just to #955 [Jamis Buck]
* Fixed unquoting of emails that doesn't have an explicit charset #1036 [wolfgang@stufenlos.net] * Fixed unquoting of emails that doesn't have an explicit charset #1036 [wolfgang@stufenlos.net]
......
...@@ -8,7 +8,7 @@ require 'rake/contrib/rubyforgepublisher' ...@@ -8,7 +8,7 @@ require 'rake/contrib/rubyforgepublisher'
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : '' PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
PKG_NAME = 'actionmailer' PKG_NAME = 'actionmailer'
PKG_VERSION = '0.8.1' + PKG_BUILD PKG_VERSION = '0.9.0' + PKG_BUILD
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
RELEASE_NAME = "REL #{PKG_VERSION}" RELEASE_NAME = "REL #{PKG_VERSION}"
...@@ -52,7 +52,7 @@ spec = Gem::Specification.new do |s| ...@@ -52,7 +52,7 @@ spec = Gem::Specification.new do |s|
s.rubyforge_project = "actionmailer" s.rubyforge_project = "actionmailer"
s.homepage = "http://www.rubyonrails.org" s.homepage = "http://www.rubyonrails.org"
s.add_dependency('actionpack', '= 1.7.0' + PKG_BUILD) s.add_dependency('actionpack', '= 1.8.0' + PKG_BUILD)
s.has_rdoc = true s.has_rdoc = true
s.requirements << 'none' s.requirements << 'none'
......
*SVN* *1.8.0* (19th April, 2005)
* Added support for web servers that use PATH_INFO instead of REQUEST_URI like IIS #1014 [BradG/Nicholas Seckar] * Added assert_tag and assert_no_tag as a much improved alternative to the deprecated assert_template_xpath_match #1126 [Jamis Buck]
* Added graceful handling of PUT, DELETE, and OPTIONS requests for a complete coverage of REST functionality #1136 [joshknowles@gmail.com] * Deprecated the majority of all the testing assertions and replaced them with a much smaller core and access to all the collections the old assertions relied on. That way the regular test/unit assertions can be used against these. Added documentation about how to use it all.
* Fixed that you can now pass an alternative :href option to link_to_function/remote in order to point to somewhere other than # if the javascript fails or is turned off. You can do the same with form_remote_tag by passing in :action. #1113 [Sam Stephenson] * Added a wide range of new Javascript effects:
* Effect.Puff zooms the element out and makes it smoothly transparent at the same time, giving a "puff" illusion #996 [thomas@fesch.at]
After the animation is completed, the display property will be set to none.
This effect will work on relative and absolute positioned elements.
* Effect.Appear as the opposite of Effect.Fade #990 [thomas@fesch.at]
You should return elements with style="display:none;" or a like class for this to work best and have no chance of flicker.
* Effect.Squish for scaling down an element and making it disappear at the end #972 [thomas@fesch.at]
* Effect.Scale for smoothly scaling images or text up and down #972 [thomas@fesch.at]
* Effect.Fade which smoothly turns opacity from 100 to 0 and then hides the element #960 [thomas@fesch.at]
* Added Request#xml_http_request? (and an alias xhr?) to that'll return true when the request came from one of the Javascript helper methods (Ajax). This can be used to give one behavior for modern browsers supporting Ajax, another to old browsers #1127 [Sam Stephenson] * Added Request#xml_http_request? (and an alias xhr?) to that'll return true when the request came from one of the Javascript helper methods (Ajax). This can be used to give one behavior for modern browsers supporting Ajax, another to old browsers #1127 [Sam Stephenson]
* Added assert_tag and assert_no_tag as a much improved alternative to the deprecated assert_template_xpath_match #1126 [Jamis Buck] * Changed render_partial to take local assigns as the second parameter instead of an explicit object and then the assigns. So the API changes from:
* Deprecated the majority of all the testing assertions and replaced them with a much smaller core and access to all the collections the old assertions relied on. That way the regular test/unit assertions can be used against these. Added documentation about how to use it all. <%= render_partial "account", person, "rules" => regulations.rules %>
...to:
<%= render_partial "account", :account => person, :rules => regulations.rules %>
The old API will still work, though, and render_partial "account" will still assume :account => @account.
* Added support for web servers that use PATH_INFO instead of REQUEST_URI like IIS #1014 [BradG/Nicholas Seckar]
* Added graceful handling of PUT, DELETE, and OPTIONS requests for a complete coverage of REST functionality #1136 [joshknowles@gmail.com]
* Fixed that you can now pass an alternative :href option to link_to_function/remote in order to point to somewhere other than # if the javascript fails or is turned off. You can do the same with form_remote_tag by passing in :action. #1113 [Sam Stephenson]
* Fixed DateHelper to return values on the option tags such that they'll work properly in IE with form_remote_tag #1024 [rscottmace@gmail.com] * Fixed DateHelper to return values on the option tags such that they'll work properly in IE with form_remote_tag #1024 [rscottmace@gmail.com]
...@@ -28,16 +52,6 @@ ...@@ -28,16 +52,6 @@
* Fixed error handling of broken layouts #1115 [Michael Schubert] * Fixed error handling of broken layouts #1115 [Michael Schubert]
* Changed render_partial to take local assigns as the second parameter instead of an explicit object and then the assigns. So the API changes from:
<%= render_partial "account", person, "rules" => regulations.rules %>
...to:
<%= render_partial "account", :account => person, :rules => regulations.rules %>
The old API will still work, though, and render_partial "account" will still assume :account => @account.
* Added submit_to_remote that allows you to trigger an Ajax form submition at the click of the submission button, which allows for multiple targets in a single form through the use of multiple submit buttons #930 [yrashk@gmail.com] * Added submit_to_remote that allows you to trigger an Ajax form submition at the click of the submission button, which allows for multiple targets in a single form through the use of multiple submit buttons #930 [yrashk@gmail.com]
* Fixed pagination to work with joins #1034 [scott@sigkill.org] * Fixed pagination to work with joins #1034 [scott@sigkill.org]
...@@ -90,20 +104,6 @@ ...@@ -90,20 +104,6 @@
* Fixed that on very rare occasions, webrick would raise a NoMethodError: private method 'split' called for nil #1001 [Flurin Egger] * Fixed that on very rare occasions, webrick would raise a NoMethodError: private method 'split' called for nil #1001 [Flurin Egger]
* Added a wide range of new Javascript effects:
* Effect.Puff zooms the element out and makes it smoothly transparent at the same time, giving a "puff" illusion #996 [thomas@fesch.at]
After the animation is completed, the display property will be set to none.
This effect will work on relative and absolute positioned elements.
* Effect.Appear as the opposite of Effect.Fade #990 [thomas@fesch.at]
You should return elements with style="display:none;" or a like class for this to work best and have no chance of flicker.
* Effect.Squish for scaling down an element and making it disappear at the end #972 [thomas@fesch.at]
* Effect.Scale for smoothly scaling images or text up and down #972 [thomas@fesch.at]
* Effect.Fade which smoothly turns opacity from 100 to 0 and then hides the element #960 [thomas@fesch.at]
* Fixed problem with page caching #958 [Rick Olson] * Fixed problem with page caching #958 [Rick Olson]
......
...@@ -8,7 +8,7 @@ require 'rake/contrib/rubyforgepublisher' ...@@ -8,7 +8,7 @@ require 'rake/contrib/rubyforgepublisher'
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : '' PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
PKG_NAME = 'actionpack' PKG_NAME = 'actionpack'
PKG_VERSION = '1.7.0' + PKG_BUILD PKG_VERSION = '1.8.0' + PKG_BUILD
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
RELEASE_NAME = "REL #{PKG_VERSION}" RELEASE_NAME = "REL #{PKG_VERSION}"
...@@ -61,7 +61,7 @@ spec = Gem::Specification.new do |s| ...@@ -61,7 +61,7 @@ spec = Gem::Specification.new do |s|
s.has_rdoc = true s.has_rdoc = true
s.requirements << 'none' s.requirements << 'none'
s.add_dependency('activesupport', '= 1.0.3' + PKG_BUILD) s.add_dependency('activesupport', '= 1.0.4' + PKG_BUILD)
s.require_path = 'lib' s.require_path = 'lib'
s.autorequire = 'action_controller' s.autorequire = 'action_controller'
......
...@@ -134,15 +134,15 @@ def assert_routing(path, options, defaults={}, extras={}, message=nil) ...@@ -134,15 +134,15 @@ def assert_routing(path, options, defaults={}, extras={}, message=nil)
# must meet the criteria described by the hash. # must meet the criteria described by the hash.
# * <tt>:children</tt>: a hash, for counting children of a node. Accepts # * <tt>:children</tt>: a hash, for counting children of a node. Accepts
# the keys: # the keys:
# ** <tt>:count</tt>: either a number or a range which must equal (or # * <tt>:count</tt>: either a number or a range which must equal (or
# include) the number of children that match. # include) the number of children that match.
# ** <tt>:less_than</tt>: the number of matching children must be less # * <tt>:less_than</tt>: the number of matching children must be less
# than this number. # than this number.
# ** <tt>:greater_than</tt>: the number of matching children must be # * <tt>:greater_than</tt>: the number of matching children must be
# greater than this number. # greater than this number.
# ** <tt>:only</tt>: another hash consisting of the keys to use # * <tt>:only</tt>: another hash consisting of the keys to use
# to match on the children, and only matching children will be # to match on the children, and only matching children will be
# counted. # counted.
# * <tt>:content</tt>: (text nodes only). The content of the node must # * <tt>:content</tt>: (text nodes only). The content of the node must
# match the given value. # match the given value.
# #
......
require 'html/tokenizer' require 'html/tokenizer'
require 'html/node' require 'html/node'
module HTML module HTML#:nodoc:
# A top-level HTMl document. You give it a body of text, and it will parse that # A top-level HTMl document. You give it a body of text, and it will parse that
# text into a tree of nodes. # text into a tree of nodes.
class Document class Document #:nodoc:
# The root of the parsed document. # The root of the parsed document.
attr_reader :root attr_reader :root
......
require 'strscan' require 'strscan'
module HTML module HTML#:nodoc:
class Conditions < Hash class Conditions < Hash#:nodoc:
def initialize(hash) def initialize(hash)
super() super()
hash = { :content => hash } unless Hash === hash hash = { :content => hash } unless Hash === hash
...@@ -53,7 +53,7 @@ def keys_to_symbols(hash) ...@@ -53,7 +53,7 @@ def keys_to_symbols(hash)
end end
# The base class of all nodes, textual and otherwise, in an HTML document. # The base class of all nodes, textual and otherwise, in an HTML document.
class Node class Node#:nodoc:
# The array of children of this node. Not all nodes have children. # The array of children of this node. Not all nodes have children.
attr_reader :children attr_reader :children
...@@ -167,7 +167,7 @@ def parse(parent, line, pos, content) ...@@ -167,7 +167,7 @@ def parse(parent, line, pos, content)
end end
# A node that represents text, rather than markup. # A node that represents text, rather than markup.
class Text < Node class Text < Node#:nodoc:
attr_reader :content attr_reader :content
...@@ -223,7 +223,7 @@ def match(conditions) ...@@ -223,7 +223,7 @@ def match(conditions)
# A Tag is any node that represents markup. It may be an opening tag, a # A Tag is any node that represents markup. It may be an opening tag, a
# closing tag, or a self-closing tag. It has a name, and may have a hash of # closing tag, or a self-closing tag. It has a name, and may have a hash of
# attributes. # attributes.
class Tag < Node class Tag < Node#:nodoc:
# Either +nil+, <tt>:close</tt>, or <tt>:self</tt> # Either +nil+, <tt>:close</tt>, or <tt>:self</tt>
attr_reader :closing attr_reader :closing
......
require 'strscan' require 'strscan'
module HTML module HTML#:nodoc:
# A simple HTML tokenizer. It simply breaks a stream of text into tokens, where each # A simple HTML tokenizer. It simply breaks a stream of text into tokens, where each
# token is a string. Each string represents either "text", or an HTML element. # token is a string. Each string represents either "text", or an HTML element.
...@@ -13,7 +13,7 @@ module HTML ...@@ -13,7 +13,7 @@ module HTML
# while token = tokenizer.next # while token = tokenizer.next
# p token # p token
# end # end
class Tokenizer class Tokenizer#:nodoc:
# The current (byte) position in the text # The current (byte) position in the text
attr_reader :position attr_reader :position
......
module HTML module HTML#:nodoc:
module Version module Version#:nodoc:
MAJOR = 0 MAJOR = 0
MINOR = 5 MINOR = 5
......
*0.7.0* (Unreleased) *0.7.0* (19th April, 2005)
* When casting structured types, don't try to send obj.name= unless obj responds to it, causes casting to be less likely to fail for XML-RPC * When casting structured types, don't try to send obj.name= unless obj responds to it, causes casting to be less likely to fail for XML-RPC
......
...@@ -9,7 +9,7 @@ require 'fileutils' ...@@ -9,7 +9,7 @@ require 'fileutils'
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : '' PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
PKG_NAME = 'actionwebservice' PKG_NAME = 'actionwebservice'
PKG_VERSION = '0.6.2' + PKG_BUILD PKG_VERSION = '0.7.0' + PKG_BUILD
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}" PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"
...@@ -62,9 +62,9 @@ spec = Gem::Specification.new do |s| ...@@ -62,9 +62,9 @@ spec = Gem::Specification.new do |s|
s.rubyforge_project = "aws" s.rubyforge_project = "aws"
s.homepage = "http://www.rubyonrails.org" s.homepage = "http://www.rubyonrails.org"
s.add_dependency('actionpack', '= 1.7.0' + PKG_BUILD) s.add_dependency('actionpack', '= 1.8.0' + PKG_BUILD)
s.add_dependency('activerecord', '= 1.9.1' + PKG_BUILD) s.add_dependency('activerecord', '= 1.10.0' + PKG_BUILD)
s.add_dependency('activesupport', '= 1.0.3' + PKG_BUILD) s.add_dependency('activesupport', '= 1.0.4' + PKG_BUILD)
s.has_rdoc = true s.has_rdoc = true
s.requirements << 'none' s.requirements << 'none'
......
*SVN* *1.10.0* (19th April, 2005)
* Added Base.save! that attempts to save the record just like Base.save but will raise a InvalidRecord exception instead of returning false if the record is not valid [After much pestering from Dave Thomas]
* Added eager loading of associations as a way to solve the N+1 problem more gracefully without piggy-back queries. Example: * Added eager loading of associations as a way to solve the N+1 problem more gracefully without piggy-back queries. Example:
...@@ -24,6 +22,15 @@ ...@@ -24,6 +22,15 @@
Person.find(:all, :conditions => [ "category IN (?)", categories], :limit => 50) Person.find(:all, :conditions => [ "category IN (?)", categories], :limit => 50)
Person.find(:all, :offset => 10, :limit => 10) Person.find(:all, :offset => 10, :limit => 10)
* Added acts_as_nested_set #1000 [wschenk]. Introduction:
This acts provides Nested Set functionality. Nested Set is similiar to Tree, but with
the added feature that you can select the children and all of it's descendants with
a single query. A good use case for this is a threaded post system, where you want
to display every reply to a comment without multiple selects.
* Added Base.save! that attempts to save the record just like Base.save but will raise a RecordInvalid exception instead of returning false if the record is not valid [After much pestering from Dave Thomas]
* Fixed PostgreSQL usage of fixtures with regards to public schemas and table names with dots #962 [gnuman1@gmail.com] * Fixed PostgreSQL usage of fixtures with regards to public schemas and table names with dots #962 [gnuman1@gmail.com]
* Fixed that fixtures were being deleted in the same order as inserts causing FK errors #890 [andrew.john.peters@gmail.com] * Fixed that fixtures were being deleted in the same order as inserts causing FK errors #890 [andrew.john.peters@gmail.com]
...@@ -36,13 +43,6 @@ ...@@ -36,13 +43,6 @@
* Added the option to specify the acceptance string in validates_acceptance_of #1106 [caleb@aei-tech.com] * Added the option to specify the acceptance string in validates_acceptance_of #1106 [caleb@aei-tech.com]
* Added acts_as_nested_set #1000 [wschenk]. Introduction:
This acts provides Nested Set functionality. Nested Set is similiar to Tree, but with
the added feature that you can select the children and all of it's descendants with
a single query. A good use case for this is a threaded post system, where you want
to display every reply to a comment without multiple selects.
* Added insert_at(position) to acts_as_list #1083 [DeLynnB] * Added insert_at(position) to acts_as_list #1083 [DeLynnB]
* Removed the default order by id on has_and_belongs_to_many queries as it could kill performance on large sets (you can still specify by hand with :order) * Removed the default order by id on has_and_belongs_to_many queries as it could kill performance on large sets (you can still specify by hand with :order)
......
...@@ -333,7 +333,7 @@ The prefered method of installing Active Record is through its GEM file. You'll ...@@ -333,7 +333,7 @@ The prefered method of installing Active Record is through its GEM file. You'll
RubyGems[http://rubygems.rubyforge.org/wiki/wiki.pl] installed for that, though. If you have, RubyGems[http://rubygems.rubyforge.org/wiki/wiki.pl] installed for that, though. If you have,
then use: then use:
% [sudo] gem install activerecord-1.7.0.gem % [sudo] gem install activerecord-1.10.0.gem
You can also install Active Record the old-fashion way with the following command: You can also install Active Record the old-fashion way with the following command:
......
...@@ -8,7 +8,7 @@ require 'rake/contrib/rubyforgepublisher' ...@@ -8,7 +8,7 @@ require 'rake/contrib/rubyforgepublisher'
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : '' PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
PKG_NAME = 'activerecord' PKG_NAME = 'activerecord'
PKG_VERSION = '1.9.1' + PKG_BUILD PKG_VERSION = '1.10.0' + PKG_BUILD
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
RELEASE_NAME = "REL #{PKG_VERSION}" RELEASE_NAME = "REL #{PKG_VERSION}"
...@@ -76,7 +76,7 @@ spec = Gem::Specification.new do |s| ...@@ -76,7 +76,7 @@ spec = Gem::Specification.new do |s|
s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |item| item.include?( "\.svn" ) } s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
end end
s.add_dependency('activesupport', '= 1.0.3' + PKG_BUILD) s.add_dependency('activesupport', '= 1.0.4' + PKG_BUILD)
s.files.delete "test/fixtures/fixture_database.sqlite" s.files.delete "test/fixtures/fixture_database.sqlite"
s.files.delete "test/fixtures/fixture_database_2.sqlite" s.files.delete "test/fixtures/fixture_database_2.sqlite"
......
...@@ -96,7 +96,7 @@ def initialize(errors) ...@@ -96,7 +96,7 @@ def initialize(errors)
# question mark is supposed to represent. In those cases, you can resort to named bind variables instead. That's done by replacing # question mark is supposed to represent. In those cases, you can resort to named bind variables instead. That's done by replacing
# the question marks with symbols and supplying a hash with values for the matching symbol keys: # the question marks with symbols and supplying a hash with values for the matching symbol keys:
# #
# Company.find_first([ # Company.find(:first, [
# "id = :id AND name = :name AND division = :division AND created_at > :accounting_date", # "id = :id AND name = :name AND division = :division AND created_at > :accounting_date",
# { :id => 3, :name => "37signals", :division => "First", :accounting_date => '2005-01-01' } # { :id => 3, :name => "37signals", :division => "First", :accounting_date => '2005-01-01' }
# ]) # ])
...@@ -295,7 +295,7 @@ class << self # Class methods ...@@ -295,7 +295,7 @@ class << self # Class methods
# If no record can be found for all of the listed ids, then RecordNotFound will be raised. # If no record can be found for all of the listed ids, then RecordNotFound will be raised.
# * Find first: This will return the first record matched by the options used. These options can either be specific # * Find first: This will return the first record matched by the options used. These options can either be specific
# conditions or merely an order. If no record can matched, nil is returned. # conditions or merely an order. If no record can matched, nil is returned.
# # Find all: This will return all the records matched by the options used. If no records are found, an empty array is returned. # * Find all: This will return all the records matched by the options used. If no records are found, an empty array is returned.
# #
# All approaches accepts an option hash as their last parameter. The options are: # All approaches accepts an option hash as their last parameter. The options are:
# #
...@@ -315,12 +315,12 @@ class << self # Class methods ...@@ -315,12 +315,12 @@ class << self # Class methods
# Person.find(1, :conditions => "administrator = 1", :order => "created_on DESC") # Person.find(1, :conditions => "administrator = 1", :order => "created_on DESC")
# #
# Examples for find first: # Examples for find first:
# Person.find(:first) # returns the first object fetched by SELECT * FROM people # Person.find(:first) # returns the first object fetched by SELECT * FROM people
# Person.find(:first, :conditions => [ "user_name = ?", user_name]) # Person.find(:first, :conditions => [ "user_name = ?", user_name])
# Person.find(:first, :order => "created_on DESC", :offset => 5) # Person.find(:first, :order => "created_on DESC", :offset => 5)
# #
# Examples for find all: # Examples for find all:
# Person.find(:all) # returns an array of objects for all the rows fetched by SELECT * FROM people # Person.find(:all) # returns an array of objects for all the rows fetched by SELECT * FROM people
# Person.find(:all, :conditions => [ "category IN (?)", categories], :limit => 50) # Person.find(:all, :conditions => [ "category IN (?)", categories], :limit => 50)
# Person.find(:all, :offset => 10, :limit => 10) # Person.find(:all, :offset => 10, :limit => 10)
# Person.find(:all, :include => [ :account, :friends ]) # Person.find(:all, :include => [ :account, :friends ])
......
module ActiveRecord module ActiveRecord
class InvalidRecord < ActiveRecordError #:nodoc: class RecordInvalid < ActiveRecordError #:nodoc:
end end
# Active Record validation is reported to and from this object, which is used by Base#save to # Active Record validation is reported to and from this object, which is used by Base#save to
...@@ -555,10 +555,10 @@ def save_with_validation(perform_validation = true) ...@@ -555,10 +555,10 @@ def save_with_validation(perform_validation = true)
if perform_validation && valid? || !perform_validation then save_without_validation else false end if perform_validation && valid? || !perform_validation then save_without_validation else false end
end end
# Attempts to save the record just like Base.save but will raise a InvalidRecord exception instead of returning false # Attempts to save the record just like Base.save but will raise a RecordInvalid exception instead of returning false
# if the record is not valid. # if the record is not valid.
def save! def save!
valid? ? save_without_validation : raise(InvalidRecord) valid? ? save_without_validation : raise(RecordInvalid)
end end
# Updates a single attribute and saves the record without going through the normal validation procedure. # Updates a single attribute and saves the record without going through the normal validation procedure.
......
...@@ -66,7 +66,7 @@ def test_error_on_update ...@@ -66,7 +66,7 @@ def test_error_on_update
def test_invalid_record_exception def test_invalid_record_exception
r = Reply.new r = Reply.new
assert_raises(ActiveRecord::InvalidRecord) { r.save! } assert_raises(ActiveRecord::RecordInvalid) { r.save! }
end end
def test_single_error_per_attr_iteration def test_single_error_per_attr_iteration
......
*SVN* *1.0.4* (19th April, 2005)
* Fixed that in some circumstances controllers outside of modules may have hidden ones inside modules. For example, admin/content might have been hidden by /content. #1075 [Nicholas Seckar] * Fixed that in some circumstances controllers outside of modules may have hidden ones inside modules. For example, admin/content might have been hidden by /content. #1075 [Nicholas Seckar]
......
*SVN* *0.12.0* (19th April, 2005)
* Fixed that purge_test_database would use database settings from the development environment when recreating the test database #1122 [rails@cogentdude.com] * Fixed that purge_test_database would use database settings from the development environment when recreating the test database #1122 [rails@cogentdude.com]
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
# pits the two statements against each other with 50 runs each # pits the two statements against each other with 50 runs each
script/benchmarker 50 'Person.expensive_method(10)' 'Person.cheap_method(10)' script/benchmarker 50 'Person.expensive_method(10)' 'Person.cheap_method(10)'
* Added script/profiler to easily profile a single statement from within the environment. Examples: * Added script/profiler to easily profile a single statement from within the environment. Examples:
script/profiler 'Person.expensive_method(10)' script/profiler 'Person.expensive_method(10)'
...@@ -22,6 +21,8 @@ ...@@ -22,6 +21,8 @@
* Fixed that ownership is brought over in pg_dump during tests for PostgreSQL #1060 [pburleson@gmail.com] * Fixed that ownership is brought over in pg_dump during tests for PostgreSQL #1060 [pburleson@gmail.com]
* Upgraded to Active Record 1.10.0, Action Pack 1.8.0, Action Mailer 0.9.0, Action Web Service 0.7.0, Active Support 1.0.4
*0.11.1* (27th March, 2005) *0.11.1* (27th March, 2005)
......
...@@ -9,7 +9,7 @@ require 'rbconfig' ...@@ -9,7 +9,7 @@ require 'rbconfig'
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : '' PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
PKG_NAME = 'rails' PKG_NAME = 'rails'
PKG_VERSION = '0.11.1' + PKG_BUILD PKG_VERSION = '0.12.0' + PKG_BUILD
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}" PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"
...@@ -238,12 +238,12 @@ spec = Gem::Specification.new do |s| ...@@ -238,12 +238,12 @@ spec = Gem::Specification.new do |s|
on top of either MySQL, PostgreSQL, or SQLite with eRuby-based templates. on top of either MySQL, PostgreSQL, or SQLite with eRuby-based templates.
EOF EOF
s.add_dependency('rake', '>= 0.5.0') s.add_dependency('rake', '>= 0.5.3')
s.add_dependency('activesupport', '= 1.0.3' + PKG_BUILD) s.add_dependency('activesupport', '= 1.0.4' + PKG_BUILD)
s.add_dependency('activerecord', '= 1.9.1' + PKG_BUILD) s.add_dependency('activerecord', '= 1.10.0' + PKG_BUILD)
s.add_dependency('actionpack', '= 1.7.0' + PKG_BUILD) s.add_dependency('actionpack', '= 1.8.0' + PKG_BUILD)
s.add_dependency('actionmailer', '= 0.8.1' + PKG_BUILD) s.add_dependency('actionmailer', '= 0.9.0' + PKG_BUILD)
s.add_dependency('actionwebservice', '= 0.6.2' + PKG_BUILD) s.add_dependency('actionwebservice', '= 0.7.0' + PKG_BUILD)
s.rdoc_options << '--exclude' << '.' s.rdoc_options << '--exclude' << '.'
s.has_rdoc = false s.has_rdoc = false
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册