Class: Factbase::Taped

Inherits:
Object
  • Object
show all
Defined in:
lib/factbase/taped.rb

Overview

A decorator of an Array with HashMaps, that records facts that have been touched, using their object_id.

Author

Yegor Bugayenko ([email protected])

Copyright

Copyright © 2024-2025 Yegor Bugayenko

License

MIT

Defined Under Namespace

Classes: TapedArray, TapedHash

Instance Method Summary collapse

Constructor Details

#initialize(origin) ⇒ Taped

Returns a new instance of Taped.



15
16
17
18
19
20
# File 'lib/factbase/taped.rb', line 15

def initialize(origin)
  @origin = origin
  @inserted = []
  @deleted = []
  @added = []
end

Instance Method Details

#<<(map) ⇒ Object



42
43
44
45
# File 'lib/factbase/taped.rb', line 42

def <<(map)
  @origin << (map)
  @inserted.append(map.object_id)
end

#addedObject



30
31
32
# File 'lib/factbase/taped.rb', line 30

def added
  @added.uniq
end

#delete_ifObject



54
55
56
57
58
59
60
# File 'lib/factbase/taped.rb', line 54

def delete_if
  @origin.delete_if do |m|
    r = yield m
    @deleted.append(m.object_id) if r
    r
  end
end

#deletedObject



26
27
28
# File 'lib/factbase/taped.rb', line 26

def deleted
  @deleted.uniq
end

#eachObject



47
48
49
50
51
52
# File 'lib/factbase/taped.rb', line 47

def each
  return to_enum(__method__) unless block_given?
  @origin.each do |m|
    yield TapedHash.new(m, @added)
  end
end

#find_by_object_id(oid) ⇒ Object



34
35
36
# File 'lib/factbase/taped.rb', line 34

def find_by_object_id(oid)
  @origin.find { |m| m.object_id == oid }
end

#group_byObject



66
67
68
# File 'lib/factbase/taped.rb', line 66

def group_by(&)
  @origin.group_by(&)
end

#insertedObject



22
23
24
# File 'lib/factbase/taped.rb', line 22

def inserted
  @inserted.uniq
end

#sizeObject



38
39
40
# File 'lib/factbase/taped.rb', line 38

def size
  @origin.size
end

#to_aObject



62
63
64
# File 'lib/factbase/taped.rb', line 62

def to_a
  @origin.to_a
end