77 lines
1.4 KiB
JavaScript
77 lines
1.4 KiB
JavaScript
|
/**
|
||
|
* Service for interacting with RESTful services.
|
||
|
*/
|
||
|
|
||
|
import Http from './http/index';
|
||
|
import {assign, each, merge} from './util';
|
||
|
|
||
|
export default function Resource(url, params, actions, options) {
|
||
|
|
||
|
var self = this || {}, resource = {};
|
||
|
|
||
|
actions = assign({},
|
||
|
Resource.actions,
|
||
|
actions
|
||
|
);
|
||
|
|
||
|
each(actions, (action, name) => {
|
||
|
|
||
|
action = merge({url, params: assign({}, params)}, options, action);
|
||
|
|
||
|
resource[name] = function () {
|
||
|
return (self.$http || Http)(opts(action, arguments));
|
||
|
};
|
||
|
});
|
||
|
|
||
|
return resource;
|
||
|
}
|
||
|
|
||
|
function opts(action, args) {
|
||
|
|
||
|
var options = assign({}, action), params = {}, body;
|
||
|
|
||
|
switch (args.length) {
|
||
|
|
||
|
case 2:
|
||
|
|
||
|
params = args[0];
|
||
|
body = args[1];
|
||
|
|
||
|
break;
|
||
|
|
||
|
case 1:
|
||
|
|
||
|
if (/^(POST|PUT|PATCH)$/i.test(options.method)) {
|
||
|
body = args[0];
|
||
|
} else {
|
||
|
params = args[0];
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
|
||
|
case 0:
|
||
|
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
|
||
|
throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';
|
||
|
}
|
||
|
|
||
|
options.body = body;
|
||
|
options.params = assign({}, options.params, params);
|
||
|
|
||
|
return options;
|
||
|
}
|
||
|
|
||
|
Resource.actions = {
|
||
|
|
||
|
get: {method: 'GET'},
|
||
|
save: {method: 'POST'},
|
||
|
query: {method: 'GET'},
|
||
|
update: {method: 'PUT'},
|
||
|
remove: {method: 'DELETE'},
|
||
|
delete: {method: 'DELETE'}
|
||
|
|
||
|
};
|