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, inserted: [], deleted: [], added: []) ⇒ Taped

Returns a new instance of Taped.



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

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

Instance Method Details

#&(other) ⇒ Object



70
71
72
73
# File 'lib/factbase/taped.rb', line 70

def &(other)
  return Factbase::Taped.new([], inserted: @inserted, deleted: @deleted, added: @added) if other == []
  join(other, &:&)
end

#<<(map) ⇒ Object



46
47
48
49
# File 'lib/factbase/taped.rb', line 46

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



58
59
60
61
62
63
64
# File 'lib/factbase/taped.rb', line 58

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



51
52
53
54
55
56
# File 'lib/factbase/taped.rb', line 51

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

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  @origin.empty?
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

#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



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

def to_a
  @origin.to_a
end

#|(other) ⇒ Object



75
76
77
# File 'lib/factbase/taped.rb', line 75

def |(other)
  join(other, &:|)
end