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.



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

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

Instance Method Details

#&(other) ⇒ Object



71
72
73
74
75
76
# File 'lib/factbase/taped.rb', line 71

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

#<<(map) ⇒ Object



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

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

#addedObject



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

def added
  @added.uniq
end

#delete_ifObject



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

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

#deletedObject



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

def deleted
  @deleted.uniq
end

#eachObject



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

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

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  @origin.empty?
end

#find_by_object_id(oid) ⇒ Object



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

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

#insertedObject



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

def inserted
  @inserted.uniq
end

#sizeObject



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

def size
  @origin.size
end

#to_aObject



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

def to_a
  @origin.to_a
end

#|(other) ⇒ Object



78
79
80
81
82
# File 'lib/factbase/taped.rb', line 78

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