-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.js
105 lines (89 loc) · 2.66 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
* Copyright (C) 2018 Shivam Tripathi
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
import _ from 'lodash';
import {sortName} from '../../helpers/utils';
import {validateCreator} from './creator';
import {validateEdition} from './edition';
import {validatePublication} from './publication';
import {validatePublisher} from './publisher';
import {validateWork} from './work';
function getAliasSection(record) {
const aliasSection = {};
let index = 0;
if (record.alias) {
record.alias.forEach(element => {
if (!element.primary) {
aliasSection[`n${index++}`] = element;
}
});
}
return aliasSection;
}
function getPrimaryAlias(aliasList) {
let primaryAlias = null;
if (aliasList && _.isArray(aliasList)) {
for (let i in aliasList) {
if (aliasList[i].primary) {
primaryAlias = aliasList[i];
break;
}
}
}
return primaryAlias;
}
function getIdentifierSection(record) {
const identifierSection = {};
let index = 0;
if (record.identifiers) {
record.identifiers.forEach(element => {
identifierSection[`n${index++}`] = element;
});
}
return identifierSection;
}
function getNameSection(record) {
const primaryAlias = getPrimaryAlias(record.alias);
const nameSection = {
disambiguation: record.disambiguation,
language: primaryAlias.language,
name: primaryAlias.name,
sortName: sortName(primaryAlias.name)
};
return nameSection;
}
function getValidationObject(record) {
return {
aliasSection: getAliasSection(record),
identifierSection: getIdentifierSection(record),
nameSection: getNameSection(record)
};
}
function validateEntity(validationFunction) {
return function validate(record) {
const validationObject = getValidationObject(record);
return validationFunction(validationObject);
};
}
const validate = {
creator: validateEntity(validateCreator),
edition: validateEntity(validateEdition),
publication: validateEntity(validatePublication),
publisher: validatePublisher(validatePublisher),
work: validateEntity(validateWork)
};
export default validate;