Skip to content
Permalink
1cdde3eb41
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
0 contributors

Users who have contributed to this file

66 lines (65 sloc) 2.14 KB
/**
* JSON Schema link handler
* Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com)
* Licensed under the MIT (MIT-LICENSE.txt) license.
*/
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([], function () {
return factory();
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory();
} else {
// Browser globals
root.jsonSchemaLinks = factory();
}
}(this, function () {// setup primitive classes to be JSON Schema types
var exports = {};
exports.cacheLinks = true;
exports.getLink = function(relation, instance, schema){
// gets the URI of the link for the given relation based on the instance and schema
// for example:
// getLink(
// "brother",
// {"brother_id":33},
// {links:[{rel:"brother", href:"Brother/{brother_id}"}]}) ->
// "Brother/33"
var links = schema.__linkTemplates;
if(!links){
links = {};
var schemaLinks = schema.links;
if(schemaLinks && schemaLinks instanceof Array){
schemaLinks.forEach(function(link){
/* // TODO: allow for multiple same-name relations
if(links[link.rel]){
if(!(links[link.rel] instanceof Array)){
links[link.rel] = [links[link.rel]];
}
}*/
links[link.rel] = link.href;
});
}
if(exports.cacheLinks){
schema.__linkTemplates = links;
}
}
var linkTemplate = links[relation];
return linkTemplate && exports.substitute(linkTemplate, instance);
};
exports.substitute = function(linkTemplate, instance){
return linkTemplate.replace(/\{([^\}]*)\}/g, function(t, property){
var value = instance[decodeURIComponent(property)];
if(value instanceof Array){
// the value is an array, it should produce a URI like /Table/(4,5,8) and store.get() should handle that as an array of values
return '(' + value.join(',') + ')';
}
return value;
});
};
return exports;
}));