From 5f9c3b92bde0b90e9fafd284195bd001680ed99d Mon Sep 17 00:00:00 2001 From: kirrg001 Date: Sat, 27 Jan 2018 17:53:07 +0100 Subject: [PATCH] Improved Base importer constructor readability no issue - better differentiation between options and data - better readability how to access required data from file --- .../data/importer/importers/data/base.js | 24 ++++++++++--------- .../data/importer/importers/data/posts.js | 14 +++++------ .../data/importer/importers/data/roles.js | 10 ++++---- .../data/importer/importers/data/settings.js | 9 ++++--- .../importer/importers/data/subscribers.js | 10 ++++---- .../data/importer/importers/data/tags.js | 9 ++++--- .../data/importer/importers/data/users.js | 16 ++++++------- 7 files changed, 44 insertions(+), 48 deletions(-) diff --git a/core/server/data/importer/importers/data/base.js b/core/server/data/importer/importers/data/base.js index 41f8e0d010..634e2c99e4 100644 --- a/core/server/data/importer/importers/data/base.js +++ b/core/server/data/importer/importers/data/base.js @@ -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({ diff --git a/core/server/data/importer/importers/data/posts.js b/core/server/data/importer/importers/data/posts.js index b5e57c17cf..4cd7638e26 100644 --- a/core/server/data/importer/importers/data/posts.js +++ b/core/server/data/importer/importers/data/posts.js @@ -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; diff --git a/core/server/data/importer/importers/data/roles.js b/core/server/data/importer/importers/data/roles.js index 48d45eca2d..3f98b4c793 100644 --- a/core/server/data/importer/importers/data/roles.js +++ b/core/server/data/importer/importers/data/roles.js @@ -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; } diff --git a/core/server/data/importer/importers/data/settings.js b/core/server/data/importer/importers/data/settings.js index feaf3b5bf5..7492041fee 100644 --- a/core/server/data/importer/importers/data/settings.js +++ b/core/server/data/importer/importers/data/settings.js @@ -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, diff --git a/core/server/data/importer/importers/data/subscribers.js b/core/server/data/importer/importers/data/subscribers.js index 7e11387701..e3851e2e67 100644 --- a/core/server/data/importer/importers/data/subscribers.js +++ b/core/server/data/importer/importers/data/subscribers.js @@ -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() { diff --git a/core/server/data/importer/importers/data/tags.js b/core/server/data/importer/importers/data/tags.js index 7a68a546c3..94d4cabd44 100644 --- a/core/server/data/importer/importers/data/tags.js +++ b/core/server/data/importer/importers/data/tags.js @@ -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 = { diff --git a/core/server/data/importer/importers/data/users.js b/core/server/data/importer/importers/data/users.js index a710c1fc56..3c83837c6e 100644 --- a/core/server/data/importer/importers/data/users.js +++ b/core/server/data/importer/importers/data/users.js @@ -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; }