class ActiveFedora::Associations::Builder::HasMany

:nodoc:

def self.define_readers(mixin, name)

def self.define_readers(mixin, name)
  super
  mixin.redefine_method("#{name.to_s.singularize}_ids") do
    association(name).ids_reader
  end
end

def self.define_writers(mixin, name)

def self.define_writers(mixin, name)
  super
  mixin.redefine_method("#{name.to_s.singularize}_ids=") do |ids|
    association(name).ids_writer(ids)
  end
end

def build

def build
  reflection = super
  configure_dependency
  reflection
end

def configure_dependency

def configure_dependency
  if options[:dependent]
    unless [:destroy, :delete_all, :nullify, :restrict].include?(options[:dependent])
      raise ArgumentError, "The :dependent option expects either :destroy, :delete_all, " \
                           ":nullify or :restrict (#{options[:dependent].inspect})"
    end
    send("define_#{options[:dependent]}_dependency_method")
    model.before_destroy dependency_method_name
  end
end

def define_delete_all_dependency_method

def define_delete_all_dependency_method
  name = self.name
  model.send(:define_method, dependency_method_name) do
    send(name).delete_all
  end
end

def define_destroy_dependency_method

def define_destroy_dependency_method
  name = self.name
  model.send(:define_method, dependency_method_name) do
    send(name).delete_all
  end
end

def define_restrict_dependency_method

def define_restrict_dependency_method
  name = self.name
  model.send(:define_method, dependency_method_name) do
    raise ActiveRecord::DeleteRestrictionError.new(name) unless send(name).empty?
  end
end

def dependency_method_name

def dependency_method_name
  "has_many_dependent_for_#{name}"
end