Point master changelogs to 4-1-stable branch

Remove 4-1 related entries from master [ci skip]
This commit is contained in:
Carlos Antonio da Silva 2014-02-25 09:14:35 -03:00
parent 06f815e61c
commit 71b3910a7d
8 changed files with 8 additions and 3831 deletions

View File

@ -1,61 +1 @@
* Support the use of underscored symbols when registering interceptors and
observers like we do elsewhere within Rails.
*Andrew White*
* Add the ability to intercept emails before previewing in a similar fashion
to how emails can be intercepted before delivery.
Fixes #13622.
Example:
class CSSInlineStyler
def self.previewing_email(message)
# inline CSS styles
end
end
ActionMailer::Base.register_preview_interceptor CSSInlineStyler
*Andrew White*
* Add mailer previews feature based on 37 Signals mail_view gem.
*Andrew White*
* Calling `mail()` without arguments serves as getter for the current mail
message and keeps previously set headers.
Fixes #13090.
Example:
class MailerWithCallback < ActionMailer::Base
after_action :a_callback
def welcome
mail subject: "subject", to: ["joe@example.com"]
end
def a_callback
mail # => returns the current mail message
end
end
*Yves Senn*
* Instrument the generation of Action Mailer messages. The time it takes to
generate a message is written to the log.
*Daniel Schierbeck*
* Invoke mailer defaults as procs only if they are procs, do not convert with
`to_proc`. That an object is convertible to a proc does not mean it's meant
to be always used as a proc.
Fixes #11533.
*Alex Tsukernik*
Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/actionmailer/CHANGELOG.md) for previous changes.
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/actionmailer/CHANGELOG.md) for previous changes.

View File

