@@ -458,52 +458,49 @@ def inc(hash_key_value, range_key_value = nil, counters)
458458
459459 # Delete a model.
460460 #
461- # Delete a model by given partition key:
461+ # Raises +Dynamoid::Errors::MissingHashKey+ if a partition key has value
462+ # +nil+ and raises +Dynamoid::Errors::MissingRangeKey+ if a sort key is
463+ # required but has value +nil+ or is missing.
462464 #
463- # User.delete(user_id)
465+ # @param ids [String|Array] primary key or an array of primary keys
466+ # @return nil
464467 #
465- # Delete a model by given partition and sort keys:
468+ # @example Delete a model by given partition key:
469+ # User.delete(user_id)
466470 #
471+ # @example Delete a model by given partition and sort keys:
467472 # User.delete(user_id, sort_key)
468473 #
469- # Delete multiple models by given partition keys:
470- #
474+ # @example Delete multiple models by given partition keys:
471475 # User.delete([id1, id2, id3])
472476 #
473- # Delete multiple models by given partition and sort keys:
474- #
477+ # @example Delete multiple models by given partition and sort keys:
475478 # User.delete([[id1, sk1], [id2, sk2], [id3, sk3]])
476- #
477- # Raises +Dynamoid::Errors::MissingHashKey+ if a partition key has value
478- # +nil+ and raises +Dynamoid::Errors::MissingRangeKey+ if a sort key is
479- # required but has value +nil+ or is missing.
480- #
481- # @return nil
482- def delete ( *args )
483- if args . empty?
479+
480+ def delete ( *ids )
481+ if ids . empty?
484482 raise Dynamoid ::Errors ::MissingHashKey
485483 end
486484
487- # TODO: warn if passed excessive arguments
488- # TODO: handle a case when sort key isn't declared but given in arguments
489- if args [ 0 ] . is_a? ( Array )
490- # given multiple keys:
491- keys = args [ 0 ] # ignore other arguments
485+ if ids [ 0 ] . is_a? ( Array )
486+ # given multiple keys
487+ # Model.delete([id1, id2, id3])
488+ keys = ids [ 0 ] # ignore other arguments
492489
493-
494- if keys [ 0 ] . is_a? ( Array )
490+ if self . range_key
495491 # compound primary key
492+ # expect [hash key, range key] pairs
496493
497494 ids = [ ]
498495 range_key = [ ]
499496
500497 # assume all elements are pairs, that's arrays
501498 keys . each do |pk , sk |
502499 raise Dynamoid ::Errors ::MissingHashKey if pk . nil?
503- raise Dynamoid ::Errors ::MissingRangeKey if self . range_key? && sk . nil?
500+ raise Dynamoid ::Errors ::MissingRangeKey if self . range_key && sk . nil?
504501
505- partition_key_dumped = Dumping . dump_field ( pk , self . attributes [ self . hash_key ] )
506- sort_key_dumped = Dumping . dump_field ( sk , self . attributes [ self . range_key ] )
502+ partition_key_dumped = cast_and_dump ( self . hash_key , pk )
503+ sort_key_dumped = cast_and_dump ( self . range_key , sk )
507504
508505 ids << partition_key_dumped
509506 range_key << sort_key_dumped
@@ -517,22 +514,25 @@ def delete(*args)
517514 keys . each do |pk |
518515 raise Dynamoid ::Errors ::MissingHashKey if pk . nil?
519516
520- partition_key_dumped = Dumping . dump_field ( pk , self . attributes [ self . hash_key ] )
517+ partition_key_dumped = cast_and_dump ( self . hash_key , pk )
521518 ids << partition_key_dumped
522519 end
523520 end
524521
525522 options = range_key ? { range_key : range_key } : { }
526523 Dynamoid . adapter . delete ( self . table_name , ids , options )
527524 else
528- # Model.delete(partition_key, sort_key)
529- partition_key , sort_key = args
525+ # given single primary key:
526+ # Model.delete(partition_key)
527+ # Model.delete(partition_key, sort_key)
528+
529+ partition_key , sort_key = ids
530530
531531 raise Dynamoid ::Errors ::MissingHashKey if partition_key . nil?
532532 raise Dynamoid ::Errors ::MissingRangeKey if self . range_key? && sort_key . nil?
533533
534- options = sort_key ? { range_key : Dumping . dump_field ( sort_key , self . attributes [ self . range_key ] ) } : { }
535- partition_key_dumped = Dumping . dump_field ( partition_key , self . attributes [ self . hash_key ] )
534+ options = sort_key ? { range_key : cast_and_dump ( self . range_key , sort_key ) } : { }
535+ partition_key_dumped = cast_and_dump ( self . hash_key , partition_key )
536536
537537 Dynamoid . adapter . delete ( self . table_name , partition_key_dumped , options )
538538 end
0 commit comments