mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
Extracted email preview service
refs https://github.com/TryGhost/Team/issues/694 - The code complexity in the email preview's read controller method was breaking the complexity rule in ESLint. To reduce the complexity extracted common parts into mega service
This commit is contained in:
parent
c6fc3902c5
commit
807322dccb
4 changed files with 58 additions and 31 deletions
|
@ -4,6 +4,11 @@ const errors = require('@tryghost/errors');
|
|||
const mega = require('../../services/mega');
|
||||
const labs = require('../../../shared/labs');
|
||||
|
||||
const emailPreview = new mega.EmailPreview({
|
||||
apiVersion: 'canary',
|
||||
isSet: labs.isSet.bind(labs)
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
docName: 'email_preview',
|
||||
|
||||
|
@ -34,23 +39,7 @@ module.exports = {
|
|||
});
|
||||
}
|
||||
|
||||
let emailContent = await mega.postEmailSerializer.serialize(model, {
|
||||
isBrowserPreview: true,
|
||||
apiVersion: 'canary'
|
||||
});
|
||||
if (labs.isSet('emailCardSegments') && frame.options.memberSegment) {
|
||||
emailContent = mega.postEmailSerializer.renderEmailForSegment(emailContent, frame.options.memberSegment);
|
||||
}
|
||||
const replacements = mega.postEmailSerializer.parseReplacements(emailContent);
|
||||
|
||||
replacements.forEach((replacement) => {
|
||||
emailContent[replacement.format] = emailContent[replacement.format].replace(
|
||||
replacement.match,
|
||||
replacement.fallback || ''
|
||||
);
|
||||
});
|
||||
|
||||
return emailContent;
|
||||
return emailPreview.generateEmailContent(model, frame.options.memberSegment);
|
||||
}
|
||||
},
|
||||
sendTestEmail: {
|
||||
|
|
|
@ -3,6 +3,10 @@ const i18n = require('../../../shared/i18n');
|
|||
const errors = require('@tryghost/errors');
|
||||
const mega = require('../../services/mega');
|
||||
|
||||
const emailPreview = new mega.EmailPreview({
|
||||
apiVersion: 'v3'
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
docName: 'email_preview',
|
||||
|
||||
|
@ -32,20 +36,7 @@ module.exports = {
|
|||
});
|
||||
}
|
||||
|
||||
let emailContent = await mega.postEmailSerializer.serialize(model, {
|
||||
isBrowserPreview: true,
|
||||
apiVersion: 'v3'
|
||||
});
|
||||
const replacements = mega.postEmailSerializer.parseReplacements(emailContent);
|
||||
|
||||
replacements.forEach((replacement) => {
|
||||
emailContent[replacement.format] = emailContent[replacement.format].replace(
|
||||
replacement.match,
|
||||
replacement.fallback || ''
|
||||
);
|
||||
});
|
||||
|
||||
return emailContent;
|
||||
return emailPreview.generateEmailContent(model, frame.options.memberSegment);
|
||||
}
|
||||
},
|
||||
sendTestEmail: {
|
||||
|
|
43
core/server/services/mega/email-preview.js
Normal file
43
core/server/services/mega/email-preview.js
Normal file
|
@ -0,0 +1,43 @@
|
|||
const postEmailSerializer = require('./post-email-serializer');
|
||||
|
||||
class EmailPreview {
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} options
|
||||
* @param {String} options.apiVersion
|
||||
* @param {Function} [options.isSet]
|
||||
*/
|
||||
constructor({apiVersion, isSet}) {
|
||||
this.apiVersion = apiVersion;
|
||||
this.isSet = isSet;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} post - Post model object instance
|
||||
* @param {String} memberSegment - member segment filter
|
||||
* @returns {Promise<Object>}
|
||||
*/
|
||||
async generateEmailContent(post, memberSegment) {
|
||||
let emailContent = await postEmailSerializer.serialize(post, {
|
||||
isBrowserPreview: true,
|
||||
apiVersion: this.apiVersion
|
||||
});
|
||||
|
||||
if (this.isSet && this.isSet('emailCardSegments') && memberSegment) {
|
||||
emailContent = postEmailSerializer.renderEmailForSegment(emailContent, memberSegment);
|
||||
}
|
||||
|
||||
const replacements = postEmailSerializer.parseReplacements(emailContent);
|
||||
|
||||
replacements.forEach((replacement) => {
|
||||
emailContent[replacement.format] = emailContent[replacement.format].replace(
|
||||
replacement.match,
|
||||
replacement.fallback || ''
|
||||
);
|
||||
});
|
||||
|
||||
return emailContent;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = EmailPreview;
|
|
@ -5,6 +5,10 @@ module.exports = {
|
|||
|
||||
get postEmailSerializer() {
|
||||
return require('./post-email-serializer');
|
||||
},
|
||||
|
||||
get EmailPreview() {
|
||||
return require('./email-preview');
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue