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