Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
FILE = "classes.marshal"
if File.exist? FILE
  begin
    p File.open(FILE, "rb") { |file| Marshal.load(file) }
  rescue ArgumentError => error
    if cls = error.message[%r{\bclass/module\s*(\w+)\b}, 1]
      Object.const_set(cls, Class.new)
      retry
    end
  end
else
  class A
    attr_accessor :b
  end

  class B
    attr_accessor :c
  end

  class C
  end

  a     = A.new
  a.b   = B.new
  a.b.c = C.new
  File.open(FILE, "wb") { |file| Marshal.dump(a, file) }
end