Module: ActiveSupport::MarshalWithAutoloading

Defined in:
lib/active_support/core_ext/marshal.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#load(source, proc = nil) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/active_support/core_ext/marshal.rb', line 3

def load(source, proc = nil)
  super(source, proc)
rescue ArgumentError, NameError => exc
  if exc.message.match(%r|undefined class/module (.+?)(?:::)?\z|)
    # try loading the class/module
    loaded = $1.constantize

    raise unless $1 == loaded.name

    # if it is an IO we need to go back to read the object
    source.rewind if source.respond_to?(:rewind)
    retry
  else
    raise exc
  end
end