@ -1,551 +1 @@
* Introduce `render :html` as an option to render HTML content with a content
type of `text/html`. This rendering option calls `ERB::Util.html_escape`
internally to escape unsafe HTML string, so you will have to mark your
string as html safe if you have any HTML tag in it.
Please see #12374 for more detail.
*Prem Sichanugrist*
* Introduce `render :plain` as an option to render content with a content type
of `text/plain`. This is the preferred option if you are planning to render
a plain text content.
Please see #12374 for more detail.
*Prem Sichanugrist*
* Introduce `render :body` as an option for sending a raw content back to
browser. Note that this rendering option will unset the default content type
and does not include "Content-Type" header back in the response.
You should only use this option if you are expecting the "Content-Type"
header to not be set. More information on "Content-Type" header can be found
on RFC 2616, section 7.2.1.
Please see #12374 for more detail.
*Prem Sichanugrist*
* Set stream status to 500 (or 400 on BadRequest) when an error is thrown
before commiting.
Fixes #12552.
*Kevin Casey*
* Add new config option `config.action_dispatch.cookies_serializer` for
specifying a serializer for the signed and encrypted cookie jars.
The possible values are:
* `:json` - serialize cookie values with `JSON`
* `:marshal` - serialize cookie values with `Marshal`
* `:hybrid` - transparently migrate existing `Marshal` cookie values to `JSON`
For new apps `:json` option is added by default and `:marshal` is used
when no option is specified to maintain backwards compatibility.
*Łukasz Sarnacki*, *Matt Aimonetti*, *Guillermo Iguaran*, *Godfrey Chan*, *Rafael Mendonça França*
* `FlashHash` now behaves like a `HashWithIndifferentAccess`.
*Guillermo Iguaran*
* Set the `:shallow_path` scope option as each scope is generated rather than
waiting until the `shallow` option is set. Also make the behavior of the
`:shallow` resource option consistent with the behavior of the `shallow` method.
Fixes #12498.
*Andrew White*, *Aleksi Aalto*
* Properly require `action_view` in `AbstractController::Rendering` to prevent
uninitialized constant error for `ENCODING_FLAG`.
*Philipe Fatio*
* Do not discard query parameters that form a hash with the same root key as
the `wrapper_key` for a request using `wrap_parameters`.
*Josh Jordan*
* Ensure that `request.filtered_parameters` is reset between calls to `process`
in `ActionController::TestCase`.
Fixes #13803.
*Andrew White*
* Fix `rake routes` error when `Rails::Engine` with empty routes is mounted.
Fixes #13810.
*Maurizio De Santis*
* Log which keys were affected by deep munge.
Deep munge solves CVE-2013-0155 security vulnerability, but its
behaviour is definately confusing, so now at least information
about for which keys values were set to nil is visible in logs.
*Łukasz Sarnacki*
* Automatically convert dashes to underscores for shorthand routes, e.g:
get '/our-work/latest'
When running `rake routes` you will get the following output:
Prefix Verb URI Pattern Controller#Action
our_work_latest GET /our-work/latest(.:format) our_work#latest
*Mikko Johansson*
* Automatically convert dashes to underscores for url helpers, e.g:
get '/contact-us' => 'pages#contact'
get '/about-us' => 'pages#about_us'
When running `rake routes` you will get the following output:
Prefix Verb URI Pattern Controller#Action
contact_us GET /contact-us(.:format) pages#contact
about_us GET /about-us(.:format) pages#about_us
*Amr Tamimi*
* Fix stream closing when sending file with `ActionController::Live` included.
Fixes #12381
*Alessandro Diaferia*
* Allow an absolute controller path inside a module scope. Fixes #12777.
Example:
namespace :foo do
# will route to BarController without the namespace.
get '/special', to: '/bar#index'
end
* Unique the segment keys array for non-optimized url helpers
In Rails 3.2 you only needed pass an argument for dynamic segment once so
unique the segment keys array to match the number of args. Since the number
of args is less than required parts the non-optimized code path is selected.
This means to benefit from optimized url generation the arg needs to be
specified as many times as it appears in the path.
Fixes #12808.
*Andrew White*
* Show full route constraints in error message.
When an optimized helper fails to generate, show the full route constraints
in the error message. Previously it would only show the contraints that were
required as part of the path.
Fixes #13592.
*Andrew White*
* Use a custom route visitor for optimized url generation. Fixes #13349.
*Andrew White*
* Allow engine root relative redirects using an empty string.
Example:
# application routes.rb
mount BlogEngine => '/blog'
# engine routes.rb
get '/welcome' => redirect('')
This now redirects to the path `/blog`, whereas before it would redirect
to the application root path. In the case of a path redirect or a custom
redirect if the path returned contains a host then the path is treated as
absolute. Similarly for option redirects, if the options hash returned
contains a `:host` or `:domain` key then the path is treated as absolute.
Fixes #7977.
*Andrew White*
* Fix `Encoding::CompatibilityError` when public path is UTF-8
In #5337 we forced the path encoding to ASCII-8BIT to prevent static file handling
from blowing up before an application has had chance to deal with possibly invalid
urls. However this has a negative side effect of making it an incompatible encoding
if the application's public path has UTF-8 characters in it.
To work around the problem we check to see if the path has a valid encoding once
it has been unescaped. If it is not valid then we can return early since it will
not match any file anyway.
Fixes #13518.
*Andrew White*
* `ActionController::Parameters#permit!` permits hashes in array values.
*Xavier Noria*
* Converts hashes in arrays of unfiltered params to unpermitted params.
Fixes #13382.
*Xavier Noria*
* New config option to opt out of params "deep munging" that was used to
address security vulnerability CVE-2013-0155. In your app config:
config.action_dispatch.perform_deep_munge = false
Take care to understand the security risk involved before disabling this.
[Read more.](https://groups.google.com/forum/#!topic/rubyonrails-security/t1WFuuQyavI)
*Bernard Potocki*
* `rake routes` shows routes defined under assets prefix.
*Ryunosuke SATO*
* Extend cross-site request forgery (CSRF) protection to GET requests with
JavaScript responses, protecting apps from cross-origin `<script>` tags.
*Jeremy Kemper*
* Fix generating a path for engine inside a resources block.
Fixes #8533.
*Piotr Sarnacki*
* Add `Mime::Type.register "text/vcard", :vcf` to the default list of mime types.
*DHH*
* Remove deprecated `ActionController::RecordIdentifier`, use
`ActionView::RecordIdentifier` instead.
*kennyj*
* Fix regression when using `ActionView::Helpers::TranslationHelper#translate` with
`options[:raise]`.
This regression was introduced at ec16ba75a5493b9da972eea08bae630eba35b62f.
*Shota Fukumori (sora_h)*
* Introducing Variants
We often want to render different html/json/xml templates for phones,
tablets, and desktop browsers. Variants make it easy.
The request variant is a specialization of the request format, like `:tablet`,
`:phone`, or `:desktop`.
You can set the variant in a `before_action`:
request.variant = :tablet if request.user_agent =~ /iPad/
Respond to variants in the action just like you respond to formats:
respond_to do |format|
format.html do |html|
html.tablet # renders app/views/projects/show.html+tablet.erb
html.phone { extra_setup; render ... }
end
end
Provide separate templates for each format and variant:
app/views/projects/show.html.erb
app/views/projects/show.html+tablet.erb
app/views/projects/show.html+phone.erb
You can also simplify the variants definition using the inline syntax:
respond_to do |format|
format.js { render "trash" }
format.html.phone { redirect_to progress_path }
format.html.none { render "trash" }
end
Variants also support common `any`/`all` block that formats have.
It works for both inline:
respond_to do |format|
format.html.any { render text: "any" }
format.html.phone { render text: "phone" }
end
and block syntax:
respond_to do |format|
format.html do |variant|
variant.any(:tablet, :phablet){ render text: "any" }
variant.phone { render text: "phone" }
end
end
*Łukasz Strzałkowski*
* Fix render of localized templates without an explicit format using wrong
content header and not passing correct formats to template due to the
introduction of the `NullType` for mimes.
Templates like `hello.it.erb` were subject to this issue.
Fixes #13064.
*Angelo Capilleri*, *Carlos Antonio da Silva*
* Try to escape each part of a url correctly when using a redirect route.
Fixes #13110.
*Andrew White*
* Better error message for typos in assert_response argument.
When the response type argument to `assert_response` is not a known
response type, `assert_response` now throws an ArgumentError with a clear
message. This is intended to help debug typos in the response type.
*Victor Costan*
* Fix formatting for `rake routes` when a section is shorter than a header.
*Sıtkı Bağdat*
* Take a hash with options inside array in `#url_for`.
Example:
url_for [:new, :admin, :post, { param: 'value' }]
# => http://example.com/admin/posts/new?param=value
*Andrey Ognevsky*
* Add `session#fetch` method
fetch behaves like [Hash#fetch](http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch).
It returns a value from the hash for the given key.
If the key cant be found, there are several options:
* With no other arguments, it will raise an KeyError exception.
* If a default value is given, then that will be returned.
* If the optional code block is specified, then that will be run and its result returned.
*Damien Mathieu*
* Don't let strong parameters mutate the given hash via `fetch`
Create a new instance if the given parameter is a `Hash` instead of
passing it to the `convert_hashes_to_parameters` method since it is
overriding its default value.
*Brendon Murphy*, *Doug Cole*
* Add `params` option to `button_to` form helper, which renders the given hash
as hidden form fields.
*Andy Waite*
* Make assets helpers work in the controllers like it works in the views.
Example:
# config/application.rb
config.asset_host = 'http://mycdn.com'
ActionController::Base.helpers.asset_path('fallback.png')
# => http://mycdn.com/assets/fallback.png
Fixes #10051.
*Tima Maslyuchenko*
* Respect `SCRIPT_NAME` when using `redirect` with a relative path
Example:
# application routes.rb
mount BlogEngine => '/blog'
# engine routes.rb
get '/admin' => redirect('admin/dashboard')
This now redirects to the path `/blog/admin/dashboard`, whereas before it would've
generated an invalid url because there would be no slash between the host name and
the path. It also allows redirects to work where the application is deployed to a
subdirectory of a website.
Fixes #7977.
*Andrew White*
* Fixing repond_with working directly on the options hash
This fixes an issue where the respond_with worked directly with the given
options hash, so that if a user relied on it after calling respond_with,
the hash wouldn't be the same.
Fixes #12029.
*bluehotdog*
* Fix `ActionDispatch::RemoteIp::GetIp#calculate_ip` to only check for spoofing
attacks if both `HTTP_CLIENT_IP` and `HTTP_X_FORWARDED_FOR` are set.
Fixes #10844.
*Tamir Duberstein*
* Strong parameters should permit nested number as key.
Fixes #12293.
*kennyj*
* Fix regex used to detect URI schemes in `redirect_to` to be consistent with
RFC 3986.
*Derek Prior*
* Fix incorrect `assert_redirected_to` failure message for protocol-relative
URLs.
*Derek Prior*
* Fix an issue where router can't recognize downcased url encoding path.
Fixes #12269.
*kennyj*
* Fix custom flash type definition. Misusage of the `_flash_types` class variable
caused an error when reloading controllers with custom flash types.
Fixes #12057.
*Ricardo de Cillo*
* Do not break params filtering on `nil` values.
Fixes #12149.
*Vasiliy Ermolovich*
* Development mode exceptions are rendered in text format in case of XHR request.
*Kir Shatrov*
* Fix an issue where :if and :unless controller action procs were being run
before checking for the correct action in the :only and :unless options.
Fixes #11799.
*Nicholas Jakobsen*
* Fix an issue where `assert_dom_equal` and `assert_dom_not_equal` were
ignoring the passed failure message argument.
Fixes #11751.
*Ryan McGeary*
* Allow REMOTE_ADDR, HTTP_HOST and HTTP_USER_AGENT to be overridden from
the environment passed into `ActionDispatch::TestRequest.new`.
Fixes #11590.
*Andrew White*
* Fix an issue where Journey was failing to clear the named routes hash when the
routes were reloaded and since it doesn't overwrite existing routes then if a
route changed but wasn't renamed it kept the old definition. This was being
masked by the optimised url helpers so it only became apparent when passing an
options hash to the url helper.
*Andrew White*
* Skip routes pointing to a redirect or mounted application when generating urls
using an options hash as they aren't relevant and generate incorrect urls.
Fixes #8018.
*Andrew White*
* Move `MissingHelperError` out of the `ClassMethods` module.
*Yves Senn*
* Fix an issue where rails raise exception about missing helper where it
should throw `LoadError`. When helper file exists and only loaded file from
this helper does not exist rails should throw LoadError instead of
`MissingHelperError`.
*Piotr Niełacny*
* Fix `ActionDispatch::ParamsParser#parse_formatted_parameters` to rewind body input stream on
parsing json params.
Fixes #11345.
*Yuri Bol*, *Paul Nikitochkin*
* Ignore spaces around delimiter in Set-Cookie header.
*Yamagishi Kazutoshi*
* Remove deprecated Rails application fallback for integration testing, set
`ActionDispatch.test_app` instead.
*Carlos Antonio da Silva*
* Remove deprecated `page_cache_extension` config.
*Francesco Rodriguez*
* Remove deprecated constants from Action Controller:
ActionController::AbstractRequest => ActionDispatch::Request
ActionController::Request => ActionDispatch::Request
ActionController::AbstractResponse => ActionDispatch::Response
ActionController::Response => ActionDispatch::Response
ActionController::Routing => ActionDispatch::Routing
ActionController::Integration => ActionDispatch::Integration
ActionController::IntegrationTest => ActionDispatch::IntegrationTest
*Carlos Antonio da Silva*
* Fix `Mime::Type.parse` when bad accepts header is looked up. Previously it
was setting `request.formats` with an array containing a `nil` value, which
raised an error when setting the controller formats.
Fixes #10965.
*Becker*
* Merge `:action` from routing scope and assign endpoint if both `:controller`
and `:action` are present. The endpoint assignment only occurs if there is
no `:to` present in the options hash so should only affect routes using the
shorthand syntax (i.e. endpoint is inferred from the path).
Fixes #9856.
*Yves Senn*, *Andrew White*
* Action View extracted from Action Pack.
*Piotr Sarnacki*, *Łukasz Strzałkowski*
Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/actionpack/CHANGELOG.md) for previous changes.
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/actionpack/CHANGELOG.md) for previous changes.

