79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var conversions = require('./conversions'); | ||
|  | var route = require('./route'); | ||
|  | 
 | ||
|  | var convert = {}; | ||
|  | 
 | ||
|  | var models = Object.keys(conversions); | ||
|  | 
 | ||
|  | function wrapRaw(fn) { | ||
|  | 	var wrappedFn = function (args) { | ||
|  | 		if (args === undefined || args === null) { | ||
|  | 			return args; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (arguments.length > 1) { | ||
|  | 			args = Array.prototype.slice.call(arguments); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return fn(args); | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	// preserve .conversion property if there is one
 | ||
|  | 	if ('conversion' in fn) { | ||
|  | 		wrappedFn.conversion = fn.conversion; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return wrappedFn; | ||
|  | } | ||
|  | 
 | ||
|  | function wrapRounded(fn) { | ||
|  | 	var wrappedFn = function (args) { | ||
|  | 		if (args === undefined || args === null) { | ||
|  | 			return args; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (arguments.length > 1) { | ||
|  | 			args = Array.prototype.slice.call(arguments); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		var result = fn(args); | ||
|  | 
 | ||
|  | 		// we're assuming the result is an array here.
 | ||
|  | 		// see notice in conversions.js; don't use box types
 | ||
|  | 		// in conversion functions.
 | ||
|  | 		if (typeof result === 'object') { | ||
|  | 			for (var len = result.length, i = 0; i < len; i++) { | ||
|  | 				result[i] = Math.round(result[i]); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return result; | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	// preserve .conversion property if there is one
 | ||
|  | 	if ('conversion' in fn) { | ||
|  | 		wrappedFn.conversion = fn.conversion; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return wrappedFn; | ||
|  | } | ||
|  | 
 | ||
|  | models.forEach(function (fromModel) { | ||
|  | 	convert[fromModel] = {}; | ||
|  | 
 | ||
|  | 	Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); | ||
|  | 	Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); | ||
|  | 
 | ||
|  | 	var routes = route(fromModel); | ||
|  | 	var routeModels = Object.keys(routes); | ||
|  | 
 | ||
|  | 	routeModels.forEach(function (toModel) { | ||
|  | 		var fn = routes[toModel]; | ||
|  | 
 | ||
|  | 		convert[fromModel][toModel] = wrapRounded(fn); | ||
|  | 		convert[fromModel][toModel].raw = wrapRaw(fn); | ||
|  | 	}); | ||
|  | }); | ||
|  | 
 | ||
|  | module.exports = convert; |