Class: Foobara::WeakObjectSet::GarbageCleaner
- Inherits:
-
Object
- Object
- Foobara::WeakObjectSet::GarbageCleaner
- Defined in:
- foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb
Instance Method Summary collapse
- #cleanup_proc ⇒ Object
- #deactivate ⇒ Object
-
#initialize(objects, key_to_object_id = nil, object_id_to_key = nil) ⇒ GarbageCleaner
constructor
A new instance of GarbageCleaner.
- #track(object) ⇒ Object
Constructor Details
#initialize(objects, key_to_object_id = nil, object_id_to_key = nil) ⇒ GarbageCleaner
Returns a new instance of GarbageCleaner.
4 5 6 7 8 |
# File 'foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb', line 4 def initialize(objects, key_to_object_id = nil, object_id_to_key = nil) @objects = objects @key_to_object_id = key_to_object_id @object_id_to_key = object_id_to_key end |
Instance Method Details
#cleanup_proc ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb', line 10 def cleanup_proc @cleanup_proc ||= ->(object_id) { unless @deactivated @objects.delete(object_id) key = @object_id_to_key&.delete(object_id) if key @key_to_object_id.delete(key) end end } end |
#deactivate ⇒ Object
34 35 36 |
# File 'foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb', line 34 def deactivate @deactivated = true end |
#track(object) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb', line 24 def track(object) if @deactivated # :nocov: raise "Cannot track anymore objects since we have been deactivated" # :nocov: end ObjectSpace.define_finalizer(object, cleanup_proc) end |