View File

@ -1,331 +1 @@
* Fix ActionView label translation for more than 10 nested elements.
*Vladimir Krylov*
* Added `:plain`, `:html` and `:body` option for `render` method. Please see
Action Pack's release note for more detail.
*Prem Sichanugrist*
* Date select helpers accept a format string for the months selector via the
new option `:month_format_string`.
When rendered, the format string gets passed keys `:number` (integer), and
`:name` (string), in order to be able to interpolate them as in
'%{name} (%<number>02d)'
for example.
This option is motivated by #13618.
*Xavier Noria*
* Added `config.action_view.raise_on_missing_translations` to define whether an
error should be raised for missing translations.
Fixes #13196.
*Kassio Borges*
* Improved ERB dependency detection. New argument types and formattings for the `render`
calls can be matched.
Fixes #13074, #13116.
*João Britto*
* Use `display:none` instead of `display:inline` for hidden fields.
Fixes #6403.
*Gaelian Ditchburn*
* The `video_tag` helper accepts a number as `:size`.
The `:size` option of the `video_tag` helper now can be specified
with a stringified number. The `width` and `height` attributes of
the generated tag will be the same.
*Kuldeep Aggarwal*
* Escape format, negative_format and units options of number helpers
Fixes: CVE-2014-0081
* A Cycle object should accept an array and cycle through it as it would with a set of
comma-separated objects.
arr = [1,2,3]
cycle(arr) # => '1'
cycle(arr) # => '2'
cycle(arr) # => '3'
Previously, it would return the array as a string, because it took the array as a
single object:
arr = [1,2,3]
cycle(arr) # => '[1,2,3]'
cycle(arr) # => '[1,2,3]'
cycle(arr) # => '[1,2,3]'
*Kristian Freeman*
* Label tags generated by collection helpers only inherit the `:index` and
`:namespace` from the input, because only these attributes modifies the
`for` attribute of the label. Also, the input attributes don't have
precedence over the label attributes anymore.
Before:
collection = [[1, true, { class: 'foo' }]]
f.collection_check_boxes :options, collection, :second, :first do |b|
b.label(class: 'my_custom_class')
end
# => <label class="foo" for="user_active_true">1</label>
After:
collection = [[1, true, { class: 'foo' }]]
f.collection_check_boxes :options, collection, :second, :first do |b|
b.label(class: 'my_custom_class')
end
# => <label class="my_custom_class" for="user_active_true">1</label>
*Andriel Nuernberg*
* Fixed a long-standing bug in `json_escape` that causes quotation marks to be stripped.
This method also escapes the \u2028 and \u2029 unicode newline characters which are
treated as \n in JavaScript. This matches the behaviour of the AS::JSON encoder. (The
original change in the encoder was introduced in #10534.)
*Godfrey Chan*
* `ActionView::MissingTemplate` includes underscore when raised for a partial.
Fixes #13002.
*Yves Senn*
* Use `set_backtrace` instead of instance variable `@backtrace` in ActionView exceptions.
*Shimpei Makimoto*
* Fix `simple_format` escapes own output when passing `sanitize: true`.
*Paul Seidemann*
* Ensure `ActionView::Digestor.cache` is correctly cleaned up when
combining recursive templates with `ActionView::Resolver.caching = false`.
*wyaeld*
* Fix `collection_check_boxes` generated hidden input to use the name attribute provided
in the options hash.
*Angel N. Sciortino*
* Fix some edge cases for AV `select` helper with `:selected` option.
*Bogdan Gusiev*
* Ability to pass a block to the `select` helper.
Example:
<%= select(report, "campaign_ids") do %>
<% available_campaigns.each do |c| -%>
<%= content_tag(:option, c.name, value: c.id, data: { tags: c.tags.to_json }) %>
<% end -%>
<% end -%>
*Bogdan Gusiev*
* Handle `:namespace` form option in collection labels.
*Vasiliy Ermolovich*
* Fix `form_for` when both `namespace` and `as` options are present.
`as` option no longer overwrites `namespace` option when generating
html id attribute of the form element.
*Adam Niedzielski*
* Fix `excerpt` when `:separator` is `nil`.
*Paul Nikitochkin*
* Only cache template digests if `config.cache_template_loading` is true.
*Josh Lauer*, *Justin Ridgewell*
* Fixed a bug where the lookup details were not being taken into account
when caching the digest of a template - changes to the details now
cause a different cache key to be used.
*Daniel Schierbeck*
* Added an `extname` hash option for `javascript_include_tag` method.
Before:
javascript_include_tag('templates.jst')
# => <script src="/javascripts/templates.jst.js"></script>
After:
javascript_include_tag('templates.jst', extname: false )
# => <script src="/javascripts/templates.jst"></script>
*Nathan Stitt*
* Fix `current_page?` when the URL contains escaped characters and the
original URL is using the hexadecimal lowercased.
*Rafael Mendonça França*
* Fix `text_area` to behave like `text_field` when `nil` is given as
value.
Before:
f.text_field :field, value: nil #=> <input value="">
f.text_area :field, value: nil #=> <textarea>value of field</textarea>
After:
f.text_area :field, value: nil #=> <textarea></textarea>
*Joel Cogen*
* Element of the `grouped_options_for_select` can
optionally contain html attributes as the last element of the array.
grouped_options_for_select(
[["North America", [['United States','US'],"Canada"], data: { foo: 'bar' }]]
)
*Vasiliy Ermolovich*
* Fix default rendered format problem when calling `render` without :content_type option.
It should return :html. Fix #11393.
*Gleb Mazovetskiy*, *Oleg*, *kennyj*
* Fix `link_to` with block and url hashes.
Before:
link_to(action: 'bar', controller: 'foo') { content_tag(:span, 'Example site') }
# => "<a action=\"bar\" controller=\"foo\"><span>Example site</span></a>"
After:
link_to(action: 'bar', controller: 'foo') { content_tag(:span, 'Example site') }
# => "<a href=\"/foo/bar\"><span>Example site</span></a>"
*Murahashi Sanemat Kenichi*
* Fix "Stack Level Too Deep" error when redering recursive partials.
Fixes #11340.
*Rafael Mendonça França*
* Added an `enforce_utf8` hash option for `form_tag` method.
Control to output a hidden input tag with name `utf8` without monkey
patching.
Before:
form_tag
# => '<form>..<input name="utf8" type="hidden" value="&#x2713;" />..</form>'
After:
form_tag
# => '<form>..<input name="utf8" type="hidden" value="&#x2713;" />..</form>'
form_tag({}, { :enforce_utf8 => false })
# => '<form>....</form>'
*ma2gedev*
* Remove the deprecated `include_seconds` argument from `distance_of_time_in_words`,
pass in an `:include_seconds` hash option to use this feature.
*Carlos Antonio da Silva*
* Remove deprecated block passing to `FormBuilder#new`.
*Vipul A M*
* Pick `DateField` `DateTimeField` and `ColorField` values from stringified options allowing use of symbol keys with helpers.
*Jon Rowe*
* Remove the deprecated `prompt` argument from `grouped_options_for_select`,
pass in a `:prompt` hash option to use this feature.
*kennyj*
* Always escape the result of `link_to_unless` method.
Before:
link_to_unless(true, '<b>Showing</b>', 'github.com')
# => "<b>Showing</b>"
After:
link_to_unless(true, '<b>Showing</b>', 'github.com')
# => "&lt;b&gt;Showing&lt;/b&gt;"
*dtaniwaki*
* Use a case insensitive URI Regexp for #asset_path.
This fix a problem where the same asset path using different case are generating
different URIs.
Before:
image_tag("HTTP://google.com")
# => "<img alt=\"Google\" src=\"/assets/HTTP://google.com\" />"
image_tag("http://google.com")
# => "<img alt=\"Google\" src=\"http://google.com\" />"
After:
image_tag("HTTP://google.com")
# => "<img alt=\"Google\" src=\"HTTP://google.com\" />"
image_tag("http://google.com")
# => "<img alt=\"Google\" src=\"http://google.com\" />"
*David Celis*
* Element of the `collection_check_boxes` and `collection_radio_buttons` can
optionally contain html attributes as the last element of the array.
*Vasiliy Ermolovich*
* Update the HTML `BOOLEAN_ATTRIBUTES` in `ActionView::Helpers::TagHelper`
to conform to the latest HTML 5.1 spec. Add attributes `allowfullscreen`,
`default`, `inert`, `sortable`, `truespeed`, `typemustmatch`. Fix attribute
`seamless` (previously misspelled `seemless`).
*Alex Peattie*
* Fix an issue where partials with a number in the filename weren't being digested for cache dependencies.
*Bryan Ricker*
* First release, ActionView extracted from ActionPack.
*Piotr Sarnacki*, *Łukasz Strzałkowski*
Please check [4-0-stable (ActionPack's CHANGELOG)](https://github.com/rails/rails/blob/4-0-stable/actionpack/CHANGELOG.md) for previous changes.
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/actionview/CHANGELOG.md) for previous changes.

View File

@ -1,72 +1 @@
* `#to_param` returns `nil` if `#to_key` returns `nil`. Fixes #11399.
*Yves Senn*
* Ability to specify multiple contexts when defining a validation.
Example:
class Person
include ActiveModel::Validations
attr_reader :name
validates_presence_of :name, on: [:verify, :approve]
end
person = Person.new
person.valid? # => true
person.valid?(:verify) # => false
person.errors.full_messages_for(:name) # => ["Name can't be blank"]
person.valid?(:approve) # => false
person.errors.full_messages_for(:name) # => ["Name can't be blank"]
*Vince Puzzella*
* `attribute_changed?` now accepts a hash to check if the attribute was
changed `:from` and/or `:to` a given value.
Example:
model.name_changed?(from: "Pete", to: "Ringo")
*Tejas Dinkar*
* Fix `has_secure_password` to honor bcrypt-ruby's cost attribute.
*T.J. Schuck*
* Updated the `ActiveModel::Dirty#changed_attributes` method to be indifferent between using
symbols and strings as keys.
*William Myers*
* Added new API methods `reset_changes` and `changes_applied` to `ActiveModel::Dirty`
that control changes state. Previsously you needed to update internal
instance variables, but now API methods are available.
*Bogdan Gusiev*
* Fix `has_secure_password` not to trigger `password_confirmation` validations
if no `password_confirmation` is set.
*Vladimir Kiselev*
* `inclusion` / `exclusion` validations with ranges will only use the faster
`Range#cover` for numerical ranges, and the more accurate `Range#include?`
for non-numerical ones.
Fixes range validations like `:a..:f` that used to pass with values like `:be`.
Fixes #10593.
*Charles Bergeron*
* Fix regression in `has_secure_password`. When a password is set, but a
confirmation is an empty string, it would incorrectly save.
*Steve Klabnik* and *Phillip Calvin*
* Deprecate `Validator#setup`. This should be done manually now in the validator's constructor.
*Nick Sutterer*
Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/activemodel/CHANGELOG.md) for previous changes.
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activemodel/CHANGELOG.md) for previous changes.

