mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
add optional second argument to ActiveSupport core extension for Marshal#load so it can take a proc
This commit is contained in:
parent
87b2b6c512
commit
a72498f776
3 changed files with 21 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
* In Core Extensions, make `MarshalWithAutoloading#load` pass through the second, optional
|
||||||
|
argument for `Marshal#load( source [, proc] )`. This way we don't have to do
|
||||||
|
`Marshal.method(:load).super_method.call(sourse, proc)` just to be able to pass a proc.
|
||||||
|
|
||||||
|
*Jeff Latz*
|
||||||
|
|
||||||
## Rails 5.1.0.beta1 (February 23, 2017) ##
|
## Rails 5.1.0.beta1 (February 23, 2017) ##
|
||||||
|
|
||||||
* Cache `ActiveSupport::TimeWithZone#to_datetime` before freezing.
|
* Cache `ActiveSupport::TimeWithZone#to_datetime` before freezing.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module ActiveSupport
|
module ActiveSupport
|
||||||
module MarshalWithAutoloading # :nodoc:
|
module MarshalWithAutoloading # :nodoc:
|
||||||
def load(source)
|
def load(source, proc = nil)
|
||||||
super(source)
|
super(source, proc)
|
||||||
rescue ArgumentError, NameError => exc
|
rescue ArgumentError, NameError => exc
|
||||||
if exc.message.match(%r|undefined class/module (.+?)(?:::)?\z|)
|
if exc.message.match(%r|undefined class/module (.+?)(?:::)?\z|)
|
||||||
# try loading the class/module
|
# try loading the class/module
|
||||||
|
|
|
@ -19,6 +19,19 @@ class MarshalTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "that Marshal#load still works when passed a proc" do
|
||||||
|
example_string = "test"
|
||||||
|
|
||||||
|
example_proc = Proc.new do |o|
|
||||||
|
if o.is_a?(String)
|
||||||
|
o.capitalize!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
dumped = Marshal.dump(example_string)
|
||||||
|
assert_equal Marshal.load(dumped, example_proc), "Test"
|
||||||
|
end
|
||||||
|
|
||||||
test "that a missing class is autoloaded from string" do
|
test "that a missing class is autoloaded from string" do
|
||||||
dumped = nil
|
dumped = nil
|
||||||
with_autoloading_fixtures do
|
with_autoloading_fixtures do
|
||||||
|
|
Loading…
Reference in a new issue