module Sabrina::ChildrenManager::AttrChildren
Adds a macro for attribute with children update.
Private Instance Methods
attr_children(*args)
click to toggle source
Takes any number of symbols and creates accessors that will also pass the value down to each value in children
.
# File lib/sabrina/children_manager.rb, line 29 def attr_children(*args) attr_reader(*args) attr_writer_children(*args) end
attr_writer_children(*args)
click to toggle source
Takes any number of symbols and creates writers that will also pass the value down to each value in children
.
# File lib/sabrina/children_manager.rb, line 16 def attr_writer_children(*args) args.each do |x| x_var = "@#{x}".to_sym x_setter = "#{x}=".to_sym lamb = generate_writer_children(x_setter, x_var) define_method(x_setter, lamb) unless respond_to?(x_setter) end end
generate_writer_children(name, variable)
click to toggle source
# File lib/sabrina/children_manager.rb, line 34 def generate_writer_children(name, variable) lambda do |value| children.each do |c| next c.method(name).call(value) if c.respond_to?(name) fail "Child #{c} has no method #{name}, yet attr_children called." end instance_variable_set(variable, value) end end