mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Start Rails 6.0 development!!!
🎉🎉🎉
This commit is contained in:
parent
bec74e1d4a
commit
1c383df324
27 changed files with 89 additions and 1928 deletions
80
Gemfile.lock
80
Gemfile.lock
|
@ -34,63 +34,63 @@ GIT
|
|||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
actioncable (5.2.0.beta2)
|
||||
actionpack (= 5.2.0.beta2)
|
||||
actioncable (6.0.0.alpha)
|
||||
actionpack (= 6.0.0.alpha)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
actionmailer (5.2.0.beta2)
|
||||
actionpack (= 5.2.0.beta2)
|
||||
actionview (= 5.2.0.beta2)
|
||||
activejob (= 5.2.0.beta2)
|
||||
actionmailer (6.0.0.alpha)
|
||||
actionpack (= 6.0.0.alpha)
|
||||
actionview (= 6.0.0.alpha)
|
||||
activejob (= 6.0.0.alpha)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (5.2.0.beta2)
|
||||
actionview (= 5.2.0.beta2)
|
||||
activesupport (= 5.2.0.beta2)
|
||||
actionpack (6.0.0.alpha)
|
||||
actionview (= 6.0.0.alpha)
|
||||
activesupport (= 6.0.0.alpha)
|
||||
rack (~> 2.0)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
actionview (5.2.0.beta2)
|
||||
activesupport (= 5.2.0.beta2)
|
||||
actionview (6.0.0.alpha)
|
||||
activesupport (= 6.0.0.alpha)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
||||
activejob (5.2.0.beta2)
|
||||
activesupport (= 5.2.0.beta2)
|
||||
activejob (6.0.0.alpha)
|
||||
activesupport (= 6.0.0.alpha)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (5.2.0.beta2)
|
||||
activesupport (= 5.2.0.beta2)
|
||||
activerecord (5.2.0.beta2)
|
||||
activemodel (= 5.2.0.beta2)
|
||||
activesupport (= 5.2.0.beta2)
|
||||
activemodel (6.0.0.alpha)
|
||||
activesupport (= 6.0.0.alpha)
|
||||
activerecord (6.0.0.alpha)
|
||||
activemodel (= 6.0.0.alpha)
|
||||
activesupport (= 6.0.0.alpha)
|
||||
arel (>= 9.0)
|
||||
activestorage (5.2.0.beta2)
|
||||
actionpack (= 5.2.0.beta2)
|
||||
activerecord (= 5.2.0.beta2)
|
||||
activestorage (6.0.0.alpha)
|
||||
actionpack (= 6.0.0.alpha)
|
||||
activerecord (= 6.0.0.alpha)
|
||||
marcel (~> 0.3.1)
|
||||
activesupport (5.2.0.beta2)
|
||||
activesupport (6.0.0.alpha)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
rails (5.2.0.beta2)
|
||||
actioncable (= 5.2.0.beta2)
|
||||
actionmailer (= 5.2.0.beta2)
|
||||
actionpack (= 5.2.0.beta2)
|
||||
actionview (= 5.2.0.beta2)
|
||||
activejob (= 5.2.0.beta2)
|
||||
activemodel (= 5.2.0.beta2)
|
||||
activerecord (= 5.2.0.beta2)
|
||||
activestorage (= 5.2.0.beta2)
|
||||
activesupport (= 5.2.0.beta2)
|
||||
rails (6.0.0.alpha)
|
||||
actioncable (= 6.0.0.alpha)
|
||||
actionmailer (= 6.0.0.alpha)
|
||||
actionpack (= 6.0.0.alpha)
|
||||
actionview (= 6.0.0.alpha)
|
||||
activejob (= 6.0.0.alpha)
|
||||
activemodel (= 6.0.0.alpha)
|
||||
activerecord (= 6.0.0.alpha)
|
||||
activestorage (= 6.0.0.alpha)
|
||||
activesupport (= 6.0.0.alpha)
|
||||
bundler (>= 1.3.0)
|
||||
railties (= 5.2.0.beta2)
|
||||
railties (= 6.0.0.alpha)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
railties (5.2.0.beta2)
|
||||
actionpack (= 5.2.0.beta2)
|
||||
activesupport (= 5.2.0.beta2)
|
||||
railties (6.0.0.alpha)
|
||||
actionpack (= 6.0.0.alpha)
|
||||
activesupport (= 6.0.0.alpha)
|
||||
method_source
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
|
@ -274,7 +274,7 @@ GEM
|
|||
hiredis (0.6.1-java)
|
||||
http_parser.rb (0.6.0)
|
||||
httpclient (2.8.3)
|
||||
i18n (0.9.1)
|
||||
i18n (0.9.3)
|
||||
concurrent-ruby (~> 1.0)
|
||||
io-like (0.3.0)
|
||||
jdbc-mysql (5.1.44)
|
||||
|
@ -333,8 +333,8 @@ GEM
|
|||
mysql2 (0.4.9)
|
||||
mysql2 (0.4.9-x64-mingw32)
|
||||
mysql2 (0.4.9-x86-mingw32)
|
||||
nio4r (2.1.0)
|
||||
nio4r (2.1.0-java)
|
||||
nio4r (2.2.0)
|
||||
nio4r (2.2.0-java)
|
||||
nokogiri (1.8.1)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
nokogiri (1.8.1-java)
|
||||
|
@ -496,6 +496,8 @@ GEM
|
|||
websocket (1.2.4)
|
||||
websocket-driver (0.6.5)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-driver (0.6.5-java)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.2)
|
||||
xpath (2.1.0)
|
||||
nokogiri (~> 1.3)
|
||||
|
|
|
@ -1 +1 @@
|
|||
5.2.0.beta2
|
||||
6.0.0.alpha
|
||||
|
|
|
@ -1,34 +1,3 @@
|
|||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Removed deprecated evented redis adapter.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Support redis-rb 4.0.
|
||||
|
||||
*Jeremy Daer*
|
||||
|
||||
* Hash long stream identifiers when using PostgreSQL adapter.
|
||||
|
||||
PostgreSQL has a limit on identifiers length (63 chars, [docs](https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS)).
|
||||
Provided fix minifies identifiers longer than 63 chars by hashing them with SHA1.
|
||||
|
||||
Fixes #28751.
|
||||
|
||||
*Vladimir Dementyev*
|
||||
|
||||
* Action Cable's `redis` adapter allows for other common redis-rb options (`host`, `port`, `db`, `password`) in cable.yml.
|
||||
|
||||
Previously, it accepts only a [redis:// url](https://www.iana.org/assignments/uri-schemes/prov/redis) as an option.
|
||||
While we can add all of these options to the `url` itself, it is not explicitly documented. This alternative setup
|
||||
is shown as the first example in the [Redis rubygem](https://github.com/redis/redis-rb#getting-started), which
|
||||
makes this set of options as sensible as using just the `url`.
|
||||
|
||||
*Marc Rendl Ignacio*
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/actioncable/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/actioncable/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActionCable
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "actioncable",
|
||||
"version": "5.2.0-beta2",
|
||||
"version": "6.0.0-alpha",
|
||||
"description": "WebSocket framework for Ruby on Rails.",
|
||||
"main": "lib/assets/compiled/action_cable.js",
|
||||
"files": [
|
||||
|
|
|
@ -1,33 +1,3 @@
|
|||
* Bring back proc with arity of 1 in `ActionMailer::Base.default` proc
|
||||
since it was supported in Rails 5.0 but not deprecated.
|
||||
|
||||
*Jimmy Bourassa*
|
||||
|
||||
|
||||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Add `assert_enqueued_email_with` test helper.
|
||||
|
||||
assert_enqueued_email_with ContactMailer, :welcome do
|
||||
ContactMailer.welcome.deliver_later
|
||||
end
|
||||
|
||||
*Mikkel Malmberg*
|
||||
|
||||
* Allow Action Mailer classes to configure their delivery job.
|
||||
|
||||
class MyMailer < ApplicationMailer
|
||||
self.delivery_job = MyCustomDeliveryJob
|
||||
|
||||
...
|
||||
end
|
||||
|
||||
*Matthew Mongeau*
|
||||
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/actionmailer/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/actionmailer/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActionMailer
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,247 +1,3 @@
|
|||
* Add `Referrer-Policy` header to default headers set.
|
||||
|
||||
*Guillermo Iguaran*
|
||||
|
||||
* Changed the system tests to set Puma as default server only when the
|
||||
user haven't specified manually another server.
|
||||
|
||||
*Guillermo Iguaran*
|
||||
|
||||
* Add secure `X-Download-Options` and `X-Permitted-Cross-Domain-Policies` to
|
||||
default headers set.
|
||||
|
||||
*Guillermo Iguaran*
|
||||
|
||||
* Add headless firefox support to System Tests.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Changed the default system test screenshot output from `inline` to `simple`.
|
||||
|
||||
`inline` works well for iTerm2 but not everyone uses iTerm2. Some terminals like
|
||||
Terminal.app ignore the `inline` and output the path to the file since it can't
|
||||
render the image. Other terminals, like those on Ubuntu, cannot handle the image
|
||||
inline, but also don't handle it gracefully and instead of outputting the file
|
||||
path, it dumps binary into the terminal.
|
||||
|
||||
Commit 9d6e28 fixes this by changing the default for screenshot to be `simple`.
|
||||
|
||||
*Eileen M. Uchitelle*
|
||||
|
||||
* Register most popular audio/video/font mime types supported by modern browsers.
|
||||
|
||||
*Guillermo Iguaran*
|
||||
|
||||
* Fix optimized url helpers when using relative url root
|
||||
|
||||
Fixes #31220.
|
||||
|
||||
*Andrew White*
|
||||
|
||||
|
||||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Add DSL for configuring Content-Security-Policy header
|
||||
|
||||
The DSL allows you to configure a global Content-Security-Policy
|
||||
header and then override within a controller. For more information
|
||||
about the Content-Security-Policy header see MDN:
|
||||
|
||||
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
|
||||
|
||||
Example global policy:
|
||||
|
||||
# config/initializers/content_security_policy.rb
|
||||
Rails.application.config.content_security_policy do |p|
|
||||
p.default_src :self, :https
|
||||
p.font_src :self, :https, :data
|
||||
p.img_src :self, :https, :data
|
||||
p.object_src :none
|
||||
p.script_src :self, :https
|
||||
p.style_src :self, :https, :unsafe_inline
|
||||
end
|
||||
|
||||
Example controller overrides:
|
||||
|
||||
# Override policy inline
|
||||
class PostsController < ApplicationController
|
||||
content_security_policy do |p|
|
||||
p.upgrade_insecure_requests true
|
||||
end
|
||||
end
|
||||
|
||||
# Using literal values
|
||||
class PostsController < ApplicationController
|
||||
content_security_policy do |p|
|
||||
p.base_uri "https://www.example.com"
|
||||
end
|
||||
end
|
||||
|
||||
# Using mixed static and dynamic values
|
||||
class PostsController < ApplicationController
|
||||
content_security_policy do |p|
|
||||
p.base_uri :self, -> { "https://#{current_user.domain}.example.com" }
|
||||
end
|
||||
end
|
||||
|
||||
Allows you to also only report content violations for migrating
|
||||
legacy content using the `content_security_policy_report_only`
|
||||
configuration attribute, e.g;
|
||||
|
||||
# config/initializers/content_security_policy.rb
|
||||
Rails.application.config.content_security_policy_report_only = true
|
||||
|
||||
# controller override
|
||||
class PostsController < ApplicationController
|
||||
self.content_security_policy_report_only = true
|
||||
end
|
||||
|
||||
Note that this feature does not validate the header for performance
|
||||
reasons since the header is calculated at runtime.
|
||||
|
||||
*Andrew White*
|
||||
|
||||
* Make `assert_recognizes` to traverse mounted engines
|
||||
|
||||
*Yuichiro Kaneko*
|
||||
|
||||
* Remove deprecated `ActionController::ParamsParser::ParseError`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Add `:allow_other_host` option to `redirect_back` method.
|
||||
|
||||
When `allow_other_host` is set to `false`, the `redirect_back` will not allow redirecting from a
|
||||
different host. `allow_other_host` is `true` by default.
|
||||
|
||||
*Tim Masliuchenko*
|
||||
|
||||
* Add headless chrome support to System Tests.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Add ability to enable Early Hints for HTTP/2
|
||||
|
||||
If supported by the server, and enabled in Puma this allows H2 Early Hints to be used.
|
||||
|
||||
The `javascript_include_tag` and the `stylesheet_link_tag` automatically add Early Hints if requested.
|
||||
|
||||
*Eileen M. Uchitelle*, *Aaron Patterson*
|
||||
|
||||
* Simplify cookies middleware with key rotation support
|
||||
|
||||
Use the `rotate` method for both `MessageEncryptor` and
|
||||
`MessageVerifier` to add key rotation support for encrypted and
|
||||
signed cookies. This also helps simplify support for legacy cookie
|
||||
security.
|
||||
|
||||
*Michael J Coyne*
|
||||
|
||||
* Use Capybara registered `:puma` server config.
|
||||
|
||||
The Capybara registered `:puma` server ensures the puma server is run in process so
|
||||
connection sharing and open request detection work correctly by default.
|
||||
|
||||
*Thomas Walpole*
|
||||
|
||||
* Cookies `:expires` option supports `ActiveSupport::Duration` object.
|
||||
|
||||
cookies[:user_name] = { value: "assain", expires: 1.hour }
|
||||
cookies[:key] = { value: "a yummy cookie", expires: 6.months }
|
||||
|
||||
Pull Request: #30121
|
||||
|
||||
*Assain Jaleel*
|
||||
|
||||
* Enforce signed/encrypted cookie expiry server side.
|
||||
|
||||
Rails can thwart attacks by malicious clients that don't honor a cookie's expiry.
|
||||
|
||||
It does so by stashing the expiry within the written cookie and relying on the
|
||||
signing/encrypting to vouch that it hasn't been tampered with. Then on a
|
||||
server-side read, the expiry is verified and any expired cookie is discarded.
|
||||
|
||||
Pull Request: #30121
|
||||
|
||||
*Assain Jaleel*
|
||||
|
||||
* Make `take_failed_screenshot` work within engine.
|
||||
|
||||
Fixes #30405.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Deprecate `ActionDispatch::TestResponse` response aliases.
|
||||
|
||||
`#success?`, `#missing?` & `#error?` are not supported by the actual
|
||||
`ActionDispatch::Response` object and can produce false-positives. Instead,
|
||||
use the response helpers provided by `Rack::Response`.
|
||||
|
||||
*Trevor Wistaff*
|
||||
|
||||
* Protect from forgery by default
|
||||
|
||||
Rather than protecting from forgery in the generated `ApplicationController`,
|
||||
add it to `ActionController::Base` depending on
|
||||
`config.action_controller.default_protect_from_forgery`. This configuration
|
||||
defaults to false to support older versions which have removed it from their
|
||||
`ApplicationController`, but is set to true for Rails 5.2.
|
||||
|
||||
*Lisa Ugray*
|
||||
|
||||
* Fallback `ActionController::Parameters#to_s` to `Hash#to_s`.
|
||||
|
||||
*Kir Shatrov*
|
||||
|
||||
* `driven_by` now registers poltergeist and capybara-webkit.
|
||||
|
||||
If poltergeist or capybara-webkit are set as drivers is set for System Tests,
|
||||
`driven_by` will register the driver and set additional options passed via
|
||||
the `:options` parameter.
|
||||
|
||||
Refer to the respective driver's documentation to see what options can be passed.
|
||||
|
||||
*Mario Chavez*
|
||||
|
||||
* AEAD encrypted cookies and sessions with GCM.
|
||||
|
||||
Encrypted cookies now use AES-GCM which couples authentication and
|
||||
encryption in one faster step and produces shorter ciphertexts. Cookies
|
||||
encrypted using AES in CBC HMAC mode will be seamlessly upgraded when
|
||||
this new mode is enabled via the
|
||||
`action_dispatch.use_authenticated_cookie_encryption` configuration value.
|
||||
|
||||
*Michael J Coyne*
|
||||
|
||||
* Change the cache key format for fragments to make it easier to debug key churn. The new format is:
|
||||
|
||||
views/template/action.html.erb:7a1156131a6928cb0026877f8b749ac9/projects/123
|
||||
^template path ^template tree digest ^class ^id
|
||||
|
||||
*DHH*
|
||||
|
||||
* Add support for recyclable cache keys with fragment caching. This uses the new versioned entries in the
|
||||
`ActiveSupport::Cache` stores and relies on the fact that Active Record has split `#cache_key` and `#cache_version`
|
||||
to support it.
|
||||
|
||||
*DHH*
|
||||
|
||||
* Add `action_controller_api` and `action_controller_base` load hooks to be called in `ActiveSupport.on_load`
|
||||
|
||||
`ActionController::Base` and `ActionController::API` have differing implementations. This means that
|
||||
the one umbrella hook `action_controller` is not able to address certain situations where a method
|
||||
may not exist in a certain implementation.
|
||||
|
||||
This is fixed by adding two new hooks so you can target `ActionController::Base` vs `ActionController::API`
|
||||
|
||||
Fixes #27013.
|
||||
|
||||
*Julian Nadeau*
|
||||
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/actionpack/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/actionpack/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActionPack
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,79 +1,3 @@
|
|||
* Allow the use of callable objects as group methods for grouped selects.
|
||||
|
||||
Until now, the `option_groups_from_collection_for_select` method was only able to
|
||||
handle method names as `group_method` and `group_label_method` parameters,
|
||||
it is now able to receive procs and other callable objects too.
|
||||
|
||||
*Jérémie Bonal*
|
||||
|
||||
* Add `preload_link_tag` helper
|
||||
|
||||
This helper that allows to the browser to initiate early fetch of resources
|
||||
(different to the specified in `javascript_include_tag` and `stylesheet_link_tag`).
|
||||
Additionally, this sends Early Hints if supported by browser.
|
||||
|
||||
*Guillermo Iguaran*
|
||||
|
||||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Change `form_with` to generates ids by default.
|
||||
|
||||
When `form_with` was introduced we disabled the automatic generation of ids
|
||||
that was enabled in `form_for`. This usually is not an good idea since labels don't work
|
||||
when the input doesn't have an id and it made harder to test with Capybara.
|
||||
|
||||
You can still disable the automatic generation of ids setting `config.action_view.form_with_generates_ids`
|
||||
to `false.`
|
||||
|
||||
*Nick Pezza*
|
||||
|
||||
* Fix issues with `field_error_proc` wrapping `optgroup` and select divider `option`.
|
||||
|
||||
Fixes #31088
|
||||
|
||||
*Matthias Neumayr*
|
||||
|
||||
* Remove deprecated Erubis ERB handler.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove default `alt` text generation.
|
||||
|
||||
Fixes #30096
|
||||
|
||||
*Cameron Cundiff*
|
||||
|
||||
* Add `srcset` option to `image_tag` helper.
|
||||
|
||||
*Roberto Miranda*
|
||||
|
||||
* Fix issues with scopes and engine on `current_page?` method.
|
||||
|
||||
Fixes #29401.
|
||||
|
||||
*Nikita Savrov*
|
||||
|
||||
* Generate field ids in `collection_check_boxes` and `collection_radio_buttons`.
|
||||
|
||||
This makes sure that the labels are linked up with the fields.
|
||||
|
||||
Fixes #29014.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Add `:json` type to `auto_discovery_link_tag` to support [JSON Feeds](https://jsonfeed.org/version/1)
|
||||
|
||||
*Mike Gunderloy*
|
||||
|
||||
* Update `distance_of_time_in_words` helper to display better error messages
|
||||
for bad input.
|
||||
|
||||
*Jay Hayes*
|
||||
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/actionview/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/actionview/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActionView
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "rails-ujs",
|
||||
"version": "5.2.0-beta2",
|
||||
"version": "6.0.0-alpha",
|
||||
"description": "Ruby on Rails unobtrusive scripting adapter",
|
||||
"main": "lib/assets/compiled/rails-ujs.js",
|
||||
"files": [
|
||||
|
|
|
@ -1,29 +1,3 @@
|
|||
* Allow block to be passed to `ActiveJob::Base.discard_on` to allow custom handling of discard jobs.
|
||||
|
||||
Example:
|
||||
|
||||
class RemoteServiceJob < ActiveJob::Base
|
||||
discard_on(CustomAppException) do |job, exception|
|
||||
ExceptionNotifier.caught(exception)
|
||||
end
|
||||
|
||||
def perform(*args)
|
||||
# Might raise CustomAppException for something domain specific
|
||||
end
|
||||
end
|
||||
|
||||
*Aidan Haran*
|
||||
|
||||
|
||||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Support redis-rb 4.0.
|
||||
|
||||
*Jeremy Daer*
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/activejob/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/activejob/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActiveJob
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,67 +1,3 @@
|
|||
* Models using the attributes API with a proc default can now be marshalled.
|
||||
|
||||
Fixes #31216.
|
||||
|
||||
*Sean Griffin*
|
||||
|
||||
* Fix to working before/after validation callbacks on multiple contexts.
|
||||
|
||||
*Yoshiyuki Hirano*
|
||||
|
||||
|
||||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Execute `ConfirmationValidator` validation when `_confirmation`'s value is `false`.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Allow passing a Proc or Symbol to length validator options.
|
||||
|
||||
*Matt Rohrer*
|
||||
|
||||
* Add method `#merge!` for `ActiveModel::Errors`.
|
||||
|
||||
*Jahfer Husain*
|
||||
|
||||
* Fix regression in numericality validator when comparing Decimal and Float input
|
||||
values with more scale than the schema.
|
||||
|
||||
*Bradley Priest*
|
||||
|
||||
* Fix methods `#keys`, `#values` in `ActiveModel::Errors`.
|
||||
|
||||
Change `#keys` to only return the keys that don't have empty messages.
|
||||
|
||||
Change `#values` to only return the not empty values.
|
||||
|
||||
Example:
|
||||
|
||||
# Before
|
||||
person = Person.new
|
||||
person.errors.keys # => []
|
||||
person.errors.values # => []
|
||||
person.errors.messages # => {}
|
||||
person.errors[:name] # => []
|
||||
person.errors.messages # => {:name => []}
|
||||
person.errors.keys # => [:name]
|
||||
person.errors.values # => [[]]
|
||||
|
||||
# After
|
||||
person = Person.new
|
||||
person.errors.keys # => []
|
||||
person.errors.values # => []
|
||||
person.errors.messages # => {}
|
||||
person.errors[:name] # => []
|
||||
person.errors.messages # => {:name => []}
|
||||
person.errors.keys # => []
|
||||
person.errors.values # => []
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/activemodel/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/activemodel/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActiveModel
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,669 +1,3 @@
|
|||
* Deprecate `expand_hash_conditions_for_aggregates` without replacement.
|
||||
Using a `Relation` for performing queries is the prefered API.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Fix not expanded problem when passing an Array object as argument to the where method using `composed_of` column.
|
||||
|
||||
```
|
||||
david_balance = customers(:david).balance
|
||||
Customer.where(balance: [david_balance]).to_sql
|
||||
|
||||
# Before: WHERE `customers`.`balance` = NULL
|
||||
# After : WHERE `customers`.`balance` = 50
|
||||
```
|
||||
|
||||
Fixes #31723.
|
||||
|
||||
*Yutaro Kanagawa*
|
||||
|
||||
* Fix `count(:all)` with eager loading and having an order other than the driving table.
|
||||
|
||||
Fixes #31783.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Clear the transaction state when an Active Record object is duped.
|
||||
|
||||
Fixes #31670.
|
||||
|
||||
*Yuriy Ustushenko*
|
||||
|
||||
* Support for PostgreSQL foreign tables.
|
||||
|
||||
*fatkodima*
|
||||
|
||||
* Fix relation merger issue with `left_outer_joins`.
|
||||
|
||||
*Mehmet Emin İNAÇ*
|
||||
|
||||
* Don't allow destroyed object mutation after `save` or `save!` is called.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Take into account association conditions when deleting through records.
|
||||
|
||||
Fixes #18424.
|
||||
|
||||
*Piotr Jakubowski*
|
||||
|
||||
* Fix nested `has_many :through` associations on unpersisted parent instances.
|
||||
|
||||
For example, if you have
|
||||
|
||||
class Post < ActiveRecord::Base
|
||||
belongs_to :author
|
||||
has_many :books, through: :author
|
||||
has_many :subscriptions, through: :books
|
||||
end
|
||||
|
||||
class Author < ActiveRecord::Base
|
||||
has_one :post
|
||||
has_many :books
|
||||
has_many :subscriptions, through: :books
|
||||
end
|
||||
|
||||
class Book < ActiveRecord::Base
|
||||
belongs_to :author
|
||||
has_many :subscriptions
|
||||
end
|
||||
|
||||
class Subscription < ActiveRecord::Base
|
||||
belongs_to :book
|
||||
end
|
||||
|
||||
Before:
|
||||
|
||||
If `post` is not persisted, then `post.subscriptions` will be empty.
|
||||
|
||||
After:
|
||||
|
||||
If `post` is not persisted, then `post.subscriptions` can be set and used
|
||||
just like it would if `post` were persisted.
|
||||
|
||||
Fixes #16313.
|
||||
|
||||
*Zoltan Kiss*
|
||||
|
||||
* Fixed inconsistency with `first(n)` when used with `limit()`.
|
||||
The `first(n)` finder now respects the `limit()`, making it consistent
|
||||
with `relation.to_a.first(n)`, and also with the behavior of `last(n)`.
|
||||
|
||||
Fixes #23979.
|
||||
|
||||
*Brian Christian*
|
||||
|
||||
* Use `count(:all)` in `HasManyAssociation#count_records` to prevent invalid
|
||||
SQL queries for association counting.
|
||||
|
||||
*Klas Eskilson*
|
||||
|
||||
* Fix to invoke callbacks when using `update_attribute`.
|
||||
|
||||
*Mike Busch*
|
||||
|
||||
* Fix `count(:all)` to correctly work `distinct` with custom SELECT list.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Using subselect for `delete_all` with `limit` or `offset`.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Undefine attribute methods on descendants when resetting column
|
||||
information.
|
||||
|
||||
*Chris Salzberg*
|
||||
|
||||
* Log database query callers
|
||||
|
||||
Add `verbose_query_logs` configuration option to display the caller
|
||||
of database queries in the log to facilitate N+1 query resolution
|
||||
and other debugging.
|
||||
|
||||
Enabled in development only for new and upgraded applications. Not
|
||||
recommended for use in the production environment since it relies
|
||||
on Ruby's `Kernel#caller_locations` which is fairly slow.
|
||||
|
||||
*Olivier Lacan*
|
||||
|
||||
* Fix conflicts `counter_cache` with `touch: true` by optimistic locking.
|
||||
|
||||
```
|
||||
# create_table :posts do |t|
|
||||
# t.integer :comments_count, default: 0
|
||||
# t.integer :lock_version
|
||||
# t.timestamps
|
||||
# end
|
||||
class Post < ApplicationRecord
|
||||
end
|
||||
|
||||
# create_table :comments do |t|
|
||||
# t.belongs_to :post
|
||||
# end
|
||||
class Comment < ApplicationRecord
|
||||
belongs_to :post, touch: true, counter_cache: true
|
||||
end
|
||||
```
|
||||
|
||||
Before:
|
||||
```
|
||||
post = Post.create!
|
||||
# => begin transaction
|
||||
INSERT INTO "posts" ("created_at", "updated_at", "lock_version")
|
||||
VALUES ("2017-12-11 21:27:11.387397", "2017-12-11 21:27:11.387397", 0)
|
||||
commit transaction
|
||||
|
||||
comment = Comment.create!(post: post)
|
||||
# => begin transaction
|
||||
INSERT INTO "comments" ("post_id") VALUES (1)
|
||||
|
||||
UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) + 1,
|
||||
"lock_version" = COALESCE("lock_version", 0) + 1 WHERE "posts"."id" = 1
|
||||
|
||||
UPDATE "posts" SET "updated_at" = '2017-12-11 21:27:11.398330',
|
||||
"lock_version" = 1 WHERE "posts"."id" = 1 AND "posts"."lock_version" = 0
|
||||
rollback transaction
|
||||
# => ActiveRecord::StaleObjectError: Attempted to touch a stale object: Post.
|
||||
|
||||
Comment.take.destroy!
|
||||
# => begin transaction
|
||||
DELETE FROM "comments" WHERE "comments"."id" = 1
|
||||
|
||||
UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) - 1,
|
||||
"lock_version" = COALESCE("lock_version", 0) + 1 WHERE "posts"."id" = 1
|
||||
|
||||
UPDATE "posts" SET "updated_at" = '2017-12-11 21:42:47.785901',
|
||||
"lock_version" = 1 WHERE "posts"."id" = 1 AND "posts"."lock_version" = 0
|
||||
rollback transaction
|
||||
# => ActiveRecord::StaleObjectError: Attempted to touch a stale object: Post.
|
||||
```
|
||||
|
||||
After:
|
||||
```
|
||||
post = Post.create!
|
||||
# => begin transaction
|
||||
INSERT INTO "posts" ("created_at", "updated_at", "lock_version")
|
||||
VALUES ("2017-12-11 21:27:11.387397", "2017-12-11 21:27:11.387397", 0)
|
||||
commit transaction
|
||||
|
||||
comment = Comment.create!(post: post)
|
||||
# => begin transaction
|
||||
INSERT INTO "comments" ("post_id") VALUES (1)
|
||||
|
||||
UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) + 1,
|
||||
"lock_version" = COALESCE("lock_version", 0) + 1,
|
||||
"updated_at" = '2017-12-11 21:37:09.802642' WHERE "posts"."id" = 1
|
||||
commit transaction
|
||||
|
||||
comment.destroy!
|
||||
# => begin transaction
|
||||
DELETE FROM "comments" WHERE "comments"."id" = 1
|
||||
|
||||
UPDATE "posts" SET "comments_count" = COALESCE("comments_count", 0) - 1,
|
||||
"lock_version" = COALESCE("lock_version", 0) + 1,
|
||||
"updated_at" = '2017-12-11 21:39:02.685520' WHERE "posts"."id" = 1
|
||||
commit transaction
|
||||
```
|
||||
|
||||
Fixes #31199.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Add support for PostgreSQL operator classes to `add_index`.
|
||||
|
||||
Example:
|
||||
|
||||
add_index :users, :name, using: :gist, opclass: { name: :gist_trgm_ops }
|
||||
|
||||
*Greg Navis*
|
||||
|
||||
* Don't allow scopes to be defined which conflict with instance methods on `Relation`.
|
||||
|
||||
Fixes #31120.
|
||||
|
||||
*kinnrot*
|
||||
|
||||
|
||||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Add new error class `QueryCanceled` which will be raised
|
||||
when canceling statement due to user request.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Add `#up_only` to database migrations for code that is only relevant when
|
||||
migrating up, e.g. populating a new column.
|
||||
|
||||
*Rich Daley*
|
||||
|
||||
* Require raw SQL fragments to be explicitly marked when used in
|
||||
relation query methods.
|
||||
|
||||
Before:
|
||||
```
|
||||
Article.order("LENGTH(title)")
|
||||
```
|
||||
|
||||
After:
|
||||
```
|
||||
Article.order(Arel.sql("LENGTH(title)"))
|
||||
```
|
||||
|
||||
This prevents SQL injection if applications use the [strongly
|
||||
discouraged] form `Article.order(params[:my_order])`, under the
|
||||
mistaken belief that only column names will be accepted.
|
||||
|
||||
Raw SQL strings will now cause a deprecation warning, which will
|
||||
become an UnknownAttributeReference error in Rails 6.0. Applications
|
||||
can opt in to the future behavior by setting `allow_unsafe_raw_sql`
|
||||
to `:disabled`.
|
||||
|
||||
Common and judged-safe string values (such as simple column
|
||||
references) are unaffected:
|
||||
```
|
||||
Article.order("title DESC")
|
||||
```
|
||||
|
||||
*Ben Toews*
|
||||
|
||||
* `update_all` will now pass its values to `Type#cast` before passing them to
|
||||
`Type#serialize`. This means that `update_all(foo: 'true')` will properly
|
||||
persist a boolean.
|
||||
|
||||
*Sean Griffin*
|
||||
|
||||
* Add new error class `StatementTimeout` which will be raised
|
||||
when statement timeout exceeded.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Fix `bin/rails db:migrate` with specified `VERSION`.
|
||||
`bin/rails db:migrate` with empty VERSION behaves as without `VERSION`.
|
||||
Check a format of `VERSION`: Allow a migration version number
|
||||
or name of a migration file. Raise error if format of `VERSION` is invalid.
|
||||
Raise error if target migration doesn't exist.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Fixed a bug where column orders for an index weren't written to
|
||||
`db/schema.rb` when using the sqlite adapter.
|
||||
|
||||
Fixes #30902.
|
||||
|
||||
*Paul Kuruvilla*
|
||||
|
||||
* Remove deprecated method `#sanitize_conditions`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated method `#scope_chain`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated configuration `.error_on_ignored_order_or_limit`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated arguments from `#verify!`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated argument `name` from `#indexes`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated method `ActiveRecord::Migrator.schema_migrations_table_name`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated method `supports_primary_key?`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated method `supports_migrations?`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated methods `initialize_schema_migrations_table` and `initialize_internal_metadata_table`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Raises when calling `lock!` in a dirty record.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated support to passing a class to `:class_name` on associations.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated argument `default` from `index_name_exists?`.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated support to `quoted_id` when typecasting an Active Record object.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Fix `bin/rails db:setup` and `bin/rails db:test:prepare` create wrong
|
||||
ar_internal_metadata's data for a test database.
|
||||
|
||||
Before:
|
||||
```
|
||||
$ RAILS_ENV=test rails dbconsole
|
||||
> SELECT * FROM ar_internal_metadata;
|
||||
key|value|created_at|updated_at
|
||||
environment|development|2017-09-11 23:14:10.815679|2017-09-11 23:14:10.815679
|
||||
```
|
||||
|
||||
After:
|
||||
```
|
||||
$ RAILS_ENV=test rails dbconsole
|
||||
> SELECT * FROM ar_internal_metadata;
|
||||
key|value|created_at|updated_at
|
||||
environment|test|2017-09-11 23:14:10.815679|2017-09-11 23:14:10.815679
|
||||
```
|
||||
|
||||
Fixes #26731.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Fix longer sequence name detection for serial columns.
|
||||
|
||||
Fixes #28332.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* MySQL: Don't lose `auto_increment: true` in the `db/schema.rb`.
|
||||
|
||||
Fixes #30894.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Fix `COUNT(DISTINCT ...)` for `GROUP BY` with `ORDER BY` and `LIMIT`.
|
||||
|
||||
Fixes #30886.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* PostgreSQL `tsrange` now preserves subsecond precision.
|
||||
|
||||
PostgreSQL 9.1+ introduced range types, and Rails added support for using
|
||||
this datatype in Active Record. However, the serialization of
|
||||
`PostgreSQL::OID::Range` was incomplete, because it did not properly
|
||||
cast the bounds that make up the range. This led to subseconds being
|
||||
dropped in SQL commands:
|
||||
|
||||
Before:
|
||||
|
||||
connection.type_cast(tsrange.serialize(range_value))
|
||||
# => "[2010-01-01 13:30:00 UTC,2011-02-02 19:30:00 UTC)"
|
||||
|
||||
Now:
|
||||
|
||||
connection.type_cast(tsrange.serialize(range_value))
|
||||
# => "[2010-01-01 13:30:00.670277,2011-02-02 19:30:00.745125)"
|
||||
|
||||
*Thomas Cannon*
|
||||
|
||||
* Passing a `Set` to `Relation#where` now behaves the same as passing an
|
||||
array.
|
||||
|
||||
*Sean Griffin*
|
||||
|
||||
* Use given algorithm while removing index from database.
|
||||
|
||||
Fixes #24190.
|
||||
|
||||
*Mehmet Emin İNAÇ*
|
||||
|
||||
* Update payload names for `sql.active_record` instrumentation to be
|
||||
more descriptive.
|
||||
|
||||
Fixes #30586.
|
||||
|
||||
*Jeremy Green*
|
||||
|
||||
* Add new error class `LockWaitTimeout` which will be raised
|
||||
when lock wait timeout exceeded.
|
||||
|
||||
*Gabriel Courtemanche*
|
||||
|
||||
* Remove deprecated `#migration_keys`.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Automatically guess the inverse associations for STI.
|
||||
|
||||
*Yuichiro Kaneko*
|
||||
|
||||
* Ensure `sum` honors `distinct` on `has_many :through` associations
|
||||
|
||||
Fixes #16791.
|
||||
|
||||
*Aaron Wortham*
|
||||
|
||||
* Add `binary` fixture helper method.
|
||||
|
||||
*Atsushi Yoshida*
|
||||
|
||||
* When using `Relation#or`, extract the common conditions and put them before the OR condition.
|
||||
|
||||
*Maxime Handfield Lapointe*
|
||||
|
||||
* `Relation#or` now accepts two relations who have different values for
|
||||
`references` only, as `references` can be implicitly called by `where`.
|
||||
|
||||
Fixes #29411.
|
||||
|
||||
*Sean Griffin*
|
||||
|
||||
* `ApplicationRecord` is no longer generated when generating models. If you
|
||||
need to generate it, it can be created with `rails g application_record`.
|
||||
|
||||
*Lisa Ugray*
|
||||
|
||||
* Fix `COUNT(DISTINCT ...)` with `ORDER BY` and `LIMIT` to keep the existing select list.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* When a `has_one` association is destroyed by `dependent: destroy`,
|
||||
`destroyed_by_association` will now be set to the reflection, matching the
|
||||
behaviour of `has_many` associations.
|
||||
|
||||
*Lisa Ugray*
|
||||
|
||||
* Fix `unscoped(where: [columns])` removing the wrong bind values
|
||||
|
||||
When the `where` is called on a relation after a `or`, unscoping the column of that later `where` removed
|
||||
bind values used by the `or` instead. (possibly other cases too)
|
||||
|
||||
```
|
||||
Post.where(id: 1).or(Post.where(id: 2)).where(foo: 3).unscope(where: :foo).to_sql
|
||||
# Currently:
|
||||
# SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 2 OR "posts"."id" = 3)
|
||||
# With fix:
|
||||
# SELECT "posts".* FROM "posts" WHERE ("posts"."id" = 1 OR "posts"."id" = 2)
|
||||
```
|
||||
|
||||
*Maxime Handfield Lapointe*
|
||||
|
||||
* Values constructed using multi-parameter assignment will now use the
|
||||
post-type-cast value for rendering in single-field form inputs.
|
||||
|
||||
*Sean Griffin*
|
||||
|
||||
* `Relation#joins` is no longer affected by the target model's
|
||||
`current_scope`, with the exception of `unscoped`.
|
||||
|
||||
Fixes #29338.
|
||||
|
||||
*Sean Griffin*
|
||||
|
||||
* Change sqlite3 boolean serialization to use 1 and 0
|
||||
|
||||
SQLite natively recognizes 1 and 0 as true and false, but does not natively
|
||||
recognize 't' and 'f' as was previously serialized.
|
||||
|
||||
This change in serialization requires a migration of stored boolean data
|
||||
for SQLite databases, so it's implemented behind a configuration flag
|
||||
whose default false value is deprecated.
|
||||
|
||||
*Lisa Ugray*
|
||||
|
||||
* Skip query caching when working with batches of records (`find_each`, `find_in_batches`,
|
||||
`in_batches`).
|
||||
|
||||
Previously, records would be fetched in batches, but all records would be retained in memory
|
||||
until the end of the request or job.
|
||||
|
||||
*Eugene Kenny*
|
||||
|
||||
* Prevent errors raised by `sql.active_record` notification subscribers from being converted into
|
||||
`ActiveRecord::StatementInvalid` exceptions.
|
||||
|
||||
*Dennis Taylor*
|
||||
|
||||
* Fix eager loading/preloading association with scope including joins.
|
||||
|
||||
Fixes #28324.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Fix transactions to apply state to child transactions
|
||||
|
||||
Previously, if you had a nested transaction and the outer transaction was rolledback, the record from the
|
||||
inner transaction would still be marked as persisted.
|
||||
|
||||
This change fixes that by applying the state of the parent transaction to the child transaction when the
|
||||
parent transaction is rolledback. This will correctly mark records from the inner transaction as not persisted.
|
||||
|
||||
*Eileen M. Uchitelle*, *Aaron Patterson*
|
||||
|
||||
* Deprecate `set_state` method in `TransactionState`
|
||||
|
||||
Deprecated the `set_state` method in favor of setting the state via specific methods. If you need to mark the
|
||||
state of the transaction you can now use `rollback!`, `commit!` or `nullify!` instead of
|
||||
`set_state(:rolledback)`, `set_state(:committed)`, or `set_state(nil)`.
|
||||
|
||||
*Eileen M. Uchitelle*, *Aaron Patterson*
|
||||
|
||||
* Deprecate delegating to `arel` in `Relation`.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Fix eager loading to respect `store_full_sti_class` setting.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Query cache was unavailable when entering the `ActiveRecord::Base.cache` block
|
||||
without being connected.
|
||||
|
||||
*Tsukasa Oishi*
|
||||
|
||||
* Previously, when building records using a `has_many :through` association,
|
||||
if the child records were deleted before the parent was saved, they would
|
||||
still be persisted. Now, if child records are deleted before the parent is saved
|
||||
on a `has_many :through` association, the child records will not be persisted.
|
||||
|
||||
*Tobias Kraze*
|
||||
|
||||
* Merging two relations representing nested joins no longer transforms the joins of
|
||||
the merged relation into LEFT OUTER JOIN. Example to clarify:
|
||||
|
||||
```
|
||||
Author.joins(:posts).merge(Post.joins(:comments))
|
||||
# Before the change:
|
||||
#=> SELECT ... FROM authors INNER JOIN posts ON ... LEFT OUTER JOIN comments ON...
|
||||
|
||||
# After the change:
|
||||
#=> SELECT ... FROM authors INNER JOIN posts ON ... INNER JOIN comments ON...
|
||||
```
|
||||
|
||||
TODO: Add to the Rails 5.2 upgrade guide
|
||||
|
||||
*Maxime Handfield Lapointe*
|
||||
|
||||
* `ActiveRecord::Persistence#touch` does not work well when optimistic locking enabled and
|
||||
`locking_column`, without default value, is null in the database.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Fix destroying existing object does not work well when optimistic locking enabled and
|
||||
`locking_column` is null in the database.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Use bulk INSERT to insert fixtures for better performance.
|
||||
|
||||
*Kir Shatrov*
|
||||
|
||||
* Prevent creation of bind param if casted value is nil.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Deprecate passing arguments and block at the same time to `count` and `sum` in `ActiveRecord::Calculations`.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Loading model schema from database is now thread-safe.
|
||||
|
||||
Fixes #28589.
|
||||
|
||||
*Vikrant Chaudhary*, *David Abdemoulaie*
|
||||
|
||||
* Add `ActiveRecord::Base#cache_version` to support recyclable cache keys via the new versioned entries
|
||||
in `ActiveSupport::Cache`. This also means that `ActiveRecord::Base#cache_key` will now return a stable key
|
||||
that does not include a timestamp any more.
|
||||
|
||||
NOTE: This feature is turned off by default, and `#cache_key` will still return cache keys with timestamps
|
||||
until you set `ActiveRecord::Base.cache_versioning = true`. That's the setting for all new apps on Rails 5.2+
|
||||
|
||||
*DHH*
|
||||
|
||||
* Respect `SchemaDumper.ignore_tables` in rake tasks for databases structure dump
|
||||
|
||||
*Rusty Geldmacher*, *Guillermo Iguaran*
|
||||
|
||||
* Add type caster to `RuntimeReflection#alias_name`
|
||||
|
||||
Fixes #28959.
|
||||
|
||||
*Jon Moss*
|
||||
|
||||
* Deprecate `supports_statement_cache?`.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Raise error `UnknownMigrationVersionError` on the movement of migrations
|
||||
when the current migration does not exist.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Fix `bin/rails db:forward` first migration.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Support Descending Indexes for MySQL.
|
||||
|
||||
MySQL 8.0.1 and higher supports descending indexes: `DESC` in an index definition is no longer ignored.
|
||||
See https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html.
|
||||
|
||||
*Ryuta Kamizono*
|
||||
|
||||
* Fix inconsistency with changed attributes when overriding Active Record attribute reader.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* When calling the dynamic fixture accessor method with no arguments, it now returns all fixtures of this type.
|
||||
Previously this method always returned an empty array.
|
||||
|
||||
*Kevin McPhillips*
|
||||
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/activerecord/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/activerecord/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,35 +1,3 @@
|
|||
* Preserve display aspect ratio when extracting width and height from videos
|
||||
with rectangular samples in `ActiveStorage::Analyzer::VideoAnalyzer`.
|
||||
|
||||
When a video contains a display aspect ratio, emit it in metadata as
|
||||
`:display_aspect_ratio` rather than the ambiguous `:aspect_ratio`. Compute
|
||||
its height by scaling its encoded frame width according to the DAR.
|
||||
|
||||
*George Claghorn*
|
||||
|
||||
* Use `after_destroy_commit` instead of `before_destroy` for purging
|
||||
attachments when a record is destroyed.
|
||||
|
||||
*Hiroki Zenigami*
|
||||
|
||||
|
||||
* Force `:attachment` disposition for specific, configurable content types.
|
||||
This mitigates possible security issues such as XSS or phishing when
|
||||
serving them inline. A list of such content types is included by default,
|
||||
and can be configured via `content_types_to_serve_as_binary`.
|
||||
|
||||
*Rosa Gutierrez*
|
||||
|
||||
|
||||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* Fix the gem adding the migrations files to the package.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Added to Rails.
|
||||
|
||||
*DHH*
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/activestorage/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActiveStorage
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "activestorage",
|
||||
"version": "5.2.0-beta2",
|
||||
"version": "6.0.0-alpha",
|
||||
"description": "Attach cloud and local files in Rails applications",
|
||||
"main": "app/assets/javascripts/activestorage.js",
|
||||
"files": [
|
||||
|
|
|
@ -1,507 +1,3 @@
|
|||
* Add support for connection pooling on RedisCacheStore.
|
||||
|
||||
*fatkodima*
|
||||
|
||||
* Support hash as first argument in `assert_difference`. This allows to specify multiple
|
||||
numeric differences in the same assertion.
|
||||
|
||||
assert_difference ->{ Article.count } => 1, ->{ Post.count } => 2
|
||||
|
||||
*Julien Meichelbeck*
|
||||
|
||||
* Add missing instrumentation for `read_multi` in `ActiveSupport::Cache::Store`.
|
||||
|
||||
*Ignatius Reza Lesmana*
|
||||
|
||||
* `assert_changes` will always assert that the expression changes,
|
||||
regardless of `from:` and `to:` argument combinations.
|
||||
|
||||
*Daniel Ma*
|
||||
|
||||
* Use SHA-1 to generate non-sensitive digests, such as the ETag header.
|
||||
|
||||
Enabled by default for new apps; upgrading apps can opt in by setting
|
||||
`config.active_support.use_sha1_digests = true`.
|
||||
|
||||
*Dmitri Dolguikh*, *Eugene Kenny*
|
||||
|
||||
|
||||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Changed default behaviour of `ActiveSupport::SecurityUtils.secure_compare`,
|
||||
to make it not leak length information even for variable length string.
|
||||
|
||||
Renamed old `ActiveSupport::SecurityUtils.secure_compare` to `fixed_length_secure_compare`,
|
||||
and started raising `ArgumentError` in case of length mismatch of passed strings.
|
||||
|
||||
*Vipul A M*
|
||||
|
||||
* Make `ActiveSupport::TimeZone.all` return only time zones that are in
|
||||
`ActiveSupport::TimeZone::MAPPING`.
|
||||
|
||||
Fixes #7245.
|
||||
|
||||
*Chris LaRose*
|
||||
|
||||
* MemCacheStore: Support expiring counters.
|
||||
|
||||
Pass `expires_in: [seconds]` to `#increment` and `#decrement` options
|
||||
to set the Memcached TTL (time-to-live) if the counter doesn't exist.
|
||||
If the counter exists, Memcached doesn't extend its expiry when it's
|
||||
incremented or decremented.
|
||||
|
||||
```
|
||||
Rails.cache.increment("my_counter", 1, expires_in: 2.minutes)
|
||||
```
|
||||
|
||||
*Takumasa Ochi*
|
||||
|
||||
* Handle `TZInfo::AmbiguousTime` errors
|
||||
|
||||
Make `ActiveSupport::TimeWithZone` match Ruby's handling of ambiguous
|
||||
times by choosing the later period, e.g.
|
||||
|
||||
Ruby:
|
||||
```
|
||||
ENV["TZ"] = "Europe/Moscow"
|
||||
Time.local(2014, 10, 26, 1, 0, 0) # => 2014-10-26 01:00:00 +0300
|
||||
```
|
||||
|
||||
Before:
|
||||
```
|
||||
>> "2014-10-26 01:00:00".in_time_zone("Moscow")
|
||||
TZInfo::AmbiguousTime: 26/10/2014 01:00 is an ambiguous local time.
|
||||
```
|
||||
|
||||
After:
|
||||
```
|
||||
>> "2014-10-26 01:00:00".in_time_zone("Moscow")
|
||||
=> Sun, 26 Oct 2014 01:00:00 MSK +03:00
|
||||
```
|
||||
|
||||
Fixes #17395.
|
||||
|
||||
*Andrew White*
|
||||
|
||||
* Redis cache store.
|
||||
|
||||
```
|
||||
# Defaults to `redis://localhost:6379/0`. Only use for dev/test.
|
||||
config.cache_store = :redis_cache_store
|
||||
|
||||
# Supports all common cache store options (:namespace, :compress,
|
||||
# :compress_threshold, :expires_in, :race_condition_ttl) and all
|
||||
# Redis options.
|
||||
cache_password = Rails.application.secrets.redis_cache_password
|
||||
config.cache_store = :redis_cache_store, driver: :hiredis,
|
||||
namespace: 'myapp-cache', compress: true, timeout: 1,
|
||||
url: "redis://:#{cache_password}@myapp-cache-1:6379/0"
|
||||
|
||||
# Supports Redis::Distributed with multiple hosts
|
||||
config.cache_store = :redis_cache_store, driver: :hiredis
|
||||
namespace: 'myapp-cache', compress: true,
|
||||
url: %w[
|
||||
redis://myapp-cache-1:6379/0
|
||||
redis://myapp-cache-1:6380/0
|
||||
redis://myapp-cache-2:6379/0
|
||||
redis://myapp-cache-2:6380/0
|
||||
redis://myapp-cache-3:6379/0
|
||||
redis://myapp-cache-3:6380/0
|
||||
]
|
||||
|
||||
# Or pass a builder block
|
||||
config.cache_store = :redis_cache_store,
|
||||
namespace: 'myapp-cache', compress: true,
|
||||
redis: -> { Redis.new … }
|
||||
```
|
||||
|
||||
Deployment note: Take care to use a *dedicated Redis cache* rather
|
||||
than pointing this at your existing Redis server. It won't cope well
|
||||
with mixed usage patterns and it won't expire cache entries by default.
|
||||
|
||||
Redis cache server setup guide: https://redis.io/topics/lru-cache
|
||||
|
||||
*Jeremy Daer*
|
||||
|
||||
* Cache: Enable compression by default for values > 1kB.
|
||||
|
||||
Compression has long been available, but opt-in and at a 16kB threshold.
|
||||
It wasn't enabled by default due to CPU cost. Today it's cheap and typical
|
||||
cache data is eminently compressible, such as HTML or JSON fragments.
|
||||
Compression dramatically reduces Memcached/Redis mem usage, which means
|
||||
the same cache servers can store more data, which means higher hit rates.
|
||||
|
||||
To disable compression, pass `compress: false` to the initializer.
|
||||
|
||||
*Jeremy Daer*
|
||||
|
||||
* Allow `Range#include?` on TWZ ranges
|
||||
|
||||
In #11474 we prevented TWZ ranges being iterated over which matched
|
||||
Ruby's handling of Time ranges and as a consequence `include?`
|
||||
stopped working with both Time ranges and TWZ ranges. However in
|
||||
ruby/ruby@b061634 support was added for `include?` to use `cover?`
|
||||
for 'linear' objects. Since we have no way of making Ruby consider
|
||||
TWZ instances as 'linear' we have to override `Range#include?`.
|
||||
|
||||
Fixes #30799.
|
||||
|
||||
*Andrew White*
|
||||
|
||||
* Fix acronym support in `humanize`
|
||||
|
||||
Acronym inflections are stored with lowercase keys in the hash but
|
||||
the match wasn't being lowercased before being looked up in the hash.
|
||||
This shouldn't have any performance impact because before it would
|
||||
fail to find the acronym and perform the `downcase` operation anyway.
|
||||
|
||||
Fixes #31052.
|
||||
|
||||
*Andrew White*
|
||||
|
||||
* Add same method signature for `Time#prev_year` and `Time#next_year`
|
||||
in accordance with `Date#prev_year`, `Date#next_year`.
|
||||
|
||||
Allows pass argument for `Time#prev_year` and `Time#next_year`.
|
||||
|
||||
Before:
|
||||
```
|
||||
Time.new(2017, 9, 16, 17, 0).prev_year # => 2016-09-16 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).prev_year(1)
|
||||
# => ArgumentError: wrong number of arguments (given 1, expected 0)
|
||||
|
||||
Time.new(2017, 9, 16, 17, 0).next_year # => 2018-09-16 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).next_year(1)
|
||||
# => ArgumentError: wrong number of arguments (given 1, expected 0)
|
||||
```
|
||||
|
||||
After:
|
||||
```
|
||||
Time.new(2017, 9, 16, 17, 0).prev_year # => 2016-09-16 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).prev_year(1) # => 2016-09-16 17:00:00 +0300
|
||||
|
||||
Time.new(2017, 9, 16, 17, 0).next_year # => 2018-09-16 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).next_year(1) # => 2018-09-16 17:00:00 +0300
|
||||
```
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Add same method signature for `Time#prev_month` and `Time#next_month`
|
||||
in accordance with `Date#prev_month`, `Date#next_month`.
|
||||
|
||||
Allows pass argument for `Time#prev_month` and `Time#next_month`.
|
||||
|
||||
Before:
|
||||
```
|
||||
Time.new(2017, 9, 16, 17, 0).prev_month # => 2017-08-16 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).prev_month(1)
|
||||
# => ArgumentError: wrong number of arguments (given 1, expected 0)
|
||||
|
||||
Time.new(2017, 9, 16, 17, 0).next_month # => 2017-10-16 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).next_month(1)
|
||||
# => ArgumentError: wrong number of arguments (given 1, expected 0)
|
||||
```
|
||||
|
||||
After:
|
||||
```
|
||||
Time.new(2017, 9, 16, 17, 0).prev_month # => 2017-08-16 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).prev_month(1) # => 2017-08-16 17:00:00 +0300
|
||||
|
||||
Time.new(2017, 9, 16, 17, 0).next_month # => 2017-10-16 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).next_month(1) # => 2017-10-16 17:00:00 +0300
|
||||
```
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Add same method signature for `Time#prev_day` and `Time#next_day`
|
||||
in accordance with `Date#prev_day`, `Date#next_day`.
|
||||
|
||||
Allows pass argument for `Time#prev_day` and `Time#next_day`.
|
||||
|
||||
Before:
|
||||
```
|
||||
Time.new(2017, 9, 16, 17, 0).prev_day # => 2017-09-15 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).prev_day(1)
|
||||
# => ArgumentError: wrong number of arguments (given 1, expected 0)
|
||||
|
||||
Time.new(2017, 9, 16, 17, 0).next_day # => 2017-09-17 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).next_day(1)
|
||||
# => ArgumentError: wrong number of arguments (given 1, expected 0)
|
||||
```
|
||||
|
||||
After:
|
||||
```
|
||||
Time.new(2017, 9, 16, 17, 0).prev_day # => 2017-09-15 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).prev_day(1) # => 2017-09-15 17:00:00 +0300
|
||||
|
||||
Time.new(2017, 9, 16, 17, 0).next_day # => 2017-09-17 17:00:00 +0300
|
||||
Time.new(2017, 9, 16, 17, 0).next_day(1) # => 2017-09-17 17:00:00 +0300
|
||||
```
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* `IO#to_json` now returns the `to_s` representation, rather than
|
||||
attempting to convert to an array. This fixes a bug where `IO#to_json`
|
||||
would raise an `IOError` when called on an unreadable object.
|
||||
|
||||
Fixes #26132.
|
||||
|
||||
*Paul Kuruvilla*
|
||||
|
||||
* Remove deprecated `halt_callback_chains_on_return_false` option.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* Remove deprecated `:if` and `:unless` string filter for callbacks.
|
||||
|
||||
*Rafael Mendonça França*
|
||||
|
||||
* `Hash#slice` now falls back to Ruby 2.5+'s built-in definition if defined.
|
||||
|
||||
*Akira Matsuda*
|
||||
|
||||
* Deprecate `secrets.secret_token`.
|
||||
|
||||
The architecture for secrets had a big upgrade between Rails 3 and Rails 4,
|
||||
when the default changed from using `secret_token` to `secret_key_base`.
|
||||
|
||||
`secret_token` has been soft deprecated in documentation for four years
|
||||
but is still in place to support apps created before Rails 4.
|
||||
Deprecation warnings have been added to help developers upgrade their
|
||||
applications to `secret_key_base`.
|
||||
|
||||
*claudiob*, *Kasper Timm Hansen*
|
||||
|
||||
* Return an instance of `HashWithIndifferentAccess` from `HashWithIndifferentAccess#transform_keys`.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Add key rotation support to `MessageEncryptor` and `MessageVerifier`
|
||||
|
||||
This change introduces a `rotate` method to both the `MessageEncryptor` and
|
||||
`MessageVerifier` classes. This method accepts the same arguments and
|
||||
options as the given classes' constructor. The `encrypt_and_verify` method
|
||||
for `MessageEncryptor` and the `verified` method for `MessageVerifier` also
|
||||
accept an optional keyword argument `:on_rotation` block which is called
|
||||
when a rotated instance is used to decrypt or verify the message.
|
||||
|
||||
*Michael J Coyne*
|
||||
|
||||
* Deprecate `Module#reachable?` method.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Add `config/credentials.yml.enc` to store production app secrets.
|
||||
|
||||
Allows saving any authentication credentials for third party services
|
||||
directly in repo encrypted with `config/master.key` or `ENV["RAILS_MASTER_KEY"]`.
|
||||
|
||||
This will eventually replace `Rails.application.secrets` and the encrypted
|
||||
secrets introduced in Rails 5.1.
|
||||
|
||||
*DHH*, *Kasper Timm Hansen*
|
||||
|
||||
* Add `ActiveSupport::EncryptedFile` and `ActiveSupport::EncryptedConfiguration`.
|
||||
|
||||
Allows for stashing encrypted files or configuration directly in repo by
|
||||
encrypting it with a key.
|
||||
|
||||
Backs the new credentials setup above, but can also be used independently.
|
||||
|
||||
*DHH*, *Kasper Timm Hansen*
|
||||
|
||||
* `Module#delegate_missing_to` now raises `DelegationError` if target is nil,
|
||||
similar to `Module#delegate`.
|
||||
|
||||
*Anton Khamets*
|
||||
|
||||
* Update `String#camelize` to provide feedback when wrong option is passed
|
||||
|
||||
`String#camelize` was returning nil without any feedback when an
|
||||
invalid option was passed as a parameter.
|
||||
|
||||
Previously:
|
||||
|
||||
'one_two'.camelize(true)
|
||||
# => nil
|
||||
|
||||
Now:
|
||||
|
||||
'one_two'.camelize(true)
|
||||
# => ArgumentError: Invalid option, use either :upper or :lower.
|
||||
|
||||
*Ricardo Díaz*
|
||||
|
||||
* Fix modulo operations involving durations
|
||||
|
||||
Rails 5.1 introduced `ActiveSupport::Duration::Scalar` as a wrapper
|
||||
around numeric values as a way of ensuring a duration was the outcome of
|
||||
an expression. However, the implementation was missing support for modulo
|
||||
operations. This support has now been added and should result in a duration
|
||||
being returned from expressions involving modulo operations.
|
||||
|
||||
Prior to Rails 5.1:
|
||||
|
||||
5.minutes % 2.minutes
|
||||
# => 60
|
||||
|
||||
Now:
|
||||
|
||||
5.minutes % 2.minutes
|
||||
# => 1 minute
|
||||
|
||||
Fixes #29603 and #29743.
|
||||
|
||||
*Sayan Chakraborty*, *Andrew White*
|
||||
|
||||
* Fix division where a duration is the denominator
|
||||
|
||||
PR #29163 introduced a change in behavior when a duration was the denominator
|
||||
in a calculation - this was incorrect as dividing by a duration should always
|
||||
return a `Numeric`. The behavior of previous versions of Rails has been restored.
|
||||
|
||||
Fixes #29592.
|
||||
|
||||
*Andrew White*
|
||||
|
||||
* Add purpose and expiry support to `ActiveSupport::MessageVerifier` &
|
||||
`ActiveSupport::MessageEncryptor`.
|
||||
|
||||
For instance, to ensure a message is only usable for one intended purpose:
|
||||
|
||||
token = @verifier.generate("x", purpose: :shipping)
|
||||
|
||||
@verifier.verified(token, purpose: :shipping) # => "x"
|
||||
@verifier.verified(token) # => nil
|
||||
|
||||
Or make it expire after a set time:
|
||||
|
||||
@verifier.generate("x", expires_in: 1.month)
|
||||
@verifier.generate("y", expires_at: Time.now.end_of_year)
|
||||
|
||||
Showcased with `ActiveSupport::MessageVerifier`, but works the same for
|
||||
`ActiveSupport::MessageEncryptor`'s `encrypt_and_sign` and `decrypt_and_verify`.
|
||||
|
||||
Pull requests: #29599, #29854
|
||||
|
||||
*Assain Jaleel*
|
||||
|
||||
* Make the order of `Hash#reverse_merge!` consistent with `HashWithIndifferentAccess`.
|
||||
|
||||
*Erol Fornoles*
|
||||
|
||||
* Add `freeze_time` helper which freezes time to `Time.now` in tests.
|
||||
|
||||
*Prathamesh Sonpatki*
|
||||
|
||||
* Default `ActiveSupport::MessageEncryptor` to use AES 256 GCM encryption.
|
||||
|
||||
On for new Rails 5.2 apps. Upgrading apps can find the config as a new
|
||||
framework default.
|
||||
|
||||
*Assain Jaleel*
|
||||
|
||||
* Cache: `write_multi`
|
||||
|
||||
Rails.cache.write_multi foo: 'bar', baz: 'qux'
|
||||
|
||||
Plus faster fetch_multi with stores that implement `write_multi_entries`.
|
||||
Keys that aren't found may be written to the cache store in one shot
|
||||
instead of separate writes.
|
||||
|
||||
The default implementation simply calls `write_entry` for each entry.
|
||||
Stores may override if they're capable of one-shot bulk writes, like
|
||||
Redis `MSET`.
|
||||
|
||||
*Jeremy Daer*
|
||||
|
||||
* Add default option to module and class attribute accessors.
|
||||
|
||||
mattr_accessor :settings, default: {}
|
||||
|
||||
Works for `mattr_reader`, `mattr_writer`, `cattr_accessor`, `cattr_reader`,
|
||||
and `cattr_writer` as well.
|
||||
|
||||
*Genadi Samokovarov*
|
||||
|
||||
* Add `Date#prev_occurring` and `Date#next_occurring` to return specified next/previous occurring day of week.
|
||||
|
||||
*Shota Iguchi*
|
||||
|
||||
* Add default option to `class_attribute`.
|
||||
|
||||
Before:
|
||||
|
||||
class_attribute :settings
|
||||
self.settings = {}
|
||||
|
||||
Now:
|
||||
|
||||
class_attribute :settings, default: {}
|
||||
|
||||
*DHH*
|
||||
|
||||
* `#singularize` and `#pluralize` now respect uncountables for the specified locale.
|
||||
|
||||
*Eilis Hamilton*
|
||||
|
||||
* Add `ActiveSupport::CurrentAttributes` to provide a thread-isolated attributes singleton.
|
||||
Primary use case is keeping all the per-request attributes easily available to the whole system.
|
||||
|
||||
*DHH*
|
||||
|
||||
* Fix implicit coercion calculations with scalars and durations
|
||||
|
||||
Previously, calculations where the scalar is first would be converted to a duration
|
||||
of seconds, but this causes issues with dates being converted to times, e.g:
|
||||
|
||||
Time.zone = "Beijing" # => Asia/Shanghai
|
||||
date = Date.civil(2017, 5, 20) # => Mon, 20 May 2017
|
||||
2 * 1.day # => 172800 seconds
|
||||
date + 2 * 1.day # => Mon, 22 May 2017 00:00:00 CST +08:00
|
||||
|
||||
Now, the `ActiveSupport::Duration::Scalar` calculation methods will try to maintain
|
||||
the part structure of the duration where possible, e.g:
|
||||
|
||||
Time.zone = "Beijing" # => Asia/Shanghai
|
||||
date = Date.civil(2017, 5, 20) # => Mon, 20 May 2017
|
||||
2 * 1.day # => 2 days
|
||||
date + 2 * 1.day # => Mon, 22 May 2017
|
||||
|
||||
Fixes #29160, #28970.
|
||||
|
||||
*Andrew White*
|
||||
|
||||
* Add support for versioned cache entries. This enables the cache stores to recycle cache keys, greatly saving
|
||||
on storage in cases with frequent churn. Works together with the separation of `#cache_key` and `#cache_version`
|
||||
in Active Record and its use in Action Pack's fragment caching.
|
||||
|
||||
*DHH*
|
||||
|
||||
* Pass gem name and deprecation horizon to deprecation notifications.
|
||||
|
||||
*Willem van Bergen*
|
||||
|
||||
* Add support for `:offset` and `:zone` to `ActiveSupport::TimeWithZone#change`
|
||||
|
||||
*Andrew White*
|
||||
|
||||
* Add support for `:offset` to `Time#change`
|
||||
|
||||
Fixes #28723.
|
||||
|
||||
*Andrew White*
|
||||
|
||||
* Add `fetch_values` for `HashWithIndifferentAccess`
|
||||
|
||||
The method was originally added to `Hash` in Ruby 2.3.0.
|
||||
|
||||
*Josh Pencheon*
|
||||
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/activesupport/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/activesupport/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module ActiveSupport
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -1,10 +1,3 @@
|
|||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/guides/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/guides/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -1,164 +1,3 @@
|
|||
## Rails 5.2.0.beta2 (November 28, 2017) ##
|
||||
|
||||
* No changes.
|
||||
|
||||
|
||||
## Rails 5.2.0.beta1 (November 27, 2017) ##
|
||||
|
||||
* Deprecate `after_bundle` callback in Rails plugin templates.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* `rails new` and `rails plugin new` get `Active Storage` by default.
|
||||
Add ability to skip `Active Storage` with `--skip-active-storage`
|
||||
and do so automatically when `--skip-active-record` is used.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Gemfile for new apps: upgrade redis-rb from ~> 3.0 to 4.0.
|
||||
|
||||
*Jeremy Daer*
|
||||
|
||||
* Add `mini_magick` to default `Gemfile` as comment.
|
||||
|
||||
*Yoshiyuki Hirano*
|
||||
|
||||
* Derive `secret_key_base` from the app name in development and test environments.
|
||||
|
||||
Spares away needless secret configs.
|
||||
|
||||
*DHH*, *Kasper Timm Hansen*
|
||||
|
||||
* Support multiple versions arguments for `gem` method of Generators.
|
||||
|
||||
*Yoshiyuki Hirano*
|
||||
|
||||
* Add `--skip-yarn` option to the plugin generator.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Optimize routes indentation.
|
||||
|
||||
*Yoshiyuki Hirano*
|
||||
|
||||
* Optimize indentation for generator actions.
|
||||
|
||||
*Yoshiyuki Hirano*
|
||||
|
||||
* Skip unused components when running `bin/rails` in Rails plugin.
|
||||
|
||||
*Yoshiyuki Hirano*
|
||||
|
||||
* Add `git_source` to `Gemfile` for plugin generator.
|
||||
|
||||
*Yoshiyuki Hirano*
|
||||
|
||||
* Add `--skip-action-cable` option to the plugin generator.
|
||||
|
||||
*bogdanvlviv*
|
||||
|
||||
* Deprecate support for using a `Rails::Application` subclass to start Rails server.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Add `ruby x.x.x` version to `Gemfile` and create `.ruby-version`
|
||||
root file containing the current Ruby version when new Rails applications are
|
||||
created.
|
||||
|
||||
*Alberto Almagro*
|
||||
|
||||
* Support `-` as a platform-agnostic way to run a script from stdin with
|
||||
`rails runner`
|
||||
|
||||
*Cody Cutrer*
|
||||
|
||||
* Add `bootsnap` to default `Gemfile`.
|
||||
|
||||
*Burke Libbey*
|
||||
|
||||
* Properly expand shortcuts for environment's name running the `console`
|
||||
and `dbconsole` commands.
|
||||
|
||||
*Robin Dupret*
|
||||
|
||||
* Passing the environment's name as a regular argument to the
|
||||
`rails dbconsole` and `rails console` commands is deprecated.
|
||||
The `-e` option should be used instead.
|
||||
|
||||
Previously:
|
||||
|
||||
$ bin/rails dbconsole production
|
||||
|
||||
Now:
|
||||
|
||||
$ bin/rails dbconsole -e production
|
||||
|
||||
*Robin Dupret*, *Kasper Timm Hansen*
|
||||
|
||||
* Allow passing a custom connection name to the `rails dbconsole`
|
||||
command when using a 3-level database configuration.
|
||||
|
||||
$ bin/rails dbconsole -c replica
|
||||
|
||||
*Robin Dupret*, *Jeremy Daer*
|
||||
|
||||
* Skip unused components when running `bin/rails app:update`.
|
||||
|
||||
If the initial app generation skipped Action Cable, Active Record etc.,
|
||||
the update task honors those skips too.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Make Rails' test runner work better with minitest plugins.
|
||||
|
||||
By demoting the Rails test runner to just another minitest plugin —
|
||||
and thereby not eager loading it — we can co-exist much better with
|
||||
other minitest plugins such as pride and minitest-focus.
|
||||
|
||||
*Kasper Timm Hansen*
|
||||
|
||||
* Load environment file in `dbconsole` command.
|
||||
|
||||
Fixes #29717.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Add `rails secrets:show` command.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Allow mounting the same engine several times in different locations.
|
||||
|
||||
Fixes #20204.
|
||||
|
||||
*David Rodríguez*
|
||||
|
||||
* Clear screenshot files in `tmp:clear` task.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Add `railtie.rb` to the plugin generator
|
||||
|
||||
*Tsukuru Tanimichi*
|
||||
|
||||
* Deprecate `capify!` method in generators and templates.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Allow irb options to be passed from `rails console` command.
|
||||
|
||||
Fixes #28988.
|
||||
|
||||
*Yuji Yaginuma*
|
||||
|
||||
* Added a shared section to `config/database.yml` that will be loaded for all environments.
|
||||
|
||||
*Pierre Schambacher*
|
||||
|
||||
* Namespace error pages' CSS selectors to stop the styles from bleeding into other pages
|
||||
when using Turbolinks.
|
||||
|
||||
*Jan Krutisch*
|
||||
|
||||
|
||||
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/railties/CHANGELOG.md) for previous changes.
|
||||
Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/railties/CHANGELOG.md) for previous changes.
|
||||
|
|
|
@ -7,10 +7,10 @@ module Rails
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
|
@ -7,10 +7,10 @@ module Rails
|
|||
end
|
||||
|
||||
module VERSION
|
||||
MAJOR = 5
|
||||
MINOR = 2
|
||||
MAJOR = 6
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
PRE = "beta2"
|
||||
PRE = "alpha"
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue