Module: Praxis::Mapper::IdentityMapExtensions::Persistence
- Included in:
- Praxis::Mapper::IdentityMap
- Defined in:
- lib/praxis-mapper/identity_map_extensions/persistence.rb
Instance Method Summary collapse
-
#attach(record) ⇒ Object
attach record to the identity map.
- #deindex(record) ⇒ Object
- #detach(record) ⇒ Object
- #flush!(object = nil) ⇒ Object
- #reindex(record) ⇒ Object
- #remove(record) ⇒ Object
Instance Method Details
#attach(record) ⇒ Object
attach record to the identity map. save the record if, and only if, we need to
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/praxis-mapper/identity_map_extensions/persistence.rb', line 34 def attach(record) # save unless it has all identities populated unless record.identities.all? { |identity, value| value } record.save end # raise if still don't have full identities unless record.identities.all? { |identity, value| value } raise "can not attach #{record.inspect} without a full set of identities." end add_record(record) # TODO: what to do with related records? end |
#deindex(record) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/praxis-mapper/identity_map_extensions/persistence.rb', line 5 def deindex(record) model = record.class # delete from full set of rows rows_for(model).delete record # remove record from identity indexes @row_keys[model].each do |identity, index| index.delete_if {|k,v| v == record } end # remove any secondary indexes @secondary_indexes[model].each do |key, index| index.each do |index_key, indexed_values| indexed_values.delete record end end end |
#detach(record) ⇒ Object
75 76 77 78 |
# File 'lib/praxis-mapper/identity_map_extensions/persistence.rb', line 75 def detach(record) record.identity_map = nil deindex(record) end |
#flush!(object = nil) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/praxis-mapper/identity_map_extensions/persistence.rb', line 50 def flush!(object=nil) if object.nil? return @rows.keys.each { |klass| self.flush!(klass) } end case object when Class @rows[object].select(&:modified?).each do |record| record.save reindex(record) end when Sequel::Model if object.modified? object.save reindex(object) end end end |
#reindex(record) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/praxis-mapper/identity_map_extensions/persistence.rb', line 24 def reindex(record) # fully remove the record from any indexes it may be part of deindex(record) # hack to update any indexes as applicable add_record(record) end |
#remove(record) ⇒ Object
69 70 71 72 73 |
# File 'lib/praxis-mapper/identity_map_extensions/persistence.rb', line 69 def remove(record) detach(record) record.delete end |