class ActiveType::NestedAttributes::Builder

Public Class Methods

new(owner, mod) click to toggle source
# File lib/active_type/nested_attributes/builder.rb, line 10
def initialize(owner, mod)
  @owner = owner
  @module = mod
end

Public Instance Methods

build(name, one_or_many, options) click to toggle source
# File lib/active_type/nested_attributes/builder.rb, line 15
def build(name, one_or_many, options)
  add_attribute(name, options.slice(:default))
  association = build_association(name, one_or_many == :one, options.except(:default))
  add_writer_method(name, association)
  add_autosave(name, association)
  add_validation(name, association)
end

Private Instance Methods

add_attribute(name, options) click to toggle source
# File lib/active_type/nested_attributes/builder.rb, line 30
def add_attribute(name, options)
  @owner.attribute(name, :object, options)
end
add_autosave(name, association) click to toggle source
# File lib/active_type/nested_attributes/builder.rb, line 43
def add_autosave(name, association)
  save_method = :"save_associated_records_for_#{name}"
  @module.module_eval do
    define_method save_method do
      association.save(self)
    end
  end
  @owner.after_save save_method
end
add_validation(name, association) click to toggle source
# File lib/active_type/nested_attributes/builder.rb, line 53
def add_validation(name, association)
  validate_method = :"validate_associated_records_for_#{name}"
  @module.module_eval do
    define_method validate_method do
      association.validate(self)
    end
  end
  @owner.validate validate_method
end
add_writer_method(name, association) click to toggle source
# File lib/active_type/nested_attributes/builder.rb, line 34
def add_writer_method(name, association)
  write_method = "#{name}_attributes="
  @module.module_eval do
    define_method write_method do |attributes|
      association.assign_attributes(self, attributes)
    end
  end
end
build_association(name, singular, options) click to toggle source
# File lib/active_type/nested_attributes/builder.rb, line 26
def build_association(name, singular, options)
  (singular ? NestsOneAssociation : NestsManyAssociation).new(@owner, name, options)
end