Skip to content

Commit

Permalink
Update 4.0 Release Notes with changelogs [ci skip]
Browse files Browse the repository at this point in the history
Also fix some wrong formatting.

Related discussion:
rails@ab72040#commitcomment-1525256
  • Loading branch information
carlosantoniodasilva committed Jul 3, 2012
1 parent 65dc45e commit 215d41d
Show file tree
Hide file tree
Showing 4 changed files with 230 additions and 23 deletions.
6 changes: 3 additions & 3 deletions actionpack/CHANGELOG.md
Expand Up @@ -14,9 +14,9 @@

* Return proper format on exceptions. *Santiago Pastorino*

* Allow to use mounted_helpers (helpers for accessing mounted engines) in ActionView::TestCase. *Piotr Sarnacki*
* Allow to use `mounted_helpers` (helpers for accessing mounted engines) in `ActionView::TestCase`. *Piotr Sarnacki*

* Include mounted_helpers (helpers for accessing mounted engines) in ActionDispatch::IntegrationTest by default. *Piotr Sarnacki*
* Include `mounted_helpers` (helpers for accessing mounted engines) in `ActionDispatch::IntegrationTest` by default. *Piotr Sarnacki*

* Extracted redirect logic from `ActionController::ForceSSL::ClassMethods.force_ssl` into `ActionController::ForceSSL#force_ssl_redirect`

Expand Down Expand Up @@ -49,7 +49,7 @@

*Piotr Sarnacki*

* `truncate` now always returns an escaped HTMl-safe string. The option `:escape` can be used as
* `truncate` now always returns an escaped HTML-safe string. The option `:escape` can be used as
false to not escape the result.

*Li Ellis Gallardo + Rafael Mendonça França*
Expand Down
6 changes: 3 additions & 3 deletions activerecord/CHANGELOG.md
Expand Up @@ -47,7 +47,7 @@

*Tony Schneider*

* Allow ActiveRecord::Relation#pluck to accept multiple columns. Returns an
* Allow `ActiveRecord::Relation#pluck` to accept multiple columns. Returns an
array of arrays containing the typecasted values:

Person.pluck(:id, :name)
Expand Down Expand Up @@ -88,15 +88,15 @@

*Andrew White*

* Move HABTM validity checks to ActiveRecord::Reflection. One side effect of
* Move HABTM validity checks to `ActiveRecord::Reflection`. One side effect of
this is to move when the exceptions are raised from the point of declaration
to when the association is built. This is consistant with other association
validity checks.

*Andrew White*

* Added `stored_attributes` hash which contains the attributes stored using
ActiveRecord::Store. This allows you to retrieve the list of attributes
`ActiveRecord::Store`. This allows you to retrieve the list of attributes
you've defined.

class User < ActiveRecord::Base
Expand Down
6 changes: 3 additions & 3 deletions activesupport/CHANGELOG.md
@@ -1,10 +1,10 @@
## Rails 4.0.0 (unreleased) ##

* Time#change now works with time values with offsets other than UTC or the local time zone. *Andrew White*
* `Time#change` now works with time values with offsets other than UTC or the local time zone. *Andrew White*

* AS::Callbacks: deprecate usage of filter object with `#before` and `#after` methods as `around` callback. *Bogdan Gusiev*
* `ActiveSupport::Callbacks`: deprecate usage of filter object with `#before` and `#after` methods as `around` callback. *Bogdan Gusiev*

* Add `Time#prev_quarter' and 'Time#next_quarter' short-hands for months_ago(3) and months_since(3). *SungHee Kang*
* Add `Time#prev_quarter` and `Time#next_quarter` short-hands for `months_ago(3)` and `months_since(3)`. *SungHee Kang*

* Remove obsolete and unused `require_association` method from dependencies. *fxn*

Expand Down
235 changes: 221 additions & 14 deletions guides/source/4_0_release_notes.textile
Expand Up @@ -64,6 +64,16 @@ h3. Documentation

h3. Railties

* Allow scaffold/model/migration generators to accept a <tt>polymorphic</tt> modifier for <tt>references</tt>/<tt>belongs_to</tt>, for instance

<shell>
rails g model Product supplier:references{polymorphic}
</shell>

