UNPKG

1.91 kBJavaScriptView Raw
1/*
2 * Copyright 2012-2013 the original author or authors
3 * @license MIT, see LICENSE.txt for details
4 *
5 * @author Scott Andrews
6 */
7
8(function (define) {
9 'use strict';
10
11 define(function (require) {
12
13 var RestStore, clientPlugin, mixin, when;
14
15 RestStore = require('./RestStore');
16 clientPlugin = require('../wire');
17 mixin = require('../util/mixin');
18 when = require('when');
19
20 return {
21 wire$plugin: function restPlugin(/* ready, destroyed, options */) {
22
23 var plugin;
24
25 plugin = clientPlugin.wire$plugin.apply(clientPlugin, arguments);
26 Object.keys(plugin).forEach(function (key) {
27 if (typeof plugin[key] === 'object') {
28 plugin[key] = mixin({}, plugin[key]);
29 }
30 });
31
32 /**
33 * Resolves a RestStore client for the specified path and scopes, e.g. resource!url/to/resource
34 *
35 * @param resolver
36 * @param name
37 * @param refObj
38 * @param wire
39 */
40 function resolveResource(resolver, name, refObj, wire) {
41 var client;
42
43 client = when.defer();
44 plugin.resolvers.client(client.resolver, name, refObj, wire);
45
46 when(client.promise, function (client) {
47 var args, store;
48
49 args = { client: client };
50 if (refObj.idProperty) { args.idProperty = refObj.idProperty; }
51
52 store = new RestStore(args);
53 if (refObj.get) {
54 store.get(refObj.get).then(resolver.resolve, resolver.reject);
55
56 }
57 else if (refObj.query) {
58 store.query(refObj.query).then(resolver.resolve, resolver.reject);
59
60 }
61 else {
62 // Neither get nor query was specified, so resolve with
63 // the store itself.
64 resolver.resolve(store);
65 }
66 });
67 }
68
69 plugin.resolvers.resource = resolveResource;
70
71 return plugin;
72 }
73
74 };
75
76 });
77
78}(
79 typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); }
80 // Boilerplate for AMD and Node
81));