| 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; |