def migrate_properties(obj, row, created)
      # for each input header which maps to a migratable target attribute metadata path,
      # set the target attribute, creating intermediate objects as needed.
      @cls_paths_hash[obj.class].each do |path|
        header = @header_map[path][obj.class]
        # the input value
        value = row[header]
        value.strip! if String === value
        next if value.nil?
        # fill the reference path
        ref = fill_path(obj, path[0...-1], row, created)
        # set the attribute
        migrate_property(ref, path.last, value, row)
      end
    end
def migrate_properties(obj, row, created)
      # for each input header which maps to a migratable target attribute metadata path,
      # set the target attribute, creating intermediate objects as needed.
      @cls_paths_hash[obj.class].each do |path|
        header = @header_map[path][obj.class]
        # the input value
        value = row[header]
        value.strip! if String === value
        next if value.nil?
        # fill the reference path
        ref = fill_path(obj, path[0...-1], row, created)
        # set the attribute
        migrate_property(ref, path.last, value, row)
      end
    end
Migrates each input field to the associated domain object attribute.
 String input values are stripped. Missing input values are ignored.

 @param [Resource] the migration object
 @param row (see #create)
 @param [<Resource>] created (see #create)