Class: Bag
- Inherits:
-
Object
show all
- Includes:
- Enumerable
- Defined in:
- lib/ObjectModel/AnEntity/Bag.rb
Instance Method Summary
collapse
Constructor Details
#initialize(entity, attr_name, repository) ⇒ Bag
Returns a new instance of Bag.
4
5
6
7
8
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 4
def initialize entity, attr_name, repository
@entity, @entity_id, @attr_name, @repository = entity, entity.entity_id, attr_name, repository
@array = []
@ivname = "@#{@attr_name}"
end
|
Instance Method Details
#<<(value) ⇒ Object
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 52
def << value
if tr = Thread.current[:om_transaction]
tr.event_processor.fire_before @entity, new_item_method_name, @attr_name, value
copy = tr.copy_get! @entity
copy[@ivname].add value.entity_id
tr.event_processor.fire_after @entity, new_item_method_name, @attr_name, value
else
raise NoTransactionError
end
end
|
#_array ⇒ Object
10
11
12
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 10
def _array
@array
end
|
#clear ⇒ Object
63
64
65
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 63
def clear
delete_if{true}
end
|
#delete(value) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 14
def delete value
if tr = Thread.current[:om_transaction]
return unless value.is_a? Entity
copy = tr.copy_get! @entity
previous = false
copy[@ivname].delete_if do |entity_id|
if previous
tr.event_processor.fire_after @entity, delete_item_method_name, @attr_name, value
previous = false
end
if value.entity_id == entity_id
tr.event_processor.fire_before @entity, delete_item_method_name, @attr_name, value
previous = true
true
else
false
end
end
tr.event_processor.fire_after @entity, delete_item_method_name, @attr_name, value if previous
else
raise NoTransactionError
end
end
|
#delete_if(&b) ⇒ Object
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 67
def delete_if &b
if tr = Thread.current[:om_transaction]
copy = tr.copy_get! @entity
previous_entity = nil
copy[@ivname].delete_if do |entity_id|
entity = tr.resolve(entity_id)
if previous_entity != nil
tr.event_processor.fire_after @entity, delete_item_method_name, @attr_name, previous_entity
previous_entity = entity
end
if b.call entity
tr.event_processor.fire_before @entity, delete_item_method_name, @attr_name, entity
previous = true
true
else
false
end
end
if previous_entity != nil
tr.event_processor.fire_after @entity, delete_item_method_name, @attr_name, previous_entity
end
else
raise NoTransactionError
end
end
|
#each(&b) ⇒ Object
96
97
98
99
100
101
102
103
104
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 96
def each &b
tr = Thread.current[:om_transaction]
if tr and tr.changed? @entity_id
array = tr.copies[@entity_id][@ivname]
array.each{|entity_id| b.call tr.resolve(entity_id)}
else
@array.each{|entity_id| b.call @repository.by_id(entity_id)}
end
end
|
#empty? ⇒ Boolean
122
123
124
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 122
def empty?
size == 0
end
|
#ids ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 106
def ids
if tr = Thread.current[:om_transaction]
if tr.changed? @entity_id
tr.copies[@entity_id][@ivname]
else
@array
end
else
@array
end
end
|
#inspect ⇒ Object
126
127
128
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 126
def inspect
to_s
end
|
#size ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 40
def size
if tr = Thread.current[:om_transaction]
if tr.changed? @entity_id
tr.copies[@entity_id][@ivname].size
else
@array.size
end
else
@array.size
end
end
|
#to_s ⇒ Object
118
119
120
|
# File 'lib/ObjectModel/AnEntity/Bag.rb', line 118
def to_s
"#<Bag '#{@entity_id}': [#{@array.join(', ')}]>"
end
|