lib/sequel/plugins/pg_array_associations.rb in sequel-5.45.0 vs lib/sequel/plugins/pg_array_associations.rb in sequel-5.46.0

- old
+ new

@@ -382,30 +382,36 @@ return if opts[:read_only] save_opts = {:validate=>opts[:validate]} save_opts[:raise_on_failure] = opts[:raise_on_save_failure] != false - opts[:adder] ||= proc do |o| - if array = o.get_column_value(key) - array << get_column_value(pk) - else - o.set_column_value("#{key}=", Sequel.pg_array([get_column_value(pk)], opts.array_type)) + unless opts.has_key?(:adder) + opts[:adder] = proc do |o| + if array = o.get_column_value(key) + array << get_column_value(pk) + else + o.set_column_value("#{key}=", Sequel.pg_array([get_column_value(pk)], opts.array_type)) + end + o.save(save_opts) end - o.save(save_opts) end - - opts[:remover] ||= proc do |o| - if (array = o.get_column_value(key)) && !array.empty? - array.delete(get_column_value(pk)) - o.save(save_opts) + + unless opts.has_key?(:remover) + opts[:remover] = proc do |o| + if (array = o.get_column_value(key)) && !array.empty? + array.delete(get_column_value(pk)) + o.save(save_opts) + end end end - opts[:clearer] ||= proc do - pk_value = get_column_value(pk) - db_type = opts.array_type - opts.associated_dataset.where(Sequel.pg_array_op(key).contains(Sequel.pg_array([pk_value], db_type))).update(key=>Sequel.function(:array_remove, key, Sequel.cast(pk_value, db_type))) + unless opts.has_key?(:clearer) + opts[:clearer] = proc do + pk_value = get_column_value(pk) + db_type = opts.array_type + opts.associated_dataset.where(Sequel.pg_array_op(key).contains(Sequel.pg_array([pk_value], db_type))).update(key=>Sequel.function(:array_remove, key, Sequel.cast(pk_value, db_type))) + end end end # Setup the pg_array_to_many-specific datasets, eager loaders, and modification methods. def def_pg_array_to_many(opts) @@ -484,33 +490,39 @@ save_after_modify = proc do |obj| obj.save(save_opts) end end - opts[:adder] ||= proc do |o| - opk = o.get_column_value(opts.primary_key) - if array = get_column_value(key) - modified!(key) - array << opk - else - set_column_value("#{key}=", Sequel.pg_array([opk], opts.array_type)) + unless opts.has_key?(:adder) + opts[:adder] = proc do |o| + opk = o.get_column_value(opts.primary_key) + if array = get_column_value(key) + modified!(key) + array << opk + else + set_column_value("#{key}=", Sequel.pg_array([opk], opts.array_type)) + end + save_after_modify.call(self) if save_after_modify end - save_after_modify.call(self) if save_after_modify end - - opts[:remover] ||= proc do |o| - if (array = get_column_value(key)) && !array.empty? - modified!(key) - array.delete(o.get_column_value(opts.primary_key)) - save_after_modify.call(self) if save_after_modify + + unless opts.has_key?(:remover) + opts[:remover] = proc do |o| + if (array = get_column_value(key)) && !array.empty? + modified!(key) + array.delete(o.get_column_value(opts.primary_key)) + save_after_modify.call(self) if save_after_modify + end end end - opts[:clearer] ||= proc do - if (array = get_column_value(key)) && !array.empty? - modified!(key) - array.clear - save_after_modify.call(self) if save_after_modify + unless opts.has_key?(:clearer) + opts[:clearer] = proc do + if (array = get_column_value(key)) && !array.empty? + modified!(key) + array.clear + save_after_modify.call(self) if save_after_modify + end end end end end