Class: Lafcadio::ObjectStore::Cache::DomainClassCache

Inherits:
Hash
  • Object
show all
Defined in:
lib/lafcadio/objectStore.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(domain_class, db_bridge) ⇒ DomainClassCache

Returns a new instance of DomainClassCache.



399
400
401
402
403
404
# File 'lib/lafcadio/objectStore.rb', line 399

def initialize( domain_class, db_bridge )
  super()
  @domain_class, @db_bridge = domain_class, db_bridge
  @commit_times = {}
  @queries = {}
end

Instance Attribute Details

#commit_timesObject

Returns the value of attribute commit_times.



397
398
399
# File 'lib/lafcadio/objectStore.rb', line 397

def commit_times
  @commit_times
end

#domain_classObject (readonly)

Returns the value of attribute domain_class.



396
397
398
# File 'lib/lafcadio/objectStore.rb', line 396

def domain_class
  @domain_class
end

#queriesObject

Returns the value of attribute queries.



397
398
399
# File 'lib/lafcadio/objectStore.rb', line 397

def queries
  @queries
end

Instance Method Details

#[](pk_id) ⇒ Object



406
407
408
409
# File 'lib/lafcadio/objectStore.rb', line 406

def []( pk_id )
  dobj = super
  dobj ? dobj.clone : nil
end

#collect_from_superset(query) ⇒ Object



411
412
413
414
415
416
417
418
419
420
421
422
# File 'lib/lafcadio/objectStore.rb', line 411

def collect_from_superset( query )
  if ( pk_ids = find_superset_pk_ids( query ) )
    db_objects = ( pk_ids.collect { |pk_id|
      self[ pk_id ]
    } ).select { |dobj| query.dobj_satisfies?( dobj ) }
    db_objects = query.order_and_limit_collection db_objects
    queries[query] = db_objects.collect { |dobj| dobj.pk_id }
    true
  else
    false
  end
end

#find_superset_pk_ids(query) ⇒ Object



424
425
426
427
428
429
430
# File 'lib/lafcadio/objectStore.rb', line 424

def find_superset_pk_ids( query )
  superset_query, pk_ids =
    queries.find { |other_query, pk_ids|
      query.implies?( other_query )
    }
  pk_ids
end

#flush(db_object) ⇒ Object

Flushes a domain object.



433
434
435
436
# File 'lib/lafcadio/objectStore.rb', line 433

def flush( db_object )
  delete db_object.pk_id
  flush_queries
end

#flush_queriesObject



438
439
440
441
442
# File 'lib/lafcadio/objectStore.rb', line 438

def flush_queries
  queries.keys.each do |query|
    queries.delete( query ) if query.domain_class == domain_class
  end
end

#last_commit_time(pk_id) ⇒ Object



444
# File 'lib/lafcadio/objectStore.rb', line 444

def last_commit_time( pk_id ); commit_times[pk_id]; end

#save(db_object) ⇒ Object

Saves a domain object.



447
448
449
450
# File 'lib/lafcadio/objectStore.rb', line 447

def save(db_object)
  self[db_object.pk_id] = db_object
  flush_queries
end

#set_commit_time(d_obj) ⇒ Object



452
# File 'lib/lafcadio/objectStore.rb', line 452

def set_commit_time( d_obj ); commit_times[d_obj.pk_id] = Time.now; end

#transactional_cloneObject



454
455
456
457
458
459
# File 'lib/lafcadio/objectStore.rb', line 454

def transactional_clone
  tc = clone
  tc.commit_times = commit_times.clone
  tc.queries = queries.clone
  tc
end

#update_after_commit(db_object) ⇒ Object

:nodoc:



461
462
463
464
465
466
467
468
469
470
# File 'lib/lafcadio/objectStore.rb', line 461

def update_after_commit( db_object ) #:nodoc:
  if [ :update, :insert ].include?(
    db_object.last_commit_type
  )
    save db_object
  elsif db_object.last_commit_type == :delete
    flush db_object
  end
  set_commit_time db_object
end