class ActiveRecord::Associations::Builder::SingularAssociation

:nodoc:
:nodoc:

def self.define_accessors(model, reflection)

def self.define_accessors(model, reflection)
  super
  mixin = model.generated_association_methods
  name = reflection.name
  define_constructors(mixin, name) unless reflection.polymorphic?
  mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
    def reload_#{name}
      association(:#{name}).force_reload_reader
    end
    def reset_#{name}
      association(:#{name}).reset
    end
  CODE
end

def self.define_constructors(mixin, name)

Defines the (build|create)_association methods for belongs_to or has_one association
def self.define_constructors(mixin, name)
  mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
    def build_#{name}(*args, &block)
      association(:#{name}).build(*args, &block)
    end
    def create_#{name}(*args, &block)
      association(:#{name}).create(*args, &block)
    end
    def create_#{name}!(*args, &block)
      association(:#{name}).create!(*args, &block)
    end
  CODE
end

def self.valid_options(options)

:nodoc:
:nodoc:
def self.valid_options(options)
  super + [:required, :touch]
end