Skip to content

Commit

Permalink
moved some server code to the right place.
Browse files Browse the repository at this point in the history
  • Loading branch information
izelnakri committed Nov 1, 2017
1 parent e1ccf45 commit 2228979
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 49 deletions.
56 changes: 56 additions & 0 deletions lib/pretender-hacks.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
import qs from 'qs';
import chalk from 'chalk';
import Inflector from 'i';
import { classify } from 'ember-cli-string-utils';

const { singularize } = Inflector();
const targetNamespace = typeof global === 'object' ? global : window;

// HACK START: Pretender Request Parameter Type Casting Hack: Because types are important.
window.Pretender.prototype._handlerFor = function(verb, url, request) {
Expand Down Expand Up @@ -124,3 +130,53 @@ function getDefaultStatusCode(verb) {
return 500;
}
// END: Pretender Response Defaults UX Hack


// HACK: Pretender REST defaults hack: For better UX
['get', 'put', 'post', 'delete'].forEach((verb) => {
window.Pretender.prototype[verb] = function (path, handler, async) {
const fullPath = (this.urlPrefix || '') + (this.namespace ? ('/' + this.namespace) : '') + path;
const targetHandler = handler || getDefaultRouteHandler(verb.toUpperCase(), fullPath);
const timing = async ? async.timing || this.timing : this.timing;
// console.log('timing is', timing);
// console.log('async is', async);
return this.register(verb.toUpperCase(), fullPath, targetHandler, timing);
}
});
// END: Pretender REST default hack: For better UX

function getDefaultRouteHandler(verb, path) {
const paths = path.split(/\//g);
const lastPath = paths[paths.length - 1];
const pluralResourceName = lastPath.includes(':') ? paths[paths.length - 2] : lastPath;
const resourceName = singularize(pluralResourceName);
const ResourceModel = targetNamespace.MemServer.Models[classify(resourceName)];

if (!ResourceModel) {
throw new Error(chalk.red(`[MemServer] ${verb} ${path} route handler cannot be generated automatically: ${classify(resourceName)} is not a valid MemServer.Model, please check that your route name matches the model reference or create a custom handler function`));
} else if (verb === 'GET') {
if (lastPath.includes(':')) {
return (request) => {
return { [resourceName]: ResourceModel.serializer(ResourceModel.find(request.params.id)) };
}
}

return (request) => {
return { [pluralResourceName]: ResourceModel.serializer(ResourceModel.findAll()) };
};
} else if (verb === 'POST') {
return (request) => {
const resourceParams = request.params[resourceName];

return { [resourceName]: ResourceModel.serializer(ResourceModel.insert(resourceParams)) };
};
} else if (verb === 'PUT') {
return (request) => {
const resourceParams = request.params[resourceName];

return { [resourceName]: ResourceModel.serializer(ResourceModel.update(resourceParams)) };
};
} else if (verb === 'DELETE') {
return (request) => { ResourceModel.delete({ id: request.params.id }) };
}
}
49 changes: 0 additions & 49 deletions lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,6 @@ export default function(Server, options={}) {
window.Pretender.prototype.urlPrefix = options.urlPrefix;
window.Pretender.prototype.timing = options.timing;

// HACK: Pretender REST defaults hack: For better UX
['get', 'put', 'post', 'delete'].forEach((verb) => {
window.Pretender.prototype[verb] = function (path, handler, async) {
const fullPath = (this.urlPrefix || '') + (this.namespace ? ('/' + this.namespace) : '') + path;
const targetHandler = handler || getDefaultRouteHandler(verb.toUpperCase(), fullPath);
const timing = async ? async.timing || this.timing : this.timing;
// console.log('timing is', timing);
// console.log('async is', async);
return this.register(verb.toUpperCase(), fullPath, targetHandler, timing);
}
});
// END: Pretender REST default hack: For better UX

let pretender = new window.Pretender(function() {
const MemServer = chalk.cyan('[MemServer]');

Expand Down Expand Up @@ -72,42 +59,6 @@ export default function(Server, options={}) {
return pretender;
}

function getDefaultRouteHandler(verb, path) {
const paths = path.split(/\//g);
const lastPath = paths[paths.length - 1];
const pluralResourceName = lastPath.includes(':') ? paths[paths.length - 2] : lastPath;
const resourceName = singularize(pluralResourceName);
const ResourceModel = targetNamespace.MemServer.Models[classify(resourceName)];

if (!ResourceModel) {
throw new Error(chalk.red(`[MemServer] ${verb} ${path} route handler cannot be generated automatically: ${classify(resourceName)} is not a valid MemServer.Model, please check that your route name matches the model reference or create a custom handler function`));
} else if (verb === 'GET') {
if (lastPath.includes(':')) {
return (request) => {
return { [resourceName]: ResourceModel.serializer(ResourceModel.find(request.params.id)) };
}
}

return (request) => {
return { [pluralResourceName]: ResourceModel.serializer(ResourceModel.findAll()) };
};
} else if (verb === 'POST') {
return (request) => {
const resourceParams = request.params[resourceName];

return { [resourceName]: ResourceModel.serializer(ResourceModel.insert(resourceParams)) };
};
} else if (verb === 'PUT') {
return (request) => {
const resourceParams = request.params[resourceName];

return { [resourceName]: ResourceModel.serializer(ResourceModel.update(resourceParams)) };
};
} else if (verb === 'DELETE') {
return (request) => { ResourceModel.delete({ id: request.params.id }) };
}
}

function colorStatusCode(statusCode) {
if (statusCode === 200 || statusCode === 201) {
return chalk.green(statusCode);
Expand Down
2 changes: 2 additions & 0 deletions rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ const modelFixtureTreeCode = '{' + modelFileNames.reduce((string, modelFileName)
}`
}, '') + `}`;

// TODO: INVESTIGATE ROLLUP: inject targetMemServer, modelFixtureTree from NODE -> BROWSER without dynamic import problem

export default {
input: 'lib/mem-server.js',
output: {
Expand Down

0 comments on commit 2228979

Please sign in to comment.