Added StringField class for transitType field;

Added parsing specific for transit inside _patch method that throws
Renamed fields.area in fieldsName
This commit is contained in:
alexandercerutti
2018-08-26 12:05:15 +02:00
parent 6b4ec893d8
commit 04b5058f3a
3 changed files with 28 additions and 6 deletions

View File

@@ -5,7 +5,7 @@ const schema = require("./schema");
* @see https://apple.co/2wkUBd
*/
class FieldsArea {
class FieldsContainer {
constructor() {
this.fields = [];
}
@@ -57,7 +57,21 @@ class FieldsArea {
}
}
class StringField {
set transitType(v) {
if (schema.isValid(v, schema.constants.transitType, true)) {
this.fields = v;
} else {
this.fields = this.fields && this.fields !== "" ? this.fields : "";
}
}
get transitType() {
return this.fields;
}
}
module.exports = {
areas: ["primaryFields", "secondaryFields", "auxiliaryFields", "backFields", "headerFields"],
FieldsArea
FieldsContainer,
StringField
};

View File

@@ -6,7 +6,7 @@ const forge = require("node-forge");
const archiver = require("archiver");
const moment = require("moment");
const schema = require("./schema");
const fields = require("./fields");
const { areas: fieldsName, FieldsContainer, StringField } = require("./fields");
const { errors, warnings } = require("./messages");
const readdir = util.promisify(fs.readdir);
@@ -21,7 +21,8 @@ class Pass {
this.props = {};
this.shouldOverwrite = !(this.options.hasOwnProperty("shouldOverwrite") && !this.options.shouldOverwrite);
fields.areas.forEach(a => this[a] = new fields.FieldsArea());
fieldsName.forEach(a => this[a] = new FieldsContainer());
this.transitType = new StringField();
}
/**
@@ -523,12 +524,18 @@ class Pass {
});
}
fields.areas.forEach(area => {
fieldsName.forEach(area => {
if (this[area].fields.length) {
passFile[this.type][area].push(...this[area].fields);
}
});
if (this.type === "boardingPass" && this.transitType) {
passFile[this.type]["transitType"] = this.transitType;
} else {
throw new Error("Cannot proceed with pass creation. transitType field is required for boardingPasses.");
}
return Promise.resolve(Buffer.from(JSON.stringify(passFile)));
}

View File

@@ -66,7 +66,8 @@ module.exports = {
basicStructure,
boardingStructure,
beaconsDict,
locationsDict
locationsDict,
transitType
},
isValid: (opts, schemaName, debug = false) => {
let validation = Joi.validate(opts, schemaName);