Class: Lafcadio::ObjectStore::Cache
- Inherits:
-
Object
- Object
- Lafcadio::ObjectStore::Cache
show all
- Includes:
- MonitorMixin
- Defined in:
- lib/lafcadio/objectStore.rb
Overview
Defined Under Namespace
Classes: DomainClassCache
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(db_bridge = DbBridge.new) ⇒ Cache
Returns a new instance of Cache.
287
288
289
290
291
|
# File 'lib/lafcadio/objectStore.rb', line 287
def initialize( db_bridge = DbBridge.new )
super()
@db_bridge = db_bridge
@domain_class_caches = {}
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args) ⇒ Object
348
349
350
351
352
353
354
355
356
357
358
359
360
361
|
# File 'lib/lafcadio/objectStore.rb', line 348
def method_missing( meth, *args )
simple_dispatch = [
:flush, :queries, :save, :set_commit_time, :update_after_commit
]
if simple_dispatch.include?( meth )
cache( args.first.domain_class ).send( meth, *args )
elsif [ :[], :last_commit_time ].include?( meth )
cache( args.first ).send( meth, *args[1..-1] )
elsif [ :group_query, :rollback, :transaction ].include?( meth )
@db_bridge.send( meth, *args )
else
super
end
end
|
Instance Attribute Details
#db_bridge ⇒ Object
Returns the value of attribute db_bridge.
284
285
286
|
# File 'lib/lafcadio/objectStore.rb', line 284
def db_bridge
@db_bridge
end
|
#domain_class_caches ⇒ Object
Returns the value of attribute domain_class_caches.
285
286
287
|
# File 'lib/lafcadio/objectStore.rb', line 285
def domain_class_caches
@domain_class_caches
end
|
Instance Method Details
#cache(domain_class) ⇒ Object
310
311
312
313
314
315
316
317
|
# File 'lib/lafcadio/objectStore.rb', line 310
def cache( domain_class )
unless @domain_class_caches[domain_class]
@domain_class_caches[domain_class] = DomainClassCache.new(
domain_class, @db_bridge
)
end
@domain_class_caches[domain_class]
end
|
#commit(db_object) ⇒ Object
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
|
# File 'lib/lafcadio/objectStore.rb', line 293
def commit( db_object )
db_object.verify if LafcadioConfig.new()['checkFields'] == 'onCommit'
db_object.last_commit_type = get_last_commit db_object
db_object.pre_commit_trigger
update_dependent_domain_objects( db_object ) if db_object.delete
synchronize do
@db_bridge.commit db_object
unless db_object.pk_id
db_object.pk_id = @db_bridge.last_pk_id_inserted
end
end
update_after_commit db_object
db_object.post_commit_trigger
db_object.reset_original_values_hash
db_object
end
|
#get_by_query(query) ⇒ Object
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
|
# File 'lib/lafcadio/objectStore.rb', line 319
def get_by_query( query )
main_cache = cache query.domain_class
unless main_cache.queries[query]
if query.one_pk_id?
collected = false
else
collected = main_cache.collect_from_superset query
end
if !collected and main_cache.queries.values
newObjects = @db_bridge.select_dobjs query
newObjects.each { |dbObj| main_cache.save dbObj }
main_cache.queries[query] = newObjects.collect { |dobj|
dobj.pk_id
}
end
end
main_cache.queries[query].map { |pk_id| main_cache[pk_id] }.compact
end
|
#get_last_commit(db_object) ⇒ Object
338
339
340
341
342
343
344
345
346
|
# File 'lib/lafcadio/objectStore.rb', line 338
def get_last_commit( db_object )
if db_object.delete
:delete
elsif db_object.pk_id
:update
else
:insert
end
end
|
#transactional_clone ⇒ Object
363
364
365
366
367
368
369
370
371
|
# File 'lib/lafcadio/objectStore.rb', line 363
def transactional_clone
tc = Cache.new @db_bridge.transactional_clone
dcc_clones = {}
@domain_class_caches.each do |domain_class, dcc|
dcc_clones[domain_class] = dcc.transactional_clone
end
tc.domain_class_caches = dcc_clones
tc
end
|
#update_dependent_domain_class(db_object, aClass, field) ⇒ Object
373
374
375
376
377
378
379
380
381
382
383
384
|
# File 'lib/lafcadio/objectStore.rb', line 373
def update_dependent_domain_class( db_object, aClass, field )
object_store = ObjectStore.get_object_store
collection = aClass.get( db_object, field.name )
collection.each { |dependentObject|
if field.delete_cascade
dependentObject.delete = true
else
dependentObject.send( field.name + '=', nil )
end
object_store.commit dependentObject
}
end
|
#update_dependent_domain_objects(db_object) ⇒ Object
386
387
388
389
390
391
392
393
|
# File 'lib/lafcadio/objectStore.rb', line 386
def update_dependent_domain_objects( db_object )
dependent_classes = db_object.domain_class.dependent_classes
dependent_classes.keys.each { |aClass|
update_dependent_domain_class(
db_object, aClass, dependent_classes[aClass]
)
}
end
|