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:
parent
82bb3aaea1
commit
5f9c3b92bd
7 changed files with 44 additions and 48 deletions
|
@ -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({
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue