0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-10 23:36:14 -05:00

Improved Base importer constructor readability

no issue

- better differentiation between options and data
- better readability how to access required data from file
This commit is contained in:
kirrg001 2018-01-27 17:53:07 +01:00
parent 82bb3aaea1
commit 5f9c3b92bd
7 changed files with 44 additions and 48 deletions

View file

@ -8,9 +8,10 @@ const debug = require('ghost-ignition').debug('importer:base'),
Promise = require('bluebird');
class Base {
constructor(options) {
constructor(allDataFromFile, options) {
let self = this;
this.options = options;
this.modelName = options.modelName;
this.problems = [];
@ -29,19 +30,20 @@ class Base {
};
this.dataKeyToImport = options.dataKeyToImport;
this.dataToImport = _.cloneDeep(options[this.dataKeyToImport] || []);
this.dataToImport = _.cloneDeep(allDataFromFile[this.dataKeyToImport] || []);
this.importedData = [];
// NOTE: e.g. properties are removed or properties are added/changed before importing
_.each(options, function (obj, key) {
if (options.requiredData.indexOf(key) !== -1) {
self[key] = _.cloneDeep(obj);
}
});
this.requiredFromFile = {};
if (!this.users) {
this.users = _.cloneDeep(options.users);
if (!this.options.requiredFromFile) {
this.options.requiredFromFile = ['users'];
} else {
this.options.requiredFromFile.push('users');
}
_.each(this.options.requiredFromFile, (key) => {
this.requiredFromFile[key] = _.cloneDeep(allDataFromFile[key]);
});
}
/**
@ -204,7 +206,7 @@ class Base {
return Promise.resolve();
}
oldUser = _.find(self.users, {id: obj[key]});
oldUser = _.find(self.requiredFromFile.users, {id: obj[key]});
if (!oldUser) {
self.problems.push({

View file

@ -7,12 +7,12 @@ const debug = require('ghost-ignition').debug('importer:posts'),
validation = require('../../../validation');
class PostsImporter extends BaseImporter {
constructor(options) {
super(_.extend(options, {
constructor(allDataFromFile) {
super(allDataFromFile, {
modelName: 'Post',
dataKeyToImport: 'posts',
requiredData: ['tags', 'posts_tags']
}));
requiredFromFile: ['tags', 'posts_tags']
});
this.legacyKeys = {
image: 'feature_image'
@ -33,7 +33,7 @@ class PostsImporter extends BaseImporter {
* ...because we add tags by unique name.
*/
addTagsToPosts() {
let postTags = this.posts_tags,
let postTags = this.requiredFromFile.posts_tags,
postsWithTags = new Map(),
self = this,
duplicatedTagsPerPost = {},
@ -62,7 +62,7 @@ class PostsImporter extends BaseImporter {
tagsToAttach = [];
_.each(tagIds, function (tagId) {
foundOriginalTag = _.find(self.tags, {id: tagId});
foundOriginalTag = _.find(self.requiredFromFile.tags, {id: tagId});
if (!foundOriginalTag) {
return;
@ -83,7 +83,7 @@ class PostsImporter extends BaseImporter {
message: 'Detected duplicated tags for: ' + obj.title || obj.slug,
help: self.modelName,
context: JSON.stringify({
tags: _.map(_.filter(self.tags, function (tag) {
tags: _.map(_.filter(self.requiredFromFile.tags, function (tag) {
return _.indexOf(duplicatedTagsPerPost[postId], tag.id) !== -1;
}), function (value) {
return value.slug || value.name;

View file

@ -1,16 +1,14 @@
'use strict';
const debug = require('ghost-ignition').debug('importer:roles'),
_ = require('lodash'),
BaseImporter = require('./base');
class RolesImporter extends BaseImporter {
constructor(options) {
super(_.extend(options, {
constructor(allDataFromFile) {
super(allDataFromFile, {
modelName: 'Role',
dataKeyToImport: 'roles',
requiredData: []
}));
dataKeyToImport: 'roles'
});
this.errorConfig.returnDuplicates = false;
}

View file

@ -9,12 +9,11 @@ const debug = require('ghost-ignition').debug('importer:settings'),
labsDefaults = JSON.parse(defaultSettings.blog.labs.defaultValue);
class SettingsImporter extends BaseImporter {
constructor(options) {
super(_.extend(options, {
constructor(allDataFromFile) {
super(allDataFromFile, {
modelName: 'Settings',
dataKeyToImport: 'settings',
requiredData: []
}));
dataKeyToImport: 'settings'
});
this.errorConfig = {
allowDuplicates: true,

View file

@ -1,16 +1,14 @@
'use strict';
const debug = require('ghost-ignition').debug('importer:subscribers'),
_ = require('lodash'),
BaseImporter = require('./base');
class SubscribersImporter extends BaseImporter {
constructor(options) {
super(_.extend(options, {
constructor(allDataFromFile) {
super(allDataFromFile, {
modelName: 'Subscriber',
dataKeyToImport: 'subscribers',
requiredData: []
}));
dataKeyToImport: 'subscribers'
});
}
beforeImport() {

View file

@ -7,12 +7,11 @@ const debug = require('ghost-ignition').debug('importer:tags'),
models = require('../../../../models');
class TagsImporter extends BaseImporter {
constructor(options) {
super(_.extend(options, {
constructor(allDataFromFile) {
super(allDataFromFile, {
modelName: 'Tag',
dataKeyToImport: 'tags',
requiredData: []
}));
dataKeyToImport: 'tags'
});
// Map legacy keys
this.legacyKeys = {

View file

@ -5,12 +5,12 @@ const debug = require('ghost-ignition').debug('importer:users'),
BaseImporter = require('./base');
class UsersImporter extends BaseImporter {
constructor(options) {
super(_.extend(options, {
constructor(allDataFromFile) {
super(allDataFromFile, {
modelName: 'User',
dataKeyToImport: 'users',
requiredData: ['roles', 'roles_users']
}));
requiredFromFile: ['roles', 'roles_users']
});
// Map legacy keys
this.legacyKeys = {
@ -41,7 +41,7 @@ class UsersImporter extends BaseImporter {
this.dataToImport = this.dataToImport.map(self.legacyMapper);
// NOTE: sort out duplicated roles based on incremental id
_.each(this.roles_users, function (attachedRole) {
_.each(this.requiredFromFile.roles_users, function (attachedRole) {
if (lookup.hasOwnProperty(attachedRole.user_id)) {
if (lookup[attachedRole.user_id].id < attachedRole.id) {
lookup[attachedRole.user_id] = attachedRole;
@ -51,10 +51,10 @@ class UsersImporter extends BaseImporter {
}
});
this.roles_users = _.toArray(lookup);
this.requiredFromFile.roles_users = _.toArray(lookup);
_.each(this.roles_users, function (attachedRole) {
role = _.find(self.roles, function (role) {
_.each(this.requiredFromFile.roles_users, function (attachedRole) {
role = _.find(self.requiredFromFile.roles, function (role) {
if (attachedRole.role_id === role.id) {
return role;
}