module Sequel::Plugins::AssociationMultiAddRemove::ClassMethods
Private Instance Methods
def_association_instance_methods(opts)
click to toggle source
Define the methods use to add/remove/set multiple associated objects in a single method call.
Calls superclass method
# File lib/sequel/plugins/association_multi_add_remove.rb 46 def def_association_instance_methods(opts) 47 super 48 49 if opts[:adder] 50 add_method = opts[:add_method] 51 multi_add_method = opts[:multi_add_method] || :"add_#{opts[:name]}" 52 multi_add_method = nil if add_method == multi_add_method 53 if multi_add_method 54 association_module_def(multi_add_method, opts) do |objs, *args| 55 db.transaction(:server=>@server){objs.map{|obj| send(add_method, obj, *args)}.compact} 56 end 57 end 58 end 59 60 if opts[:remover] 61 remove_method = opts[:remove_method] 62 multi_remove_method = opts[:multi_remove_method] || :"remove_#{opts[:name]}" 63 multi_remove_method = nil if remove_method == multi_remove_method 64 if multi_remove_method 65 association_module_def(multi_remove_method, opts) do |objs, *args| 66 db.transaction(:server=>@server){objs.map{|obj| send(remove_method, obj, *args)}.compact} 67 end 68 end 69 end 70 71 if multi_add_method && multi_remove_method 72 association_module_def(:"#{opts[:name]}=", opts) do |objs, *args| 73 db.transaction(:server=>@server) do 74 existing_objs = send(opts.association_method) 75 send(multi_remove_method, (existing_objs - objs), *args) 76 send(multi_add_method, (objs - existing_objs), *args) 77 nil 78 end 79 end 80 end 81 end