class ActiveShepherd::Traversal
Attributes
associations[R]
attributes[R]
visitor[R]
Public Class Methods
new(visitor, params = {})
click to toggle source
# File lib/active_shepherd/traversal.rb, line 4 def initialize(visitor, params = {}) @associations = params[:associations] @attributes = params[:attributes] @visitor = visitor end
Public Instance Methods
traverse()
click to toggle source
# File lib/active_shepherd/traversal.rb, line 10 def traverse attributes.each do |attribute_name, object| visit :handle_attribute, attribute_name, object end associations.each do |name, (reflection, object)| if reflection.macro == :has_many visit :handle_has_many_association, reflection, object elsif reflection.macro == :has_one visit :handle_has_one_association, reflection, object end end end
visit(method_name, arg1, arg2)
click to toggle source
# File lib/active_shepherd/traversal.rb, line 24 def visit(method_name, arg1, arg2) if visitor.respond_to? method_name if visitor.method(method_name).arity == 2 visitor.public_send method_name, arg1, arg2 else visitor.public_send method_name, arg1, *Array.wrap(arg2) end end end