def update(side, flds=nil)
      raise ArgumentError, 'The side to update must be :l or :r' unless [:l, :r].include?(side)
      target, source = (side==:l) ? [:l, :r] : [:r, :l]
      # use set field/s or update all
      flds ||= fields
      target_obj = self.send("#{target}_obj")
      source_obj = self.send("#{source}_obj")
      flds.each do |fld|
        target_name = fld.send("#{target}_name")
        source_name = fld.send("#{source}_name")
        # remember for log
        old_val = target_obj.send(target_name) rescue 'empty'
        # get new value through transfer method or direct
        new_val = if fld.transition?
                    cur_trans = fld.send("#{target}_trans")
                    eval "#{cur_trans} source_obj.send( source_name )"
                  else
                    source_obj.send( source_name )
                  end
        target_obj.send( "#{target_name}=" , new_val )

        log << "#{target_name} was: #{old_val} updated from: #{source_name} with value: #{new_val}"
      end
    end
def update(side, flds=nil)
      raise ArgumentError, 'The side to update must be :l or :r' unless [:l, :r].include?(side)
      target, source = (side==:l) ? [:l, :r] : [:r, :l]
      # use set field/s or update all
      flds ||= fields
      target_obj = self.send("#{target}_obj")
      source_obj = self.send("#{source}_obj")
      flds.each do |fld|
        target_name = fld.send("#{target}_name")
        source_name = fld.send("#{source}_name")
        # remember for log
        old_val = target_obj.send(target_name) rescue 'empty'
        # get new value through transfer method or direct
        new_val = if fld.transition?
                    cur_trans = fld.send("#{target}_trans")
                    eval "#{cur_trans} source_obj.send( source_name )"
                  else
                    source_obj.send( source_name )
                  end
        target_obj.send( "#{target_name}=" , new_val )

        log << "#{target_name} was: #{old_val} updated from: #{source_name} with value: #{new_val}"
      end
    end
Update a side with the values from the other side.
 Populates the log with updated fields and values.

 @param [String|Symbol] side to update l OR r
 @param [Array<Field>, nil] flds fields to update, default nil update all fields