sdb_dal 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,19 +15,24 @@ module SdbDal
15
15
  def initialize(options={})
16
16
  @attribute_values=HashWithIndifferentAccess.new
17
17
 
18
+ copy_attributes(options)
19
+
20
+ @accessor_cache={}
21
+
22
+ end
23
+
24
+ def copy_attributes(hash)
18
25
  self.class.attribute_descriptions.each do |attribute_name,description|
19
- value=options[attribute_name]
20
- value=value || options[attribute_name.intern]
26
+ value=hash[attribute_name]
27
+ value=value || hash[attribute_name.intern]
21
28
  if !description.is_collection && value.respond_to?(:flatten) && value.length==1
22
29
  value=value[0]
23
30
  end
24
31
  @attribute_values[attribute_name]=value
25
-
32
+
26
33
  end
27
- @accessor_cache={}
28
- @repository=options[:repository]
29
- end
30
34
 
35
+ end
31
36
 
32
37
  def self.primary_key_attribute_names
33
38
  return @primary_key_attribute_names
@@ -250,16 +255,44 @@ module SdbDal
250
255
  end
251
256
 
252
257
  def self.belongs_to(domain_class,foreign_key_attribute=nil,accesser_attribute_name=nil,options={})
253
-
258
+
259
+
260
+
261
+
254
262
  foreign_key_attribute ||= "#{domain_class.to_s.downcase}_id".to_sym
255
263
  accesser_attribute_name ||=domain_class.to_s.downcase
264
+ if foreign_key_attribute==:without_prefix
265
+
266
+ class_eval <<-GETTERDONE
267
+ def #{accesser_attribute_name}
268
+ #{module_name+domain_class.to_s}.find(@attribute_values)
269
+ end
270
+ GETTERDONE
271
+
256
272
 
273
+ elsif foreign_key_attribute==:with_prefix
274
+
257
275
  class_eval <<-GETTERDONE
258
276
  def #{accesser_attribute_name}
259
- #{module_name+domain_class.to_s}.find(self.#{foreign_key_attribute})
277
+ mapped_values={}
278
+ prefix='#{domain_class.to_s.downcase}_'
279
+ @attribute_values.each{|key,value|
280
+ if key.index(prefix)==0
281
+ mapped_values[key.splice(prefix.length)]=value
282
+ end
283
+ #{module_name+domain_class.to_s}.find(mapped_values)
284
+ end
285
+ GETTERDONE
286
+
287
+ else
288
+ class_eval <<-GETTERDONE
289
+ def #{accesser_attribute_name}
290
+ mapped_values={}
291
+ #{module_name+domain_class.to_s}.find(self.#{foreign_key_attribute})
260
292
  end
261
-
262
293
  GETTERDONE
294
+
295
+ end
263
296
  end
264
297
  def self.many_to_many(domain_class,
265
298
  through_class,
@@ -374,6 +407,10 @@ module SdbDal
374
407
  reflecting_key_attributes=nil,
375
408
  accesser_attribute_name=nil,
376
409
  options={})
410
+ if reflecting_key_attributes==:without_prefix
411
+ reflecting_key_attributes = primary_key_attribute_names.map{|x|x.to_s}
412
+
413
+ end
377
414
  reflecting_key_attributes ||= primary_key_attribute_names.map{|x|self.name.downcase+"_"+x.to_s}
378
415
  reflecting_key_attributes =arrayify(reflecting_key_attributes)
379
416
  reflecting_array_code="[:"+reflecting_key_attributes.join(",:")+"]"
@@ -386,7 +423,8 @@ module SdbDal
386
423
  if options[:order]
387
424
  order<<",:order=>:#{options[:order]}"
388
425
  end
389
-
426
+
427
+
390
428
  if options[:dependent]
391
429
 
392
430
  class_eval <<-XXDONE
@@ -394,6 +432,14 @@ module SdbDal
394
432
  on_destroy_blocks<<"#{accesser_attribute_name}.each{|item|item.destroy}"
395
433
  XXDONE
396
434
  end
435
+ class_eval <<-XXDONE
436
+ def create_child_#{domain_class.to_s.downcase}(options=nil)
437
+
438
+ result=#{module_name+domain_class.to_s}.new(options)
439
+ result.copy_attributes(self.primary_key_hash)
440
+ result
441
+ end
442
+ XXDONE
397
443
  # if options[:tracking]
398
444
  # #add add_xxx method
399
445
  # #add to list of tracker attributes
@@ -438,6 +484,14 @@ module SdbDal
438
484
  end
439
485
  return result[0] if result.length==1
440
486
  return result
487
+ end
488
+ def primary_key_hash
489
+
490
+ result={}
491
+ self.class.primary_key_attribute_names.each do |key_part|
492
+ result[key_part]=@attribute_values[key_part ]
493
+ end
494
+ return result
441
495
  end
442
496
  def primary_key=(value)
443
497
  key=DomainObject::arrayify(value)
@@ -672,6 +726,13 @@ module SdbDal
672
726
  end
673
727
  def find_single(id, options)
674
728
  return nil if id==nil
729
+ if id.is_a?(Hash)
730
+ id_as_array=[]
731
+ @primary_key_attribute_names.each do |key_name|
732
+ id_as_array << id[key_name]
733
+ end
734
+ id=id_as_array
735
+ end
675
736
  id=arrayify(id)
676
737
  attributes=self.repository(options).find_one(self.table_name,id,attribute_descriptions)
677
738
  if attributes && attributes.length>0
@@ -395,6 +395,7 @@ module SdbDal
395
395
  parsed_attributes
396
396
  end
397
397
  def destroy(table_name, primary_key)
398
+ @session_cache.destroy(table_name,primary_key)
398
399
  @sdb.delete_attributes(make_domain_name(table_name),make_cache_key(table_name, primary_key) )
399
400
  # if @use_cache
400
401
  # @storage.delete(@clob_bucket,make_cache_key(table_name,primary_key))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sdb_dal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Knight