Class: BackReferences
- Inherits:
-
Object
- Object
- BackReferences
- Defined in:
- lib/ObjectModel/AnEntity/BackReferences.rb
Class Method Summary collapse
- .delete(e, storage) ⇒ Object
- .delete_all_references_to(e, c, &callback) ⇒ Object
- .delete_backreference(entity, reference, reference_copy) ⇒ Object
- .initialize_copy(e, c) ⇒ Object
- .initialize_entity(e) ⇒ Object
- .initialize_storage(db) ⇒ Object
- .load(e, storage) ⇒ Object
- .new_backreference(entity, reference, reference_copy) ⇒ Object
- .persist(c, entity_id, storage) ⇒ Object
- .print_storage(db, name) ⇒ Object
- .write_back(copy, entity) ⇒ Object
Instance Method Summary collapse
- #_array ⇒ Object
- #each(&b) ⇒ Object
-
#initialize(entity_id) ⇒ BackReferences
constructor
A new instance of BackReferences.
- #size ⇒ Object
Constructor Details
#initialize(entity_id) ⇒ BackReferences
Returns a new instance of BackReferences.
2 3 4 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 2 def initialize entity_id @entity_id, @array = entity_id, [] end |
Class Method Details
.delete(e, storage) ⇒ Object
92 93 94 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 92 def delete e, storage storage[:back_references].filter(:entity_id => e.entity_id).delete end |
.delete_all_references_to(e, c, &callback) ⇒ Object
108 109 110 111 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 108 def delete_all_references_to e, c, &callback array = c.back_references._array.dup array.each{|entity_id| callback.call entity_id} end |
.delete_backreference(entity, reference, reference_copy) ⇒ Object
96 97 98 99 100 101 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 96 def delete_backreference entity, reference, reference_copy br = reference_copy.back_references index = br._array.index entity.entity_id index.should! :>=, 0 br._array.delete_at index end |
.initialize_copy(e, c) ⇒ Object
68 69 70 71 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 68 def initialize_copy e, c c.back_references = BackReferences.new e.entity_id c.back_references._array.replace e.back_references._array end |
.initialize_entity(e) ⇒ Object
73 74 75 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 73 def initialize_entity e e.instance_variable_set "@back_references", BackReferences.new(e.entity_id) end |
.initialize_storage(db) ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 33 def initialize_storage db db.create_table :back_references do column :entity_id, :text column :referrer_id, :text # index :entity_id end end |
.load(e, storage) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 48 def load e, storage rows = storage[:back_references].filter :entity_id => e.entity_id br = if rows.count > 0 br = BackReferences.new e.entity_id rows.each do |row| br._array << EntityType.load_id(row[:referrer_id]) end br else BackReferences.new e.entity_id end # p [e, br._array] e.instance_variable_set "@back_references", br end |
.new_backreference(entity, reference, reference_copy) ⇒ Object
103 104 105 106 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 103 def new_backreference entity, reference, reference_copy br = reference_copy.back_references br._array << entity.entity_id end |
.persist(c, entity_id, storage) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 77 def persist c, entity_id, storage # TODO reimplement more efficiently br = c.back_references storage[:back_references].filter(:entity_id => entity_id).delete if br._array.size > 0 br._array.each do |ref_id| ref_id.should_not! :be_nil storage[:back_references].insert( :entity_id => entity_id, :referrer_id => EntityType.dump_id(ref_id) ) end end end |
.print_storage(db, name) ⇒ Object
42 43 44 45 46 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 42 def print_storage db, name return unless name == nil or name == :back_references puts "\nBackReferences:" db[:back_references].print end |
.write_back(copy, entity) ⇒ Object
64 65 66 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 64 def write_back copy, entity entity.back_references._array.replace copy.back_references._array # TODO reimplement more efficiently end |
Instance Method Details
#_array ⇒ Object
28 29 30 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 28 def _array @array end |
#each(&b) ⇒ Object
6 7 8 9 10 11 12 13 14 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 6 def each &b tr = Thread.current[:om_transaction] if tr and tr.changed? @entity_id br = tr.copies[@entity_id].back_references br._array.each{|entity_id| b.call tr.resolve(entity_id)} else self._array.each{|entity_id| b.call @om_repository.by_id(entity_id)} end end |
#size ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/ObjectModel/AnEntity/BackReferences.rb', line 16 def size if tr = Thread.current[:om_transaction] if tr.changed? @entity_id tr.copies[@entity_id].back_references._array.size else @array.size end else @array.size end end |