File diff suppressed because it is too large Load Diff

View File

@ -26,636 +26,4 @@
*Jeremy Kemper*
* Added `Object#presence_in` to simplify value whitelisting.
Before:
params[:bucket_type].in?(%w( project calendar )) ? params[:bucket_type] : nil
After:
params[:bucket_type].presence_in %w( project calendar )
*DHH*
* Time helpers honor the application time zone when passed a date.
*Xavier Noria*
* Fix the implementation of Multibyte::Unicode.tidy_bytes for JRuby
The existing implementation caused JRuby to raise the error:
`Encoding::ConverterNotFoundError: code converter not found (UTF-8 to UTF8-MAC)`
*Justin Coyne*
* Fix `to_param` behavior when there are nested empty hashes.
Before:
params = {c: 3, d: {}}.to_param # => "&c=3"
After:
params = {c: 3, d: {}}.to_param # => "c=3&d="
Fixes #13892.
*Hincu Petru*
* Deprecate custom `BigDecimal` serialization.
Deprecate the custom `BigDecimal` serialization that is included when requiring
`active_support/all` as a fix for #12467. Let Ruby handle YAML serialization
for `BigDecimal` instead.
*David Celis*
* Fix parsing bugs in `XmlMini`
Symbols or boolean parsing would raise an error for non string values (e.g.
integers). Decimal parsing would fail due to a missing requirement.
*Birkir A. Barkarson*
* Maintain the current timezone when calling `wrap_with_time_zone`
Extend the solution from the fix for #12163 to the general case where `Time`
methods are wrapped with a time zone.
Fixes #12596.
*Andrew White*
* Remove behavior that automatically remove the Date/Time stubs, added by `travel`
and `travel_to` methods, after each test case.
Now users have to use the `travel_back` or the block version of `travel` and
`travel_to` methods to clean the stubs.
*Rafael Mendonça França*
* Add `travel_back` to remove stubs from `travel` and `travel_to`.
*Rafael Mendonça França*
* Remove the deprecation about the `#filter` method.
Filter objects should now rely on method corresponding to the filter type
(e.g. `#before`).
*Aaron Patterson*
* Add `ActiveSupport::JSON::Encoding.time_precision` as a way to configure the
precision of encoded time values:
Time.utc(2000, 1, 1).as_json # => "2000-01-01T00:00:00.000Z"
ActiveSupport::JSON::Encoding.time_precision = 0
Time.utc(2000, 1, 1).as_json # => "2000-01-01T00:00:00Z"
*Parker Selbert*
* Maintain the current timezone when calling `change` during DST overlap
Currently if a time is changed during DST overlap in the autumn then the method
`period_for_local` will return the DST period. However if the original time is
not DST then this can be surprising and is not what is generally wanted. This
commit changes that behavior to maintain the current period if it's in the list
of periods returned by `periods_for_local`.
Fixes #12163.
*Andrew White*
* Added `Hash#compact` and `Hash#compact!` for removing items with nil value
from hash.
*Celestino Gomes*
* Maintain proleptic gregorian in Time#advance
`Time#advance` uses `Time#to_date` and `Date#advance` to calculate a new date.
The `Date` object returned by `Time#to_date` is constructed with the assumption
that the `Time` object represents a proleptic gregorian date, but it is
configured to observe the default julian calendar reform date (2299161j)
for purposes of calculating month, date and year:
Time.new(1582, 10, 4).to_date.to_s # => "1582-09-24"
Time.new(1582, 10, 4).to_date.gregorian.to_s # => "1582-10-04"
This patch ensures that when the intermediate `Date` object is advanced
to yield a new `Date` object, that the `Time` object for return is constructed
with a proleptic gregorian month, date and year.
*Riley Lynch*
* `MemCacheStore` should only accept a `Dalli::Client`, or create one.
*arthurnn*
* Don't lazy load the `tzinfo` library as it causes problems on Windows.
Fixes #13553.
*Andrew White*
* Use `remove_possible_method` instead of `remove_method` to avoid
a `NameError` to be thrown on FreeBSD with the `Date` object.
*Rafael Mendonça França*, *Robin Dupret*
* `blank?` and `present?` commit to return singletons.
*Xavier Noria*, *Pavel Pravosud*
* Fixed Float related error in NumberHelper with large precisions.
Before:
ActiveSupport::NumberHelper.number_to_rounded '3.14159', precision: 50
#=> "3.14158999999999988261834005243144929409027099609375"
After:
ActiveSupport::NumberHelper.number_to_rounded '3.14159', precision: 50
#=> "3.14159000000000000000000000000000000000000000000000"
*Kenta Murata*, *Akira Matsuda*
* Default the new `I18n.enforce_available_locales` config to `true`, meaning
`I18n` will make sure that all locales passed to it must be declared in the
`available_locales` list.
To disable it add the following configuration to your application:
config.i18n.enforce_available_locales = false
This also ensures I18n configuration is properly initialized taking the new
option into account, to avoid their deprecations while booting up the app.
*Carlos Antonio da Silva*, *Yves Senn*
* Introduce Module#concerning: a natural, low-ceremony way to separate
responsibilities within a class.
Imported from https://github.com/37signals/concerning#readme
class Todo < ActiveRecord::Base
concerning :EventTracking do
included do
has_many :events
end
def latest_event
...
end
private
def some_internal_method
...
end
end
concerning :Trashable do
def trashed?
...
end
def latest_event
super some_option: true
end
end
end
is equivalent to defining these modules inline, extending them into
concerns, then mixing them in to the class.
Inline concerns tame "junk drawer" classes that intersperse many unrelated
class-level declarations, public instance methods, and private
implementation. Coalesce related bits and give them definition.
These are a stepping stone toward future growth & refactoring.
When to move on from an inline concern:
* Encapsulating state? Extract collaborator object.
* Encompassing more public behavior or implementation? Move to separate file.
* Sharing behavior among classes? Move to separate file.
*Jeremy Kemper*
* Fix file descriptor being leaked on each call to `Kernel.silence_stream`.
*Mario Visic*
* Added `Date#all_week/month/quarter/year` for generating date ranges.
*Dmitriy Meremyanin*
* Add `Time.zone.yesterday` and `Time.zone.tomorrow`. These follow the
behavior of Ruby's `Date.yesterday` and `Date.tomorrow` but return localized
versions, similar to how `Time.zone.today` has returned a localized version
of `Date.today`.
*Colin Bartlett*
* Show valid keys when `assert_valid_keys` raises an exception, and show the
wrong value as it was entered.
*Gonzalo Rodríguez-Baltanás Díaz*
* Both `cattr_*` and `mattr_*` method definitions now live in `active_support/core_ext/module/attribute_accessors`.
Requires to `active_support/core_ext/class/attribute_accessors` are
deprecated and will be removed in Ruby on Rails 4.2.
*Genadi Samokovarov*
* Deprecated `Numeric#{ago,until,since,from_now}`, the user is expected to explicitly
convert the value into an AS::Duration, i.e. `5.ago` => `5.seconds.ago`
This will help to catch subtle bugs like:
def recent?(days = 3)
self.created_at >= days.ago
end
The above code would check if the model is created within the last 3 **seconds**.
In the future, `Numeric#{ago,until,since,from_now}` should be removed completely,
or throw some sort of errors to indicate there are no implicit conversion from
Numeric to AS::Duration.
*Godfrey Chan*
* Requires JSON gem version 1.7.7 or above due to a security issue in older versions.
*Godfrey Chan*
* Removed the old pure-Ruby JSON encoder and switched to a new encoder based on the built-in JSON
gem.
Support for encoding `BigDecimal` as a JSON number, as well as defining custom `encode_json`
methods to control the JSON output has been **removed from core**. The new encoder will always
encode BigDecimals as `String`s and ignore any custom `encode_json` methods.
The old encoder has been extracted into the `activesupport-json_encoder` gem. Installing that
gem will bring back the ability to encode `BigDecimal`s as numbers as well as `encode_json`
support.
Setting the related configuration `ActiveSupport.encode_big_decimal_as_string` without the
`activesupport-json_encoder` gem installed will raise an error.
*Godfrey Chan*
* Add `ActiveSupport::Testing::TimeHelpers#travel` and `#travel_to`. These methods change current
time to the given time or time difference by stubbing `Time.now` and `Date.today` to return the
time or date after the difference calculation, or the time or date that got passed into the
method respectively.
Example for `#travel`:
Time.now # => 2013-11-09 15:34:49 -05:00
travel 1.day
Time.now # => 2013-11-10 15:34:49 -05:00
Date.today # => Sun, 10 Nov 2013
Example for `#travel_to`:
Time.now # => 2013-11-09 15:34:49 -05:00
travel_to Time.new(2004, 11, 24, 01, 04, 44)
Time.now # => 2004-11-24 01:04:44 -05:00
Date.today # => Wed, 24 Nov 2004
Both of these methods also accept a block, which will return the current time back to its
original state at the end of the block:
Time.now # => 2013-11-09 15:34:49 -05:00
travel 1.day do
User.create.created_at # => Sun, 10 Nov 2013 15:34:49 EST -05:00
end
travel_to Time.new(2004, 11, 24, 01, 04, 44) do
User.create.created_at # => Wed, 24 Nov 2004 01:04:44 EST -05:00
end
Time.now # => 2013-11-09 15:34:49 -05:00
This module is included in `ActiveSupport::TestCase` automatically.
*Prem Sichanugrist*, *DHH*
* Unify `cattr_*` interface: allow to pass a block to `cattr_reader`.
Example:
class A
cattr_reader(:defr) { 'default_reader_value' }
end
A.defr # => 'default_reader_value'
*Alexey Chernenkov*
* Improved compatibility with the stdlib JSON gem.
Previously, calling `::JSON.{generate,dump}` sometimes causes unexpected
failures such as intridea/multi_json#86.
`::JSON.{generate,dump}` now bypasses the ActiveSupport JSON encoder
completely and yields the same result with or without ActiveSupport. This
means that it will **not** call `as_json` and will ignore any options that
the JSON gem does not natively understand. To invoke ActiveSupport's JSON
encoder instead, use `obj.to_json(options)` or
`ActiveSupport::JSON.encode(obj, options)`.
*Godfrey Chan*
* Fix Active Support `Time#to_json` and `DateTime#to_json` to return 3 decimal
places worth of fractional seconds, similar to `TimeWithZone`.
*Ryan Glover*
* Removed circular reference protection in JSON encoder, deprecated
`ActiveSupport::JSON::Encoding::CircularReferenceError`.
*Godfrey Chan*, *Sergio Campamá*
* Add `capitalize` option to `Inflector.humanize`, so strings can be humanized without being capitalized:
'employee_salary'.humanize # => "Employee salary"
'employee_salary'.humanize(capitalize: false) # => "employee salary"
*claudiob*
* Fixed `Object#as_json` and `Struct#as_json` not working properly with options. They now take
the same options as `Hash#as_json`:
struct = Struct.new(:foo, :bar).new
struct.foo = "hello"
struct.bar = "world"
json = struct.as_json(only: [:foo]) # => {foo: "hello"}
*Sergio Campamá*, *Godfrey Chan*
* Added `Numeric#in_milliseconds`, like `1.hour.in_milliseconds`, so we can feed them to JavaScript functions like `getTime()`.
*DHH*
* Calling `ActiveSupport::JSON.decode` with unsupported options now raises an error.
*Godfrey Chan*
* Support `:unless_exist` in `FileStore`.
*Michael Grosser*
* Fix `slice!` deleting the default value of the hash.
*Antonio Santos*
* `require_dependency` accepts objects that respond to `to_path`, in
particular `Pathname` instances.
*Benjamin Fleischer*
* Disable the ability to iterate over Range of AS::TimeWithZone
due to significant performance issues.
*Bogdan Gusiev*
* Allow attaching event subscribers to ActiveSupport::Notifications namespaces
before they're defined. Essentially, this means instead of this:
class JokeSubscriber < ActiveSupport::Subscriber
def sql(event)
puts "A rabbi and a priest walk into a bar..."
end
# This call needs to happen *after* defining the methods.
attach_to "active_record"
end
You can do this:
class JokeSubscriber < ActiveSupport::Subscriber
# This is much easier to read!
attach_to "active_record"
def sql(event)
puts "A rabbi and a priest walk into a bar..."
end
end
This should make it easier to read and understand these subscribers.
*Daniel Schierbeck*
* Add `Date#middle_of_day`, `DateTime#middle_of_day` and `Time#middle_of_day` methods.
Also added `midday`, `noon`, `at_midday`, `at_noon` and `at_middle_of_day` as aliases.
*Anatoli Makarevich*
* Fix ActiveSupport::Cache::FileStore#cleanup to no longer rely on missing each_key method.
*Murray Steele*
* Ensure that autoloaded constants in all-caps nestings are marked as
autoloaded.
*Simon Coffey*
* Add `String#remove(pattern)` as a short-hand for the common pattern of
`String#gsub(pattern, '')`.
*DHH*
* Adds a new deprecation behaviour that raises an exception. Throwing this
line into +config/environments/development.rb+
ActiveSupport::Deprecation.behavior = :raise
will cause the application to raise an +ActiveSupport::DeprecationException+
on deprecations.
Use this for aggressive deprecation cleanups.
*Xavier Noria*
* Remove 'cow' => 'kine' irregular inflection from default inflections.
*Andrew White*
* Add `DateTime#to_s(:iso8601)` and `Date#to_s(:iso8601)` for consistency.
*Andrew White*
* Add `Time#to_s(:iso8601)` for easy conversion of times to the iso8601 format for easy Javascript date parsing.
*DHH*
* Improve `ActiveSupport::Cache::MemoryStore` cache size calculation.
The memory used by a key/entry pair is calculated via `#cached_size`:
def cached_size(key, entry)
key.to_s.bytesize + entry.size + PER_ENTRY_OVERHEAD
end
The value of `PER_ENTRY_OVERHEAD` is 240 bytes based on an [empirical
estimation](https://gist.github.com/ssimeonov/6047200) for 64-bit MRI on
1.9.3 and 2.0.
Fixes #11512.
*Simeon Simeonov*
* Only raise `Module::DelegationError` if it's the source of the exception.
Fixes #10559.
*Andrew White*
* Make `Time.at_with_coercion` retain the second fraction and return local time.
Fixes #11350.
*Neer Friedman*, *Andrew White*
* Make `HashWithIndifferentAccess#select` always return the hash, even when
`Hash#select!` returns `nil`, to allow further chaining.
*Marc Schütz*
* Remove deprecated `String#encoding_aware?` core extensions (`core_ext/string/encoding`).
*Arun Agrawal*
* Remove deprecated `Module#local_constant_names` in favor of `Module#local_constants`.
*Arun Agrawal*
* Remove deprecated `DateTime.local_offset` in favor of `DateTime.civil_from_format`.
*Arun Agrawal*
* Remove deprecated `Logger` core extensions (`core_ext/logger.rb`).
*Carlos Antonio da Silva*
* Remove deprecated `Time#time_with_datetime_fallback`, `Time#utc_time`
and `Time#local_time` in favor of `Time#utc` and `Time#local`.
*Vipul A M*
* Remove deprecated `Hash#diff` with no replacement.
If you're using it to compare hashes for the purpose of testing, please use
MiniTest's `assert_equal` instead.
*Carlos Antonio da Silva*
* Remove deprecated `Date#to_time_in_current_zone` in favor of `Date#in_time_zone`.
*Vipul A M*
* Remove deprecated `Proc#bind` with no replacement.
*Carlos Antonio da Silva*
* Remove deprecated `Array#uniq_by` and `Array#uniq_by!`, use native
`Array#uniq` and `Array#uniq!` instead.
*Carlos Antonio da Silva*
* Remove deprecated `ActiveSupport::BasicObject`, use `ActiveSupport::ProxyObject` instead.
*Carlos Antonio da Silva*
* Remove deprecated `BufferedLogger`, use `ActiveSupport::Logger` instead.
*Yves Senn*
* Remove deprecated `assert_present` and `assert_blank` methods, use `assert
object.blank?` and `assert object.present?` instead.
*Yves Senn*
* Fix return value from `BacktraceCleaner#noise` when the cleaner is configured
with multiple silencers.
Fixes #11030.
*Mark J. Titorenko*
* `HashWithIndifferentAccess#select` now returns a `HashWithIndifferentAccess`
instance instead of a `Hash` instance.
Fixes #10723.
*Albert Llop*
* Add `DateTime#usec` and `DateTime#nsec` so that `ActiveSupport::TimeWithZone` keeps
sub-second resolution when wrapping a `DateTime` value.
Fixes #10855.
*Andrew White*
* Fix `ActiveSupport::Dependencies::Loadable#load_dependency` calling
`#blame_file!` on Exceptions that do not have the Blamable mixin
*Andrew Kreiling*
* Override `Time.at` to support the passing of Time-like values when called with a single argument.
*Andrew White*
* Prevent side effects to hashes inside arrays when
`Hash#with_indifferent_access` is called.
Fixes #10526.
*Yves Senn*
* Removed deprecated `ActiveSupport::JSON::Variable` with no replacement.
*Toshinori Kajihara*
* Raise an error when multiple `included` blocks are defined for a Concern.
The old behavior would silently discard previously defined blocks, running
only the last one.
*Mike Dillon*
* Replace `multi_json` with `json`.
Since Rails requires Ruby 1.9 and since Ruby 1.9 includes `json` in the standard library,
`multi_json` is no longer necessary.
*Erik Michaels-Ober*
* Added escaping of U+2028 and U+2029 inside the json encoder.
These characters are legal in JSON but break the Javascript interpreter.
After escaping them, the JSON is still legal and can be parsed by Javascript.
*Mario Caropreso + Viktor Kelemen + zackham*
* Fix skipping object callbacks using metadata fetched via callback chain
inspection methods (`_*_callbacks`)
*Sean Walbran*
* Add a `fetch_multi` method to the cache stores. The method provides
an easy to use API for fetching multiple values from the cache.
Example:
# Calculating scores is expensive, so we only do it for posts
# that have been updated. Cache keys are automatically extracted
# from objects that define a #cache_key method.
scores = Rails.cache.fetch_multi(*posts) do |post|
calculate_score(post)
end
*Daniel Schierbeck*
Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/activesupport/CHANGELOG.md) for previous changes.
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activesupport/CHANGELOG.md) for previous changes.

