-
Notifications
You must be signed in to change notification settings - Fork 1
/
load_cycle.rb
80 lines (60 loc) · 1.62 KB
/
load_cycle.rb
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
$LOAD_PATH.unshift File.expand_path(File.join(__dir__, '..', 'lib'))
require 'yasl'
require 'date'
require 'set'
class Car
attr_accessor :make,
:model,
:year,
:owner
end
class Person
class << self
def reset_count!
@count = 0
end
def increment_count!
@count ||= 0
@count += 1
end
def reset_class_count!
@@class_count = 0
end
def increment_class_count!
@@class_count = 0 unless defined?(@@class_count)
@@class_count += 1
end
end
attr_accessor :name, :dob, :cars
def initialize
self.class.increment_count!
self.class.increment_class_count!
end
end
person = Person.new
person.name = 'Sean Hux'
person.dob = Time.new(2017, 10, 17, 10, 3, 4)
car = Car.new
car.make = 'Mitsubishi'
car.model = 'Eclipse'
car.year = '2002'
car.owner = person
person.cars = [car]
dump = YASL.dump(car)
car2 = YASL.load(dump, whitelist_classes: [Car, Person])
puts car2.make
# => Mitsubishi
puts car2.model
# => Eclipse
puts car2.year
# => 2002
puts car2.owner
# => #<Person:0x00007ffdf008dc20>
puts car2.owner.name
# => Sean Hux
puts car2.owner.dob
# => 2017-10-17 10:03:04 -0400
puts car2.owner.cars.inspect
# => [#<Car:0x00007ffdf008e120 @make="Mitsubishi", @model="Eclipse", @year="2002", @owner=#<Person:0x00007ffdf008dc20 @name="Sean Hux", @dob=2017-10-17 10:03:04 -0400, @cars=[...]>>]
puts car2.inspect
# => #<Car:0x00007ffdf008e120 @make="Mitsubishi", @model="Eclipse", @year="2002", @owner=#<Person:0x00007ffdf008dc20 @name="Sean Hux", @dob=2017-10-17 10:03:04 -0400, @cars=[#<Car:0x00007ffdf008e120 ...>]>>