Class: Factbase::Taped
- Inherits:
-
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
|
#added ⇒ Object
31
32
33
|
# File 'lib/factbase/taped.rb', line 31
def added
@added.uniq
end
|
#delete_if ⇒ Object
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
|
#deleted ⇒ Object
27
28
29
|
# File 'lib/factbase/taped.rb', line 27
def deleted
@deleted.uniq
end
|
#each ⇒ Object
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
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
|
#inserted ⇒ Object
23
24
25
|
# File 'lib/factbase/taped.rb', line 23
def inserted
@inserted.uniq
end
|
#size ⇒ Object
39
40
41
|
# File 'lib/factbase/taped.rb', line 39
def size
@origin.size
end
|
#to_a ⇒ Object
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
|