will generate the model with <tt>belongs_to :supplier, polymorphic: true</tt> association and appropriate migration.

* Set <tt>config.active_record.migration_error</tt> to <tt>:page_load</tt> for development.

* Add runner to <tt>Rails::Railtie</tt> as a hook called just after runner starts.

* Add <tt>/rails/info/routes</tt> path which displays the same information as +rake routes+.
Expand Down Expand Up @@ -102,12 +112,30 @@ h4(#railties_deprecations). Deprecations

h3. Action Mailer

* No changes.
* Raise an <tt>ActionView::MissingTemplate</tt> exception when no implicit template could be found.

* Asynchronously send messages via the Rails Queue.

h3. Action Pack

h4. Action Controller

* Remove Active Model dependency from Action Pack.

* Support unicode characters in routes. Route will be automatically escaped, so instead of manually escaping:

<ruby>
get Rack::Utils.escape('こんにちは') => 'home#index'
</ruby>

You just have to write the unicode route:

<ruby>
get 'こんにちは' => 'home#index'
</ruby>

* Return proper format on exceptions.

* Extracted redirect logic from <tt>ActionController::ForceSSL::ClassMethods.force_ssl</tt> into <tt>ActionController::ForceSSL#force_ssl_redirect</tt>.

* URL path parameters with invalid encoding now raise <tt>ActionController::BadRequest</tt>.
Expand Down Expand Up @@ -156,6 +184,8 @@ h5(#actioncontroller_deprecations). Deprecations

h4. Action Dispatch

* Include <tt>mounted_helpers</tt> (helpers for accessing mounted engines) in <tt>ActionDispatch::IntegrationTest</tt> by default.

* Added <tt>ActionDispatch::SSL</tt> middleware that when included force all the requests to be under HTTPS protocol.

* Copy literal route constraints to defaults so that url generation know about them. The copied constraints are <tt>:protocol</tt>, <tt>:subdomain</tt>, <tt>:domain</tt>, <tt>:host</tt> and <tt>:port</tt>.
Expand All @@ -179,12 +209,14 @@ If <tt>:patch</tt> is the default verb for updates, edits are tunneled as <tt>PA

* Turn off verbose mode of <tt>rack-cache</tt>, we still have <tt>X-Rack-Cache</tt> to check that info.

* Include mounted_helpers (helpers for accessing mounted engines) in <tt>ActionDispatch::IntegrationTest</tt> by default.

h5(#actiondispatch_deprecations). Deprecations

h4. Action View

* Remove Active Model dependency from Action Pack.

* Allow to use <tt>mounted_helpers</tt> (helpers for accessing mounted engines) in <tt>ActionView::TestCase</tt>.

* Make current object and counter (when it applies) variables accessible when rendering templates with <tt>:object</tt> or <tt>:collection</tt>.

* Allow to lazy load +default_form_builder+ by passing a string instead of a constant.
Expand All @@ -205,8 +237,6 @@ h4. Action View

* Removed old +text_helper+ apis for +highlight+, +excerpt+ and +word_wrap+.

* Allow to use mounted_helpers (helpers for accessing mounted engines) in <tt>ActionView::TestCase</tt>.

* Remove the leading \n added by textarea on +assert_select+.

* Changed default value for <tt>config.action_view.embed_authenticity_token_in_remote_forms</tt> to false. This change breaks remote forms that need to work also without JavaScript, so if you need such behavior, you can either set it to true or explicitly pass <tt>:authenticity_token => true</tt> in form options.
Expand Down Expand Up @@ -299,6 +329,127 @@ Moved into a separate gem <tt>sprockets-rails</tt>.

h3. Active Record

* Add <tt>:default</tt> and <tt>:null</tt> options to <tt>column_exists?</tt>.

<ruby>
column_exists?(:testings, :taggable_id, :integer, null: false)
column_exists?(:testings, :taggable_type, :string, default: 'Photo')
</ruby>

* <tt>ActiveRelation#inspect</tt> no longer calls <tt>#to_a</tt>. This means that in places where <tt>#inspect</tt> is implied (such as in the console), creating a relation will not execute it anymore, you'll have to call <tt>#to_a</tt> when necessary:

<ruby>
User.where(:age => 30) # => returns the relation
User.where(:age => 30).to_a # => executes the query and returns the loaded objects, as before
</ruby>

* Add <tt>collation</tt> and <tt>ctype</tt> support to PostgreSQL. These are available for PostgreSQL 8.4 or later.

<yaml>
development:
adapter: postgresql
host: localhost
database: rails_development
username: foo
password: bar
encoding: UTF8
collation: ja_JP.UTF8
ctype: ja_JP.UTF8
</yaml>

* <tt>FinderMethods#exists?</tt> now returns <tt>false</tt> with the <tt>false</tt> argument.

* Added support for specifying the precision of a timestamp in the postgresql adapter. So, instead of having to incorrectly specify the precision using the <tt>:limit</tt> option, you may use <tt>:precision</tt>, as intended. For example, in a migration:

<ruby>
def change
create_table :foobars do |t|
t.timestamps :precision => 0
end
end
</ruby>

* Allow <tt>ActiveRecord::Relation#pluck</tt> to accept multiple columns. Returns an array of arrays containing the typecasted values:

<ruby>
Person.pluck(:id, :name)
# SELECT people.id, people.name FROM people
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]
</ruby>

* Improve the derivation of HABTM join table name to take account of nesting. It now takes the table names of the two models, sorts them lexically and then joins them, stripping any common prefix from the second table name. Some examples:

<plain>
Top level models (Category <=> Product)
Old: categories_products
New: categories_products

Top level models with a global table_name_prefix (Category <=> Product)
Old: site_categories_products
New: site_categories_products

Nested models in a module without a table_name_prefix method (Admin::Category <=> Admin::Product)
Old: categories_products
New: categories_products

Nested models in a module with a table_name_prefix method (Admin::Category <=> Admin::Product)
Old: categories_products
New: admin_categories_products

Nested models in a parent model (Catalog::Category <=> Catalog::Product)
Old: categories_products
New: catalog_categories_products

Nested models in different parent models (Catalog::Category <=> Content::Page)
Old: categories_pages
New: catalog_categories_content_pages
</plain>

* Move HABTM validity checks to <tt>ActiveRecord::Reflection</tt>. One side effect of this is to move when the exceptions are raised from the point of declaration to when the association is built. This is consistant with other association validity checks.

* Added <tt>stored_attributes</tt> hash which contains the attributes stored using <tt>ActiveRecord::Store</tt>. This allows you to retrieve the list of attributes you've defined.

<ruby>
class User < ActiveRecord::Base
store :settings, accessors: [:color, :homepage]
end

User.stored_attributes[:settings] # [:color, :homepage]
</ruby>

* <tt>composed_of</tt> was removed. You'll have to write your own accessor and mutator methods if you'd like to use value objects to represent some portion of your models. So, instead of:

<ruby>
class Person < ActiveRecord::Base
composed_of :address, :mapping => [ %w(address_street street), %w(address_city city) ]
end
</ruby>

you could write something like this:

<ruby>
def address
@address ||= Address.new(address_street, address_city)
end

def address=(address)
self[:address_street] = @address.street
self[:address_city] = @address.city

@address = address
end
</ruby>

* PostgreSQL default log level is now 'warning', to bypass the noisy notice messages. You can change the log level using the <tt>min_messages</tt> option available in your <tt>config/database.yml</tt>.

* Add uuid datatype support to PostgreSQL adapter.

* <tt>update_attribute</tt> has been removed. Use <tt>update_column</tt> if you want to bypass mass-assignment protection, validations, callbacks, and touching of updated_at. Otherwise please use <tt>update_attributes</tt>.

* Added <tt>ActiveRecord::Migration.check_pending!</tt> that raises an error if migrations are pending.

* Added <tt>#destroy!</tt> which acts like <tt>#destroy</tt> but will raise an <tt>ActiveRecord::RecordNotDestroyed</tt> exception instead of returning <tt>false</tt>.

* Allow blocks for count with <tt>ActiveRecord::Relation</tt>, to work similar as <tt>Array#count</tt>: <tt>Person.where("age > 26").count { |person| person.gender == 'female' }</tt>

* Added support to <tt>CollectionAssociation#delete</tt> for passing fixnum or string values as record ids. This finds the records responding to the ids and deletes them.
Expand Down Expand Up @@ -475,27 +626,37 @@ The code to implement the deprecated features has been moved out to the +active_

Don't use this:

scope :red, where(color: 'red')
default_scope where(color: 'red')
<ruby>
scope :red, where(color: 'red')
default_scope where(color: 'red')
</ruby>

Use this:

scope :red, -> { where(color: 'red') }
default_scope { where(color: 'red') }
<ruby>
scope :red, -> { where(color: 'red') }
default_scope { where(color: 'red') }
</ruby>

The former has numerous issues. It is a common newbie gotcha to do the following:

scope :recent, where(published_at: Time.now - 2.weeks)
<ruby>
scope :recent, where(published_at: Time.now - 2.weeks)
</ruby>

Or a more subtle variant:

scope :recent, -> { where(published_at: Time.now - 2.weeks) }
scope :recent_red, recent.where(color: 'red')
<ruby>
scope :recent, -> { where(published_at: Time.now - 2.weeks) }
scope :recent_red, recent.where(color: 'red')
</ruby>

Eager scopes are also very complex to implement within Active Record, and there are still bugs. For example, the following does not do what you expect:

scope :remove_conditions, except(:where)
where(...).remove_conditions # => still has conditions
<ruby>
scope :remove_conditions, except(:where)
where(...).remove_conditions # => still has conditions
</ruby>

* Added deprecation for the :dependent => :restrict association option.

Expand All @@ -507,6 +668,32 @@ The code to implement the deprecated features has been moved out to the +active_

h3. Active Model

* Changed <tt>AM::Serializers::JSON.include_root_in_json</tt> default value to false. Now, AM Serializers and AR objects have the same default behaviour.

<ruby>
class User < ActiveRecord::Base; end

class Person
include ActiveModel::Model
include ActiveModel::AttributeMethods
include ActiveModel::Serializers::JSON

attr_accessor :name, :age

def attributes
instance_values
end
end

user.as_json
=> {"id"=>1, "name"=>"Konata Izumi", "age"=>16, "awesome"=>true}
# root is not included

person.as_json
=> {"name"=>"Francesco", "age"=>22}
# root is not included
</ruby>

* Passing false hash values to +validates+ will no longer enable the corresponding validators.

* +ConfirmationValidator+ error messages will attach to <tt>:#{attribute}_confirmation</tt> instead of +attribute+.
Expand All @@ -525,6 +712,24 @@ h3. Active Resource

h3. Active Support

* <tt>Time#change</tt> now works with time values with offsets other than UTC or the local time zone.

* Add <tt>Time#prev_quarter</tt> and <tt>Time#next_quarter</tt> short-hands for <tt>months_ago(3)</tt> and <tt>months_since(3)</tt>.

* Remove obsolete and unused <tt>require_association</tt> method from dependencies.

* Add <tt>:instance_accessor</tt> option for <tt>config_accessor</tt>.

<ruby>
class User
include ActiveSupport::Configurable
config_accessor :allowed_access, instance_accessor: false
end

User.new.allowed_access = true # => NoMethodError
User.new.allowed_access # => NoMethodError
</ruby>

* <tt>ActionView::Helpers::NumberHelper</tt> methods have been moved to <tt>ActiveSupport::NumberHelper</tt> and are now available via <tt>Numeric#to_s</tt>.

* <tt>Numeric#to_s</tt> now accepts the formatting options :phone, :currency, :percentage, :delimited, :rounded, :human, and :human_size.
Expand Down Expand Up @@ -575,6 +780,8 @@ h3. Active Support

h4(#activesupport_deprecations). Deprecations

* <tt>ActiveSupport::Callbacks</tt>: deprecate usage of filter object with <tt>#before</tt> and <tt>#after</tt> methods as <tt>around</tt> callback.

* <tt>BufferedLogger</tt> is deprecated. Use <tt>ActiveSupport::Logger</tt> or the +logger+ from Ruby stdlib.

* Deprecates the compatibility method <tt>Module#local_constant_names</tt> and use <tt>Module#local_constants</tt> instead (which returns symbols).
Expand Down

0 comments on commit 215d41d

Please sign in to comment.