mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Direct api access for app proxy
- proxy doesn't need a ghost object :)
This commit is contained in:
parent
e4a5356a69
commit
ed6455f5a4
3 changed files with 72 additions and 96 deletions
|
@ -2,43 +2,29 @@
|
||||||
var path = require('path'),
|
var path = require('path'),
|
||||||
_ = require('underscore'),
|
_ = require('underscore'),
|
||||||
when = require('when'),
|
when = require('when'),
|
||||||
createProxy = require('./proxy'),
|
appProxy = require('./proxy'),
|
||||||
config = require('../config'),
|
config = require('../config'),
|
||||||
ghostInstance,
|
|
||||||
loader;
|
loader;
|
||||||
|
|
||||||
function getGhostInstance() {
|
|
||||||
if (ghostInstance) {
|
|
||||||
return ghostInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
var Ghost = require('../../ghost');
|
|
||||||
|
|
||||||
ghostInstance = new Ghost();
|
|
||||||
|
|
||||||
return ghostInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get a relative path to the given plugins root, defaults
|
// Get a relative path to the given plugins root, defaults
|
||||||
// to be relative to __dirname
|
// to be relative to __dirname
|
||||||
function getPluginRelativePath(name, relativeTo, ghost) {
|
function getPluginRelativePath(name, relativeTo) {
|
||||||
ghost = ghost || getGhostInstance();
|
|
||||||
relativeTo = relativeTo || __dirname;
|
relativeTo = relativeTo || __dirname;
|
||||||
|
|
||||||
return path.relative(relativeTo, path.join(config.paths().pluginPath, name));
|
return path.relative(relativeTo, path.join(config.paths().pluginPath, name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function getPluginByName(name, ghost) {
|
function getPluginByName(name) {
|
||||||
ghost = ghost || getGhostInstance();
|
|
||||||
|
|
||||||
// Grab the plugin class to instantiate
|
// Grab the plugin class to instantiate
|
||||||
var PluginClass = require(getPluginRelativePath(name)),
|
var PluginClass = require(getPluginRelativePath(name)),
|
||||||
plugin;
|
plugin;
|
||||||
|
|
||||||
// Check for an actual class, otherwise just use whatever was returned
|
// Check for an actual class, otherwise just use whatever was returned
|
||||||
if (_.isFunction(PluginClass)) {
|
if (_.isFunction(PluginClass)) {
|
||||||
plugin = new PluginClass(createProxy(ghost));
|
plugin = new PluginClass(appProxy);
|
||||||
} else {
|
} else {
|
||||||
plugin = PluginClass;
|
plugin = PluginClass;
|
||||||
}
|
}
|
||||||
|
@ -49,8 +35,8 @@ function getPluginByName(name, ghost) {
|
||||||
// The loader is responsible for loading plugins
|
// The loader is responsible for loading plugins
|
||||||
loader = {
|
loader = {
|
||||||
// Load a plugin and return the instantiated plugin
|
// Load a plugin and return the instantiated plugin
|
||||||
installPluginByName: function (name, ghost) {
|
installPluginByName: function (name) {
|
||||||
var plugin = getPluginByName(name, ghost);
|
var plugin = getPluginByName(name);
|
||||||
|
|
||||||
// Check for an install() method on the plugin.
|
// Check for an install() method on the plugin.
|
||||||
if (!_.isFunction(plugin.install)) {
|
if (!_.isFunction(plugin.install)) {
|
||||||
|
@ -59,14 +45,14 @@ loader = {
|
||||||
|
|
||||||
// Wrapping the install() with a when because it's possible
|
// Wrapping the install() with a when because it's possible
|
||||||
// to not return a promise from it.
|
// to not return a promise from it.
|
||||||
return when(plugin.install(createProxy(ghost))).then(function () {
|
return when(plugin.install(appProxy)).then(function () {
|
||||||
return when.resolve(plugin);
|
return when.resolve(plugin);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
// Activate a plugin and return it
|
// Activate a plugin and return it
|
||||||
activatePluginByName: function (name, ghost) {
|
activatePluginByName: function (name) {
|
||||||
var plugin = getPluginByName(name, ghost);
|
var plugin = getPluginByName(name);
|
||||||
|
|
||||||
// Check for an activate() method on the plugin.
|
// Check for an activate() method on the plugin.
|
||||||
if (!_.isFunction(plugin.activate)) {
|
if (!_.isFunction(plugin.activate)) {
|
||||||
|
@ -75,7 +61,7 @@ loader = {
|
||||||
|
|
||||||
// Wrapping the activate() with a when because it's possible
|
// Wrapping the activate() with a when because it's possible
|
||||||
// to not return a promise from it.
|
// to not return a promise from it.
|
||||||
return when(plugin.activate(createProxy(ghost))).then(function () {
|
return when(plugin.activate(appProxy)).then(function () {
|
||||||
return when.resolve(plugin);
|
return when.resolve(plugin);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
var _ = require('underscore'),
|
var _ = require('underscore'),
|
||||||
|
api = require('../api'),
|
||||||
helpers = require('../helpers'),
|
helpers = require('../helpers'),
|
||||||
filters = require('../filters');
|
filters = require('../filters');
|
||||||
|
|
||||||
function createProxy(ghost) {
|
var proxy = {
|
||||||
|
|
||||||
return {
|
|
||||||
filters: {
|
filters: {
|
||||||
register: filters.registerFilter,
|
register: filters.registerFilter,
|
||||||
unregister: filters.unregisterFilter
|
unregister: filters.unregisterFilter
|
||||||
|
@ -14,12 +14,11 @@ function createProxy(ghost) {
|
||||||
registerAsync: helpers.registerAsyncThemeHelper
|
registerAsync: helpers.registerAsyncThemeHelper
|
||||||
},
|
},
|
||||||
api: {
|
api: {
|
||||||
posts: _.pick(ghost.api.posts, 'browse', 'read'),
|
posts: _.pick(api.posts, 'browse', 'read'),
|
||||||
tags: ghost.api.tags,
|
tags: api.tags,
|
||||||
notifications: _.pick(ghost.api.notifications, 'add'),
|
notifications: _.pick(api.notifications, 'add'),
|
||||||
settings: _.pick(ghost.api.settings, 'read')
|
settings: _.pick(api.settings, 'read')
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = createProxy;
|
module.exports = proxy;
|
|
@ -6,18 +6,17 @@ var should = require('should'),
|
||||||
filters = require('../../server/filters'),
|
filters = require('../../server/filters'),
|
||||||
|
|
||||||
// Stuff we are testing
|
// Stuff we are testing
|
||||||
createProxy = require('../../server/plugins/proxy');
|
appProxy = require('../../server/plugins/proxy');
|
||||||
|
|
||||||
describe('App Proxy', function () {
|
describe('App Proxy', function () {
|
||||||
|
|
||||||
var sandbox,
|
var sandbox,
|
||||||
fakeGhost;
|
fakeApi;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
sandbox = sinon.sandbox.create();
|
sandbox = sinon.sandbox.create();
|
||||||
|
|
||||||
fakeGhost = {
|
fakeApi = {
|
||||||
api: {
|
|
||||||
posts: {
|
posts: {
|
||||||
browse: sandbox.stub(),
|
browse: sandbox.stub(),
|
||||||
read: sandbox.stub(),
|
read: sandbox.stub(),
|
||||||
|
@ -42,7 +41,6 @@ describe('App Proxy', function () {
|
||||||
read: sandbox.stub(),
|
read: sandbox.stub(),
|
||||||
add: sandbox.stub()
|
add: sandbox.stub()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -51,38 +49,31 @@ describe('App Proxy', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('creates a ghost proxy', function () {
|
it('creates a ghost proxy', function () {
|
||||||
var proxy = createProxy(fakeGhost);
|
should.exist(appProxy.filters);
|
||||||
|
appProxy.filters.register.should.equal(filters.registerFilter);
|
||||||
|
appProxy.filters.unregister.should.equal(filters.unregisterFilter);
|
||||||
|
|
||||||
should.exist(proxy.filters);
|
should.exist(appProxy.helpers);
|
||||||
proxy.filters.register.should.equal(filters.registerFilter);
|
appProxy.helpers.register.should.equal(helpers.registerThemeHelper);
|
||||||
proxy.filters.unregister.should.equal(filters.unregisterFilter);
|
appProxy.helpers.registerAsync.should.equal(helpers.registerAsyncThemeHelper);
|
||||||
|
|
||||||
should.exist(proxy.helpers);
|
should.exist(appProxy.api);
|
||||||
proxy.helpers.register.should.equal(helpers.registerThemeHelper);
|
|
||||||
proxy.helpers.registerAsync.should.equal(helpers.registerAsyncThemeHelper);
|
|
||||||
|
|
||||||
should.exist(proxy.api);
|
should.exist(appProxy.api.posts);
|
||||||
|
should.not.exist(appProxy.api.posts.edit);
|
||||||
|
should.not.exist(appProxy.api.posts.add);
|
||||||
|
should.not.exist(appProxy.api.posts.destroy);
|
||||||
|
|
||||||
should.exist(proxy.api.posts);
|
should.not.exist(appProxy.api.users);
|
||||||
proxy.api.posts.browse.should.equal(fakeGhost.api.posts.browse);
|
|
||||||
proxy.api.posts.read.should.equal(fakeGhost.api.posts.read);
|
|
||||||
should.not.exist(proxy.api.posts.edit);
|
|
||||||
should.not.exist(proxy.api.posts.add);
|
|
||||||
should.not.exist(proxy.api.posts.destroy);
|
|
||||||
|
|
||||||
should.not.exist(proxy.api.users);
|
should.exist(appProxy.api.tags);
|
||||||
|
|
||||||
should.exist(proxy.api.tags);
|
should.exist(appProxy.api.notifications);
|
||||||
proxy.api.tags.all.should.equal(fakeGhost.api.tags.all);
|
should.not.exist(appProxy.api.notifications.destroy);
|
||||||
|
|
||||||
should.exist(proxy.api.notifications);
|
should.exist(appProxy.api.settings);
|
||||||
should.not.exist(proxy.api.notifications.destroy);
|
should.not.exist(appProxy.api.settings.browse);
|
||||||
proxy.api.notifications.add.should.equal(fakeGhost.api.notifications.add);
|
should.not.exist(appProxy.api.settings.add);
|
||||||
|
|
||||||
should.exist(proxy.api.settings);
|
|
||||||
should.not.exist(proxy.api.settings.browse);
|
|
||||||
proxy.api.settings.read.should.equal(fakeGhost.api.settings.read);
|
|
||||||
should.not.exist(proxy.api.settings.add);
|
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
Loading…
Add table
Reference in a new issue