Skip to content

Commit

Permalink
a lot of new stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
anakreon committed Aug 19, 2019
1 parent 24ab82a commit 26e6542
Show file tree
Hide file tree
Showing 55 changed files with 820 additions and 187 deletions.
88 changes: 69 additions & 19 deletions src/Bulletin.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
import { Nation, Group, Document } from './types';
import { allNations } from './constants';
import { Nation, Document, Vaccine } from './types';
import { allNations, foreignNations } from './constants';

export class Bulletin {
private denied: Set<Nation>;
private requiredDocumentsByNation: { [nation: string]: Set<Document> };
private requiredDocumentsByGroup: { [group: string]: Set<Document> };
private requiredDocumentsForWorkers: Set<Document>;
private requiredVaccinationsByNation: { [nation: string]: Set<Vaccine> };
private requiredVaccinationsForWorkers: Set<Vaccine>;
private wantedName: string;

constructor () {
this.denied = new Set<Nation>();
this.denied = new Set<Nation>(allNations);
this.requiredDocumentsByNation = {};
this.requiredDocumentsByGroup = {};
this.requiredDocumentsForWorkers = new Set<Document>();
this.requiredVaccinationsByNation = {};
this.requiredVaccinationsForWorkers = new Set<Vaccine>();
this.wantedName = '';
}

Expand All @@ -30,32 +34,72 @@ export class Bulletin {
this.requiredDocumentsByNation[nation] = this.requiredDocumentsByNation[nation] || new Set<Document>();
this.requiredDocumentsByNation[nation].delete(document);
}
public requireDocumentForGroup (group: Group, document: Document): void {
this.requiredDocumentsByGroup[group] = this.requiredDocumentsByGroup[group] || new Set<Document>();
this.requiredDocumentsByGroup[group].add(document);
public requireDocumentForWorkers (document: Document): void {
this.requiredDocumentsForWorkers.add(document);
}
public noLongerRequireDocumentForGroup (group: Group, document: Document): void {
this.requiredDocumentsByGroup[group] = this.requiredDocumentsByGroup[group] || new Set<Document>();
this.requiredDocumentsByGroup[group].delete(document);
public noLongerRequireDocumentForWorkers (document: Document): void {
this.requiredDocumentsForWorkers.delete(document);
}
public allRequire (document: Document): void {
public allRequireDocument (document: Document): void {
allNations.forEach((nation: Nation) => {
this.requireDocumentForNation(<Nation>nation, document);
});
}
public noneRequire (document: Document): void {
public noneRequireDocument (document: Document): void {
for (var nation in this.requiredDocumentsByNation) {
if (this.requiredDocumentsByNation.hasOwnProperty(nation)) {
this.noLongerRequireDocumentForNation(<Nation>nation, document);
}
}
for (var group in this.requiredDocumentsByGroup) {
if (this.requiredDocumentsByGroup.hasOwnProperty(group)) {
this.noLongerRequireDocumentForGroup(<Group>group, document);
this.noLongerRequireDocumentForWorkers(document);
}
public requireVaccinationForNation (nation: Nation, vaccine: Vaccine): void {
this.requiredVaccinationsByNation[nation] = this.requiredVaccinationsByNation[nation] || new Set<Vaccine>();
this.requiredVaccinationsByNation[nation].add(vaccine);
}
public noLongerRequireVaccinationForNation (nation: Nation, vaccine: Vaccine): void {
this.requiredVaccinationsByNation[nation] = this.requiredVaccinationsByNation[nation] || new Set<Vaccine>();
this.requiredVaccinationsByNation[nation].delete(vaccine);
}
public requireVaccinationForWorkers (vaccine: Vaccine): void {
this.requiredVaccinationsForWorkers.add(vaccine);
}
public noLongerRequireVaccinationForWorkers (vaccine: Vaccine): void {
this.requiredVaccinationsForWorkers.delete(vaccine);
}
public allRequireVaccination (vaccine: Vaccine): void {
allNations.forEach((nation: Nation) => {
this.requireVaccinationForNation(<Nation>nation, vaccine);
});
}
public noneRequireVaccination (vaccine: Vaccine): void {
for (var nation in this.requiredVaccinationsByNation) {
if (this.requiredVaccinationsByNation.hasOwnProperty(nation)) {
this.noLongerRequireVaccinationForNation(<Nation>nation, vaccine);
}
}
this.noLongerRequireVaccinationForWorkers(vaccine);
}
public requireDocumentForForeigners (document: Document): void {
foreignNations.forEach((nation: Nation) => {
this.requireDocumentForNation(nation, document);
});
}
public noLongerRequireDocumentForForeigners (document: Document): void {
foreignNations.forEach((nation: Nation) => {
this.noLongerRequireDocumentForNation(nation, document);
});
}
public requireVaccinationForForeigners (vaccine: Vaccine): void {
foreignNations.forEach((nation: Nation) => {
this.requireVaccinationForNation(nation, vaccine);
});
}
public noLongerRequireVaccinationForForeigners (vaccine: Vaccine): void {
foreignNations.forEach((nation: Nation) => {
this.noLongerRequireVaccinationForNation(nation, vaccine);
});
}

public want (name: string): void {
this.wantedName = name;
}
Expand All @@ -69,8 +113,14 @@ export class Bulletin {
public getRequiredDocumentsByNation (): { [nation: string]: Set<Document> } {
return this.requiredDocumentsByNation;
}
public getRequiredDocumentsByGroup (): { [group: string]: Set<Document> } {
return this.requiredDocumentsByGroup;
public getrequiredDocumentsForWorkers (): Set<Document> {
return this.requiredDocumentsForWorkers;
}
public getRequiredVaccinationsByNation (): { [nation: string]: Set<Vaccine> } {
return this.requiredVaccinationsByNation;
}
public getrequiredVaccinationsForWorkers (): Set<Vaccine> {
return this.requiredVaccinationsForWorkers;
}
public getWantedName (): string {
return this.wantedName;
Expand Down
19 changes: 17 additions & 2 deletions src/Inspector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ import { Bulletin } from './Bulletin';
import { BulletinInterpreter } from './interpreters/bulletin/BulletinInterpreter';
import { RulesetBuilder } from './RulesetBuilder';
import { Ruleset } from './Ruleset';

import { CertificateOfVaccinationInterpreter } from './interpreters/paper/CertificateOfVaccinationInterpreter';
import { IdCardInterpreter } from './interpreters/paper/IdCardInterpreter';

export class Inspector {
private bulletin: Bulletin;
Expand All @@ -19,16 +20,20 @@ export class Inspector {
}

public receiveBulletin (inputBulletin: string): void {
console.log('inputBulletin', inputBulletin);
const interpreter = new BulletinInterpreter();
interpreter.interpret(this.bulletin, inputBulletin);
const rulesetBuilder = new RulesetBuilder();
rulesetBuilder.fromBulletin(this.bulletin);
this.ruleset = rulesetBuilder.getRuleset();
console.log('updatedBulletin: ', this.bulletin);
console.log('updatedRuleset: ', this.ruleset);
}

public inspect (inputPapers: InputPapers): InspectionResult {

console.log('inputPapers: ', inputPapers);
const papers = this.buildPapers(inputPapers);
console.log('papers', papers);
const detainmentRule = this.ruleset.getDetainmentRule(papers);
if (detainmentRule) {
return 'Detainment: ' + detainmentRule.getErrorMessage();
Expand Down Expand Up @@ -67,6 +72,16 @@ export class Inspector {
const passport = interpreter.interpret(inputPapers.passport);
papers.setPassport(passport);
}
if (inputPapers.certificate_of_vaccination) {
const interpreter = new CertificateOfVaccinationInterpreter();
const certificateOfVaccination = interpreter.interpret(inputPapers.certificate_of_vaccination);
papers.setCertificateOfVaccination(certificateOfVaccination);
}
if (inputPapers.ID_card) {
const interpreter = new IdCardInterpreter();
const idCard = interpreter.interpret(inputPapers.ID_card);
papers.setIdCard(idCard);
}
return papers;
}
}
19 changes: 19 additions & 0 deletions src/Papers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ import { AccessPermit } from './papers/AccessPermit';
import { GrantOfAsylum } from './papers/GrantOfAsylum';
import { DiplomaticAuthorization } from './papers/DiplomaticAuthorization';
import { PersonalData } from './papers/PersonalData';
import { IdCard } from './papers/IdCard';
import { CertificateOfVaccination } from './papers/CertificateOfVaccination';

export class Papers {
private passport: Passport;
private accessPermit: AccessPermit;
private grantOfAsylum: GrantOfAsylum;
private diplomaticAuthorization: DiplomaticAuthorization;
private certificateOfVaccination: CertificateOfVaccination;
private idCard: IdCard;
private personalData: PersonalData;

constructor () {
Expand All @@ -29,6 +33,15 @@ export class Papers {
}
public setDiplomaticAuthorization (diplomaticAuthorization: DiplomaticAuthorization): void {
this.diplomaticAuthorization = diplomaticAuthorization;
this.personalData.fromDiplomaticAuthorization(diplomaticAuthorization);
}
public setCertificateOfVaccination (certificateOfVaccination: CertificateOfVaccination): void {
this.certificateOfVaccination = certificateOfVaccination;
this.personalData.fromCertificateOfVaccination(certificateOfVaccination);
}
public setIdCard (idCard: IdCard): void {
this.idCard = idCard;
this.personalData.fromIdCard(idCard);
}

public getPassport (): Passport {
Expand All @@ -43,6 +56,12 @@ export class Papers {
public getDiplomaticAuthorization (): DiplomaticAuthorization {
return this.diplomaticAuthorization;
}
public getCertificateOfVaccination (): CertificateOfVaccination {
return this.certificateOfVaccination;
}
public getIdCard (): IdCard {
return this.idCard;
}
public getPersonalData (): PersonalData {
return this.personalData;
}
Expand Down
6 changes: 3 additions & 3 deletions src/Ruleset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import { Rule } from './Rule';
import { Papers } from './types';

export class Ruleset {
constructor (private deny: Rule[], private detain: Rule[]) {}
constructor (private detain: Rule[], private deny: Rule[]) {}

public getDetainmentRule (papers: Papers): Rule {
return this.detain.find((rule: Rule) => !rule.test(papers));
return this.detain.find((rule: Rule) => rule.test(papers));
}
public getDenialRule (papers: Papers): Rule {
return this.deny.find((rule: Rule) => !rule.test(papers));
return this.deny.find((rule: Rule) => rule.test(papers));
}
}
Loading

0 comments on commit 26e6542

Please sign in to comment.