TableMapping.prototype.mapField = function()

in database-jones/Adapter/api/TableMapping.js [396:461]


TableMapping.prototype.mapField = function(nameOrLiteral) {
  var i, arg, fieldMapping, fieldName, fieldMappingLiteral, errors;

  switch(typeof nameOrLiteral) {
    case 'string':
      fieldMappingLiteral = { "fieldName" : nameOrLiteral };
      for(i = 1; i < arguments.length ; i++) {
        arg = arguments[i];
        switch(typeof arg) {
          case 'string':
            fieldMappingLiteral.columnName = arg;
            break;
          case 'boolean':
            fieldMappingLiteral.persistent = arg;
            break;
          case 'object':
            if (isMeta(arg)) {
              fieldMappingLiteral.meta = arg;
            } else if(isLiteralMeta(arg)) {
              fieldMappingLiteral.meta = Meta.fromLiteralMeta(arg);
            } else if(isConverter(arg)) {
              fieldMappingLiteral.converter = arg;
            } else if(isArrayOf(isString)(arg)) {
              fieldMappingLiteral.toManyColumns = arg;
            } else {
              this.error += "mapField(): Invalid argument " + arg;
            }
            break;
          default:
            this.error += "mapField(): Invalid argument " + arg;
        }
      }
      break;

    case 'object':
      fieldMappingLiteral = nameOrLiteral;
      break;

    default:
      this.error += "mapField() expects a literal FieldMapping or valid arguments list";
      return this;
  }

  errors = fieldMappingProperties.getErrors(fieldMappingLiteral);

  if(errors.length) {
    this.error += errors;
    udebug.log("mapField() Errors: ", errors);
  } else {
    fieldName = fieldMappingLiteral.fieldName;
    if(this.getFieldMapping(fieldName)) {
      udebug.log("mapField(): Duplicate fieldName error");
      this.error += '\nmapField(): "' + fieldName + '" is duplicated; it cannot replace an existing field.';
    } else {
      fieldMapping = new FieldMapping(fieldName);
      fieldMappingProperties.buildObjectFromLiteral(fieldMapping, fieldMappingLiteral);
      this.fields.push(fieldMapping);
      if (!fieldMapping.persistent) {
        this.excludedFieldNames.push(fieldMapping.fieldName);
      }
      udebug.log("mapField success: field", fieldMapping);
    }
  }

  return this;
};