Class: Lafcadio::ObjectStore::MockDbBridge
- Inherits:
-
Object
- Object
- Lafcadio::ObjectStore::MockDbBridge
- Defined in:
- lib/lafcadio/mock.rb
Overview
:nodoc:
Defined Under Namespace
Classes: Transaction
Instance Attribute Summary collapse
-
#last_pk_id_inserted ⇒ Object
readonly
Returns the value of attribute last_pk_id_inserted.
-
#next_pk_ids ⇒ Object
Returns the value of attribute next_pk_ids.
-
#objects ⇒ Object
Returns the value of attribute objects.
-
#queries(domain_class = nil) ⇒ Object
Returns the value of attribute queries.
Instance Method Summary collapse
- #all(domain_class) ⇒ Object
- #commit(db_object) ⇒ Object
- #group_query(query) ⇒ Object
-
#initialize ⇒ MockDbBridge
constructor
A new instance of MockDbBridge.
- #next_pk_id(domain_class) ⇒ Object
- #objects_by_domain_class(domain_class) ⇒ Object
- #pre_commit_pk_id(domain_object) ⇒ Object
- #query_count(sql) ⇒ Object
- #rollback ⇒ Object
- #select_dobjs(query) ⇒ Object
- #set_next_pk_id(domain_class, npi) ⇒ Object
- #transaction(action) ⇒ Object
- #transactional_clone ⇒ Object
Constructor Details
#initialize ⇒ MockDbBridge
Returns a new instance of MockDbBridge.
10 11 12 13 14 15 |
# File 'lib/lafcadio/mock.rb', line 10 def initialize @objects = {} @next_pk_ids = {} @queries = [] @transaction = nil end |
Instance Attribute Details
#last_pk_id_inserted ⇒ Object (readonly)
Returns the value of attribute last_pk_id_inserted.
7 8 9 |
# File 'lib/lafcadio/mock.rb', line 7 def last_pk_id_inserted @last_pk_id_inserted end |
#next_pk_ids ⇒ Object
Returns the value of attribute next_pk_ids.
8 9 10 |
# File 'lib/lafcadio/mock.rb', line 8 def next_pk_ids @next_pk_ids end |
#objects ⇒ Object
Returns the value of attribute objects.
8 9 10 |
# File 'lib/lafcadio/mock.rb', line 8 def objects @objects end |
#queries(domain_class = nil) ⇒ Object
Returns the value of attribute queries.
8 9 10 |
# File 'lib/lafcadio/mock.rb', line 8 def queries @queries end |
Instance Method Details
#all(domain_class) ⇒ Object
17 18 19 |
# File 'lib/lafcadio/mock.rb', line 17 def all( domain_class ) @objects[domain_class] ? @objects[domain_class].values : [] end |
#commit(db_object) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/lafcadio/mock.rb', line 21 def commit(db_object) if db_object.pk_id and !db_object.pk_id.is_a?( Integer ) raise ArgumentError end if @transaction @transaction << db_object else objects_by_domain_class = objects_by_domain_class( db_object.domain_class ) if db_object.delete objects_by_domain_class.delete( db_object.pk_id ) else object_pk_id = pre_commit_pk_id( db_object ) objects_by_domain_class[object_pk_id] = db_object end end end |
#group_query(query) ⇒ Object
40 41 42 |
# File 'lib/lafcadio/mock.rb', line 40 def group_query( query ) query.collect objects_by_domain_class( query.domain_class ).values end |
#next_pk_id(domain_class) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/lafcadio/mock.rb', line 44 def next_pk_id( domain_class ) dobjs = objects_by_domain_class( domain_class ).values dobjs.inject( 0 ) { |memo, obj| memo > obj.pk_id ? memo : obj.pk_id } + 1 end |
#objects_by_domain_class(domain_class) ⇒ Object
51 52 53 54 |
# File 'lib/lafcadio/mock.rb', line 51 def objects_by_domain_class( domain_class ) @objects[domain_class] = {} unless @objects[domain_class] @objects[domain_class] end |
#pre_commit_pk_id(domain_object) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/lafcadio/mock.rb', line 56 def pre_commit_pk_id( domain_object ) @next_pk_ids = {} unless @next_pk_ids if (next_pk_id = @next_pk_ids[domain_object.domain_class]) @next_pk_ids[domain_object.domain_class] = nil @last_pk_id_inserted = next_pk_id elsif domain_object.pk_id domain_object.pk_id else pk_ids = objects_by_domain_class( domain_object.domain_class ).keys @last_pk_id_inserted = pk_ids.max ? pk_ids.max + 1 : 1 end end |
#query_count(sql) ⇒ Object
75 76 77 |
# File 'lib/lafcadio/mock.rb', line 75 def query_count( sql ) @queries.select { |qry| qry.to_sql == sql }.size end |
#rollback ⇒ Object
79 |
# File 'lib/lafcadio/mock.rb', line 79 def rollback; end |
#select_dobjs(query) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/lafcadio/mock.rb', line 81 def select_dobjs( query ) @queries << query domain_class = query.domain_class all = all domain_class if @transaction from_tr = @transaction.select { |dobj| dobj.domain_class == query.domain_class } all = all.concat from_tr end objects = all.select { |dobj| query.dobj_satisfies?( dobj ) } query.order_and_limit_collection objects end |
#set_next_pk_id(domain_class, npi) ⇒ Object
95 96 97 98 |
# File 'lib/lafcadio/mock.rb', line 95 def set_next_pk_id( domain_class, npi ) @next_pk_ids = {} unless @next_pk_ids @next_pk_ids[ domain_class ] = npi end |
#transaction(action) ⇒ Object
100 101 102 103 104 105 106 107 |
# File 'lib/lafcadio/mock.rb', line 100 def transaction( action ) tr = MockDbBridge::Transaction.new @transaction = tr action.call tr @transaction = nil tr.uniq! tr.each do |dobj_to_commit| commit( dobj_to_commit ); end end |
#transactional_clone ⇒ Object
109 110 111 112 113 114 115 |
# File 'lib/lafcadio/mock.rb', line 109 def transactional_clone tc = clone tc.objects = objects.clone tc.next_pk_ids = next_pk_ids.clone tc.queries = queries.clone tc end |