aboutsummaryrefslogblamecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/marshal.rb
blob: fec3051c0c4da83a20353cbf0b294cf4054f405f (plain) (tree)




















                                                               
module Marshal
  class << self
    def load_with_autoloading(source)
      begin
        load_without_autoloading(source)
      rescue ArgumentError, NameError => exc
        if exc.message.match(%r|undefined class/module (.+)|)
          # try loading the class/module
          $1.constantize
          # if it is a IO we need to go back to read the object
          source.rewind if source.respond_to?(:rewind)
          retry
        else
          raise exc
        end
      end
    end

    alias_method_chain :load, :autoloading
  end
end