At present, if you skip a callback that hasn't been defined, activesupport callbacks silently does nothing. However, it's easy to mistype the name of a callback and mistakenly think that it's being skipped, when it is not. This problem even exists in the current test suite. CallbacksTest::SkipCallbacksTest#test_skip_person attempts to skip callbacks that were never set up. This PR changes `skip_callback` to raise an `ArgumentError` if the specified callback cannot be found.
7.9 KiB
-
ActiveSupport::Callbacks#skip_callback
now raises anArgumentError
if an unrecognized callback is removed.Iain Beeston
-
Added
ActiveSupport::ArrayInquirer
andArray#inquiry
.Wrapping an array in an
ArrayInquirer
gives a friendlier way to check its contents:variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet]) variants.phone? # => true variants.tablet? # => true variants.desktop? # => false variants.any?(:phone, :tablet) # => true variants.any?(:phone, :desktop) # => true variants.any?(:desktop, :watch) # => false
Array#inquiry
is a shortcut for wrapping the receiving array in anArrayInquirer
.George Claghorn
-
Deprecate
alias_method_chain
in favour ofModule#prepend
introduced in Ruby 2.0Kir Shatrov
-
Added
#without
onEnumerable
andArray
to return a copy of an enumerable without the specified elements.Todd Bealmear
-
Fixed a problem where String#truncate_words would get stuck with a complex string.
Henrik Nygren
-
Fixed a roundtrip problem with AS::SafeBuffer where primitive-like strings will be dumped as primitives:
Before:
YAML.load ActiveSupport::SafeBuffer.new("Hello").to_yaml # => "Hello" YAML.load ActiveSupport::SafeBuffer.new("true").to_yaml # => true YAML.load ActiveSupport::SafeBuffer.new("false").to_yaml # => false YAML.load ActiveSupport::SafeBuffer.new("1").to_yaml # => 1 YAML.load ActiveSupport::SafeBuffer.new("1.1").to_yaml # => 1.1
After:
YAML.load ActiveSupport::SafeBuffer.new("Hello").to_yaml # => "Hello" YAML.load ActiveSupport::SafeBuffer.new("true").to_yaml # => "true" YAML.load ActiveSupport::SafeBuffer.new("false").to_yaml # => "false" YAML.load ActiveSupport::SafeBuffer.new("1").to_yaml # => "1" YAML.load ActiveSupport::SafeBuffer.new("1.1").to_yaml # => "1.1"
Godfrey Chan
-
Enable
number_to_percentage
to keep the number's precision by allowing:precision
to benil
.Jack Xu
-
config_accessor
became a private method, as with Ruby'sattr_accessor
.Akira Matsuda
-
AS::Testing::TimeHelpers#travel_to
now changesDateTime.now
as well asTime.now
andDate.today
.Yuki Nishijima
-
Add
file_fixture
toActiveSupport::TestCase
. It provides a simple mechanism to access sample files in your test cases.By default file fixtures are stored in
test/fixtures/files
. This can be configured per test-case using thefile_fixture_path
class attribute.Yves Senn
-
Return value of yielded block in
File.atomic_write
.Ian Ker-Seymer
-
Duplicate frozen array when assigning it to a HashWithIndifferentAccess so that it doesn't raise a
RuntimeError
when callingmap!
on it inconvert_value
.Fixes #18550.
Aditya Kapoor
-
Add missing time zone definitions for Russian Federation and sync them with
zone.tab
file from tzdata version 2014j (latest).Andrey Novikov
-
Add
SecureRandom.base58
for generation of random base58 strings.Matthew Draper, Guillermo Iguaran
-
Add
#prev_day
and#next_day
counterparts to#yesterday
and#tomorrow
forDate
,Time
, andDateTime
.George Claghorn
-
Add
same_time
option to#next_week
and#prev_week
forDate
,Time
, andDateTime
.George Claghorn
-
Add
#on_weekend?
,#next_weekday
,#prev_weekday
methods toDate
,Time
, andDateTime
.#on_weekend?
returns true if the receiving date/time falls on a Saturday or Sunday.#next_weekday
returns a new date/time representing the next day that does not fall on a Saturday or Sunday.#prev_weekday
returns a new date/time representing the previous day that does not fall on a Saturday or Sunday.George Claghorn
-
Change the default test order from
:sorted
to:random
.Rafael Mendonça França
-
Remove deprecated
ActiveSupport::JSON::Encoding::CircularReferenceError
.Rafael Mendonça França
-
Remove deprecated methods
ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=
andActiveSupport::JSON::Encoding.encode_big_decimal_as_string
.Rafael Mendonça França
-
Remove deprecated
ActiveSupport::SafeBuffer#prepend
.Rafael Mendonça França
-
Remove deprecated methods at
Kernel
.silence_stderr
,silence_stream
,capture
andquietly
.Rafael Mendonça França
-
Remove deprecated
active_support/core_ext/big_decimal/yaml_conversions
file.Rafael Mendonça França
-
Remove deprecated methods
ActiveSupport::Cache::Store.instrument
andActiveSupport::Cache::Store.instrument=
.Rafael Mendonça França
-
Change the way in which callback chains can be halted.
The preferred method to halt a callback chain from now on is to explicitly
throw(:abort)
. In the past, returningfalse
in an ActiveSupport callback had the side effect of halting the callback chain. This is not recommended anymore and, depending on the value ofCallbacks::CallbackChain.halt_and_display_warning_on_return_false
, will either not work at all or display a deprecation warning. -
Add Callbacks::CallbackChain.halt_and_display_warning_on_return_false
Setting
Callbacks::CallbackChain.halt_and_display_warning_on_return_false
to true will let an app support the deprecated way of halting callback chains by returningfalse
.Setting the value to false will tell the app to ignore any
false
value returned by callbacks, and only halt the chain uponthrow(:abort)
.The value can also be set with the Rails configuration option
config.active_support.halt_callback_chains_on_return_false
.When the configuration option is missing, its value is
true
, so older apps ported to Rails 5.0 will not break (but display a deprecation warning). For new Rails 5.0 apps, its value is set tofalse
in an initializer, so these apps will support the new behavior by default.claudiob
-
Changes arguments and default value of CallbackChain's :terminator option
Chains of callbacks defined without an explicit
:terminator
option will now be halted as soon as abefore_
callback throws:abort
.Chains of callbacks defined with a
:terminator
option will maintain their existing behavior of halting as soon as abefore_
callback matches the terminator's expectation.claudiob
-
Deprecate
MissingSourceFile
in favor ofLoadError
.MissingSourceFile
was just an alias toLoadError
and was not being raised inside the framework.Rafael Mendonça França
-
Add support for error dispatcher classes in
ActiveSupport::Rescuable
. Now it acts closer to Ruby's rescue.Example:
class BaseController < ApplicationController module ErrorDispatcher def self.===(other) Exception === other && other.respond_to?(:status) end end rescue_from ErrorDispatcher do |error| render status: error.status, json: { error: error.to_s } end end
Genadi Samokovarov
-
Add
#verified
and#valid_message?
methods toActiveSupport::MessageVerifier
Previously, the only way to decode a message with
ActiveSupport::MessageVerifier
was to use#verify
, which would raise an exception on invalid messages. Now#verified
can also be used, which returnsnil
on messages that cannot be decoded.Previously, there was no way to check if a message's format was valid without attempting to decode it.
#valid_message?
is a boolean convenience method that checks whether the message is valid without actually decoding it.Logan Leger
Please check 4-2-stable for previous changes.