View File

@ -1,13 +1 @@
* Fixed missing line and shadow on service pages(404, 422, 500).
*Dmitry Korotkov*
* Removed repetitive th tags. Instead of them added one th tag with a colspan attribute.
*Sıtkı Bağdat*
* Added the Rails maintenance policy to the guides.
*Matias Korhonen*
Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/guides/CHANGELOG.md) for previous changes.
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/guides/CHANGELOG.md) for previous changes.

View File

@ -1,312 +1 @@
* Do not crash when `config/secrets.yml` is empty.
*Yves Senn*
* Set `dump_schema_after_migration` config values in production.
Set `config.active_record.dump_schema_after_migration` as false
in the generated `config/environments/production.rb` file.
*Emil Soman*
* Added Thor-action for creation of migrations.
Fixes #13588, #12674.
*Gert Goet*
* Ensure that `bin/rails` is a file before trying to execute it.
Fixes #13825.
*bronzle*
* Use single quotes in generated files.
*Cristian Mircea Messel*, *Chulki Lee*
* The `Gemfile` of new applications depends on SDoc ~> 0.4.0.
*Xavier Noria*
* `test_help.rb` now automatically checks/maintains your test database
schema. (Use `config.active_record.maintain_test_schema = false` to
disable.)
*Jon Leighton*
* Configure `secrets.yml` and `database.yml` to read configuration
from the system environment by default for production.
*José Valim*
* `config.assets.raise_runtime_errors` is set to true by default
This option has been introduced in
[sprockets-rails#100][https://github.com/rails/sprockets-rails/pull/100]
and defaults to true in new applications in development.
*Richard Schneeman*
* Generates `html` and `text` templates for mailers by default.
*Kassio Borges*
* Move `secret_key_base` from `config/initializers/secret_token.rb`
to `config/secrets.yml`.
`secret_key_base` is now saved in `Rails.application.secrets.secret_key_base`
and it fallbacks to the value of `config.secret_key_base` when it is not
present in `config/secrets.yml`.
`config/initializers/secret_token.rb` is not generated by default
in new applications.
*Guillermo Iguaran*
* Generate a new `secrets.yml` file in the `config` folder for new
applications. By default, this file contains the application's `secret_key_base`,
but it could also be used to store other secrets such as access keys for external
APIs.
The secrets added to this file will be accessible via `Rails.application.secrets`.
For example, with the following `secrets.yml`:
development:
secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
some_api_key: SOMEKEY
`Rails.application.secrets.some_api_key` will return `SOMEKEY` in the development
environment.
*Guillermo Iguaran*
* Add `ENV['DATABASE_URL']` support in `rails dbconsole`. Fixes #13320.
*Huiming Teo*
* Add `Application#message_verifier` method to return a message verifier.
This verifier can be used to generate and verify signed messages in the application.
message = Rails.application.message_verifier(:sensitive_data).generate('my sensible data')
Rails.application.message_verifier(:sensitive_data).verify(message)
# => 'my sensible data'
It is recommended not to use the same verifier for different things, so you can get different
verifiers passing the name argument.
message = Rails.application.message_verifier(:cookies).generate('my sensible cookie data')
See the `ActiveSupport::MessageVerifier` documentation for more information.
*Rafael Mendonça França*
* The [Spring application
preloader](https://github.com/rails/spring) is now installed
by default for new applications. It uses the development group of
the Gemfile, so will not be installed in production.
*Jon Leighton*
* Uses .railsrc while creating new plugin if it is available.
Fixes #10700.
*Prathamesh Sonpatki*
* Remove turbolinks when generating a new application based on a template that skips it.
Example:
Skips turbolinks adding `add_gem_entry_filter { |gem| gem.name != "turbolinks" }`
to the template.
*Lauro Caetano*
* Instrument an `load_config_initializer.railties` event on each load of configuration initializer
from `config/initializers`. Subscribers should be attached before `load_config_initializers`
initializer completed.
Registering subscriber examples:
# config/application.rb
module RailsApp
class Application < Rails::Application
ActiveSupport::Notifications.subscribe('load_config_initializer.railties') do |*args|
event = ActiveSupport::Notifications::Event.new(*args)
puts "Loaded initializer #{event.payload[:initializer]} (#{event.duration}ms)"
end
end
end
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < ::Rails::Engine
config.before_initialize do
ActiveSupport::Notifications.subscribe('load_config_initializer.railties') do |*args|
event = ActiveSupport::Notifications::Event.new(*args)
puts "Loaded initializer #{event.payload[:initializer]} (#{event.duration}ms)"
end
end
end
end
*Paul Nikitochkin*
* Support for Pathnames in eager load paths.
*Mike Pack*
* Fixed missing line and shadow on service pages(404, 422, 500).
*Dmitry Korotkov*
* `BACKTRACE` environment variable to show unfiltered backtraces for
test failures.
Example:
$ BACKTRACE=1 ruby -Itest ...
# or with rake
$ BACKTRACE=1 bin/rake
*Yves Senn*
* Removal of all javascript stuff (gems and files) when generating a new
application using the `--skip-javascript` option.
*Robin Dupret*
* Make the application name snake cased when it contains spaces
The application name is used to fill the `database.yml` and
`session_store.rb` files ; previously, if the provided name
contained whitespaces, it led to unexpected names in these files.
*Robin Dupret*
* Added `--model-name` option to `ScaffoldControllerGenerator`.
*yalab*
* Expose MiddlewareStack#unshift to environment configuration.
*Ben Pickles*
* `rails server` will only extend the logger to output to STDOUT
in development environment.
*Richard Schneeman*
* Don't require passing path to app before options in `rails new`
and `rails plugin new`
*Piotr Sarnacki*
* rake notes now searches *.less files
*Josh Crowder*
* Generate nested route for namespaced controller generated using
`rails g controller`.
Fixes #11532.
Example:
rails g controller admin/dashboard index
# Before:
get "dashboard/index"
# After:
namespace :admin do
get "dashboard/index"
end
*Prathamesh Sonpatki*
* Fix the event name of action_dispatch requests.
*Rafael Mendonça França*
* Make `config.log_level` work with custom loggers.
*Max Shytikov*
* Changed stylesheet load order in the stylesheet manifest generator.
Fixes #11639.
*Pawel Janiak*
* Added generated unit test for generator generator using new
`test:generators` rake task.
*Josef Šimánek*
* Removed `update:application_controller` rake task.
*Josef Šimánek*
* Fix `rake environment` to do not eager load modules
*Paul Nikitochkin*
* Fix `rake notes` to look into `*.sass` files
*Yuri Artemev*
* Removed deprecated `Rails.application.railties.engines`.
*Arun Agrawal*
* Removed deprecated threadsafe! from Rails Config.
*Paul Nikitochkin*
* Remove deprecated `ActiveRecord::Generators::ActiveModel#update_attributes` in
favor of `ActiveRecord::Generators::ActiveModel#update`.
*Vipul A M*
* Remove deprecated `config.whiny_nils` option.
*Vipul A M*
* Rename `commands/plugin_new.rb` to `commands/plugin.rb` and fix references
*Richard Schneeman*
* Fix `rails plugin --help` command.
*Richard Schneeman*
* Omit turbolinks configuration completely on skip_javascript generator option.
*Nikita Fedyashev*
* Removed deprecated rake tasks for running tests: `rake test:uncommitted` and
`rake test:recent`.
*John Wang*
* Clearing autoloaded constants triggers routes reloading.
Fixes #10685.
*Xavier Noria*
* Fixes bug with scaffold generator with `--assets=false --resource-route=false`.
Fixes #9525.
*Arun Agrawal*
* Rails::Railtie no longer forces the Rails::Configurable module on everything
that subclasses it. Instead, the methods from Rails::Configurable have been
moved to class methods in Railtie and the Railtie has been made abstract.
*John Wang*
* Changes repetitive th tags to use colspan attribute in `index.html.erb` template.
*Sıtkı Bağdat*
Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/railties/CHANGELOG.md) for previous changes.
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/railties/CHANGELOG.md) for previous changes.