UNPKG

bmw-js

Version:

BMW javascript REST client for the BMW i3 hackathon.

1,647 lines (1,395 loc) 49.1 kB
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.BMWClient=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var HttpBrowserWrapper; module.exports = HttpBrowserWrapper = (function() { var sendRequest; function HttpBrowserWrapper($) { this.$ = $; } sendRequest = function(url, data, method, headers) { return this.$.ajax(url, { data: data, headers: headers, contentType: "application/json", dataType: "json", type: method, cache: false, error: function(obj, status, error) { return console.log('Error during request: (' + status + ') ' + error); } }); }; HttpBrowserWrapper.prototype.request = function(params, callback) { var url; if (params.method == null) { params.method = "GET"; } if ((params.host == null) && (params.hostname != null)) { params.host = params.hostname; } if (params.scheme == null) { params.scheme = window.location.protocol.split(':')[0]; } if (params.scheme === 'file') { params.scheme = 'http'; } if (params.data == null) { params.data = {}; } if (params.body != null) { params.data = params.body; } if (params.headers == null) { params.headers = {}; } url = params.scheme + "://" + params.host + ":" + params.port + params.path; return sendRequest(url, params.data, params.method, params.headers).done(function(result) { return callback(null, result); }).fail(function() { return callback("Failed", null); }); }; return HttpBrowserWrapper; })(); }).call(this); },{}],2:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var Http, MojioClient, SignalR; Http = _dereq_('./HttpBrowserWrapper'); SignalR = _dereq_('./SignalRBrowserWrapper'); module.exports = MojioClient = (function() { var App, Event, Mojio, Observer, Product, Subscription, Trip, User, Vehicle, defaults, mojio_models; defaults = { hostname: 'data.api.hackthedrive.com', port: '80', version: 'v1', scheme: 'http', signalr_scheme: 'http', signalr_port: '80', signalr_hub: 'ObserverHub' }; function MojioClient(options) { var _base, _base1, _base2, _base3, _base4, _base5, _base6; this.options = options; if (this.options == null) { this.options = { hostname: defaults.hostname, port: this.defaults.port, version: this.defaults.version, scheme: this.defaults.scheme }; } if ((_base = this.options).hostname == null) { _base.hostname = defaults.hostname; } if ((_base1 = this.options).port == null) { _base1.port = defaults.port; } if ((_base2 = this.options).version == null) { _base2.version = defaults.version; } if ((_base3 = this.options).scheme == null) { _base3.scheme = defaults.scheme; } if ((_base4 = this.options).signalr_port == null) { _base4.signalr_port = defaults.signalr_port; } if ((_base5 = this.options).signalr_scheme == null) { _base5.signalr_scheme = defaults.signalr_scheme; } if ((_base6 = this.options).signalr_hub == null) { _base6.signalr_hub = defaults.signalr_hub; } this.options.application = this.options.application; this.options.secret = this.options.secret; this.options.observerTransport = 'SingalR'; this.conn = null; this.hub = null; this.connStatus = null; this.auth_token = null; this.signalr = new SignalR(this.options.signalr_scheme + "://" + this.options.hostname + ":" + this.options.signalr_port + "/v1/signalr", [this.options.signalr_hub], $); } /* Helpers */ MojioClient.prototype.getResults = function(type, results) { var arrlength, objects, result, _i, _j, _len, _len1, _ref; objects = []; if (results instanceof Array) { arrlength = results.length; for (_i = 0, _len = results.length; _i < _len; _i++) { result = results[_i]; objects.push(new type(result)); } } else if (results.Data instanceof Array) { arrlength = results.Data.length; _ref = results.Data; for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { result = _ref[_j]; objects.push(new type(result)); } } else if (result.Data !== null) { objects.push(new type(result.Data)); } else { objects.push(new type(result)); } return objects; }; MojioClient._makeParameters = function(params) { var property, query, value; if (params.length === 0) { ''; } query = '?'; for (property in params) { value = params[property]; query += "" + property + "=" + value + "&"; } return query.slice(0, -1); }; MojioClient.prototype.getPath = function(resource, id, action, key) { if (key && id && action && id !== '' && action !== '') { return "/" + encodeURIComponent(resource) + "/" + encodeURIComponent(id) + "/" + encodeURIComponent(action) + "/" + encodeURIComponent(key); } else if (id && action && id !== '' && action !== '') { return "/" + encodeURIComponent(resource) + "/" + encodeURIComponent(id) + "/" + encodeURIComponent(action); } else if (id && id !== '') { return "/" + encodeURIComponent(resource) + "/" + encodeURIComponent(id); } else if (action && action !== '') { return "/" + encodeURIComponent(resource) + "/" + encodeURIComponent(action); } return "/" + encodeURIComponent(resource); }; MojioClient.prototype.dataByMethod = function(data, method) { switch (method.toUpperCase()) { case 'POST' || 'PUT': return this.stringify(data); default: return data; } }; MojioClient.prototype.stringify = function(data) { return JSON.stringify(data); }; MojioClient.prototype.request = function(request, callback) { var http, parts; parts = { hostname: this.options.hostname, host: this.options.hostname, port: this.options.port, scheme: this.options.scheme, path: '/' + this.options.version, method: request.method, withCredentials: false }; parts.path = '/' + this.options.version + this.getPath(request.resource, request.id, request.action, request.key); if ((request.parameters != null) && Object.keys(request.parameters).length > 0) { parts.path += MojioClient._makeParameters(request.parameters); } parts.headers = {}; if (this.getTokenId() != null) { parts.headers["MojioAPIToken"] = this.getTokenId(); } if ((request.headers != null)) { parts.headers += request.headers; } parts.headers["Content-Type"] = 'application/json'; if (request.body != null) { parts.body = request.body; } http = new Http($); return http.request(parts, callback); }; /* Authorize and Login */ MojioClient.prototype.login_resource = 'Login'; MojioClient.prototype.authorize = function(redirect_url, scope) { var parts, url; if (scope == null) { scope = 'full'; } parts = { hostname: this.options.hostname, host: this.options.hostname, port: this.options.port, scheme: this.options.scheme, path: '/OAuth2/authorize', method: 'Get', withCredentials: false }; parts.path += "?response_type=token"; parts.path += "&client_id=" + this.options.application; parts.path += "&redirect_uri=" + redirect_url; parts.path += "&scope=" + scope; parts.headers = {}; if (this.getTokenId() != null) { parts.headers["MojioAPIToken"] = this.getTokenId(); } parts.headers["Content-Type"] = 'application/json'; url = parts.scheme + "://" + parts.host + ":" + parts.port + parts.path; return window.location = url; }; MojioClient.prototype.token = function(callback) { var match, token; this.user = null; match = document.location.hash.match(/access_token=([0-9a-f-]{36})/); token = !!match && match[1]; if (!token) { return callback("token for authorization not found.", null); } else { return this.request({ method: 'GET', resource: this.login_resource, id: this.options.application, parameters: { id: token } }, (function(_this) { return function(error, result) { if (error) { return callback(error, null); } else { _this.auth_token = result; return callback(null, _this.auth_token); } }; })(this)); } }; MojioClient.prototype.unauthorize = function(redirect_url) { var parts, url; parts = { hostname: this.options.hostname, host: this.options.hostname, port: this.options.port, scheme: this.options.scheme, path: '/account/logout', method: 'Get', withCredentials: false }; parts.path += "?Guid=" + this.getTokenId(); parts.path += "&client_id=" + this.options.application; parts.path += "&redirect_uri=" + redirect_url; parts.headers = {}; if (this.getTokenId() != null) { parts.headers["MojioAPIToken"] = this.getTokenId(); } parts.headers["Content-Type"] = 'application/json'; url = parts.scheme + "://" + parts.host + ":" + parts.port + parts.path; return window.location = url; }; MojioClient.prototype._login = function(username, password, callback) { return this.request({ method: 'POST', resource: this.login_resource, id: this.options.application, parameters: { userOrEmail: username, password: password, secretKey: this.options.secret } }, callback); }; MojioClient.prototype.login = function(username, password, callback) { return this._login(username, password, (function(_this) { return function(error, result) { if ((result != null)) { _this.auth_token = result; } return callback(error, result); }; })(this)); }; MojioClient.prototype._logout = function(callback) { return this.request({ method: 'DELETE', resource: this.login_resource, id: typeof mojio_token !== "undefined" && mojio_token !== null ? mojio_token : this.getTokenId() }, callback); }; MojioClient.prototype.logout = function(callback) { return this._logout((function(_this) { return function(error, result) { _this.auth_token = null; return callback(error, result); }; })(this)); }; mojio_models = {}; App = _dereq_('../models/App'); mojio_models['App'] = App; Mojio = _dereq_('../models/Mojio'); mojio_models['Mojio'] = Mojio; Trip = _dereq_('../models/Trip'); mojio_models['Trip'] = Trip; User = _dereq_('../models/User'); mojio_models['User'] = User; Vehicle = _dereq_('../models/Vehicle'); mojio_models['Vehicle'] = Vehicle; Product = _dereq_('../models/Product'); mojio_models['Product'] = Product; Subscription = _dereq_('../models/Subscription'); mojio_models['Subscription'] = Subscription; Event = _dereq_('../models/Event'); mojio_models['Event'] = Event; Observer = _dereq_('../models/Observer'); mojio_models['Observer'] = Observer; MojioClient.prototype.model = function(type, json) { var data, object, _i, _len, _ref; if (json == null) { json = null; } if (json === null) { return mojio_models[type]; } else if ((json.Data != null) && json.Data instanceof Array) { object = json; object.Objects = new Array(); _ref = json.Data; for (_i = 0, _len = _ref.length; _i < _len; _i++) { data = _ref[_i]; object.Objects.push(new mojio_models[type](data)); } } else if ((json.Data != null)) { object = new mojio_models[type](json.Data); } else { object = new mojio_models[type](json); } object._client = this; return object; }; MojioClient.prototype.query = function(model, parameters, callback) { var property, query_criteria, value, _ref; if (parameters instanceof Object) { if (parameters.criteria instanceof Object) { query_criteria = ""; _ref = parameters.criteria; for (property in _ref) { value = _ref[property]; query_criteria += "" + property + "=" + value + ";"; } parameters.criteria = query_criteria; } return this.request({ method: 'GET', resource: model.resource(), parameters: parameters }, (function(_this) { return function(error, result) { return callback(error, _this.model(model.model(), result)); }; })(this)); } else if (typeof parameters === "string") { return this.request({ method: 'GET', resource: model.resource(), parameters: { id: parameters } }, (function(_this) { return function(error, result) { return callback(error, _this.model(model.model(), result)); }; })(this)); } else { return callback("criteria given is not in understood format, string or object.", null); } }; MojioClient.prototype.get = function(model, criteria, callback) { return this.query(model, criteria, callback); }; MojioClient.prototype.save = function(model, callback) { return this.request({ method: 'PUT', resource: model.resource(), body: model.stringify(), parameters: { id: model._id } }, callback); }; MojioClient.prototype.put = function(model, callback) { return this.save(model, callback); }; MojioClient.prototype.create = function(model, callback) { return this.request({ method: 'POST', resource: model.resource(), body: model.stringify() }, callback); }; MojioClient.prototype.post = function(model, callback) { return this.create(model, callback); }; MojioClient.prototype["delete"] = function(model, callback) { return this.request({ method: 'DELETE', resource: model.resource(), parameters: { id: model._id } }, callback); }; /* Schema */ MojioClient.prototype._schema = function(callback) { return this.request({ method: 'GET', resource: 'Schema' }, callback); }; MojioClient.prototype.schema = function(callback) { return this._schema((function(_this) { return function(error, result) { return callback(error, result); }; })(this)); }; /* Observers */ MojioClient.prototype.watch = function(observer, observer_callback, callback) { return this.request({ method: 'POST', resource: Observer.resource(), body: observer.stringify() }, (function(_this) { return function(error, result) { if (error) { return callback(error, null); } else { observer = new Observer(result); _this.signalr.subscribe(_this.options.signalr_hub, 'Subscribe', observer.id(), observer.Subject, observer_callback, function(error, result) { return callback(null, observer); }); return observer; } }; })(this)); }; MojioClient.prototype.ignore = function(observer, observer_callback, callback) { if (!observer) { callback("Observer required."); } if ((observer['subject'] != null)) { if (observer.parent === null) { return this.signalr.unsubscribe(this.options.signalr_hub, 'Unsubscribe', observer.id(), observer.subject.id(), observer_callback, callback); } else { return this.signalr.unsubscribe(this.options.signalr_hub, 'Unsubscribe', observer.id(), observer.subject.model(), observer_callback, callback); } } else { if (observer.parent === null) { return this.signalr.unsubscribe(this.options.signalr_hub, 'Unsubscribe', observer.id(), observer.SubjectId, observer_callback, callback); } else { return this.signalr.unsubscribe(this.options.signalr_hub, 'Unsubscribe', observer.id(), observer.Subject, observer_callback, callback); } } }; MojioClient.prototype.observe = function(subject, parent, observer_callback, callback) { var observer; if (parent == null) { parent = null; } if (parent === null) { observer = new Observer({ ObserverType: "Generic", Status: "Approved", Name: "Test" + Math.random(), Subject: subject.model(), SubjectId: subject.id(), "Transports": "SignalR" }); return this.request({ method: 'PUT', resource: Observer.resource(), body: observer.stringify() }, (function(_this) { return function(error, result) { if (error) { return callback(error, null); } else { observer = new Observer(result); return _this.signalr.subscribe(_this.options.signalr_hub, 'Subscribe', observer.id(), observer.SubjectId, observer_callback, function(error, result) { return callback(null, observer); }); } }; })(this)); } else { observer = new Observer({ ObserverType: "Generic", Status: null, Name: "Test" + Math.random(), Subject: subject.model(), Parent: parent.model(), ParentId: parent.id(), "Transports": "SignalR" }); return this.request({ method: 'PUT', resource: Observer.resource(), body: observer.stringify() }, (function(_this) { return function(error, result) { if (error) { return callback(error, null); } else { observer = new Observer(result); return _this.signalr.subscribe(_this.options.signalr_hub, 'Subscribe', observer.id(), subject.model(), observer_callback, function(error, result) { return callback(null, observer); }); } }; })(this)); } }; MojioClient.prototype.unobserve = function(observer, subject, parent, observer_callback, callback) { if (!observer || (subject == null)) { return callback("Observer and subject required."); } else if (parent === null) { return this.signalr.unsubscribe(this.options.signalr_hub, 'Unsubscribe', observer.id(), subject.id(), observer_callback, callback); } else { return this.signalr.unsubscribe(this.options.signalr_hub, 'Unsubscribe', observer.id(), subject.model(), observer_callback, callback); } }; /* Storage */ MojioClient.prototype.store = function(model, key, value, callback) { if (!model || !model._id) { return callback("Storage requires an object with a valid id."); } else { return this.request({ method: 'PUT', resource: model.resource(), id: model.id(), action: 'store', key: key, body: JSON.stringify(value) }, (function(_this) { return function(error, result) { if (error) { return callback(error, null); } else { return callback(null, result); } }; })(this)); } }; MojioClient.prototype.storage = function(model, key, callback) { if (!model || !model._id) { return callback("Get of storage requires an object with a valid id."); } else { return this.request({ method: 'GET', resource: model.resource(), id: model.id(), action: 'store', key: key }, (function(_this) { return function(error, result) { if (error) { return callback(error, null); } else { return callback(null, result); } }; })(this)); } }; MojioClient.prototype.unstore = function(model, key, callback) { if (!model || !model._id) { return callback("Storage requires an object with a valid id."); } else { return this.request({ method: 'DELETE', resource: model.resource(), id: model.id(), action: 'store', key: key }, (function(_this) { return function(error, result) { if (error) { return callback(error, null); } else { return callback(null, result); } }; })(this)); } }; /* Token/User */ MojioClient.prototype.getTokenId = function() { if (this.auth_token != null) { return this.auth_token._id; } return null; }; MojioClient.prototype.getUserId = function() { if (this.auth_token != null) { return this.auth_token.UserId; } return null; }; MojioClient.prototype.isLoggedIn = function() { return this.getUserId() !== null; }; MojioClient.prototype.getCurrentUser = function(callback) { if ((this.user != null)) { callback(this.user); } else if (this.isLoggedIn()) { get('users', this.getUserId()).done(function(user) { if (!(user != null)) { return; } if (this.getUserId() === this.user._id) { this.user = user; } return callback(this.user); }); } else { return false; } return true; }; return MojioClient; })(); }).call(this); },{"../models/App":4,"../models/Event":5,"../models/Mojio":6,"../models/Observer":8,"../models/Product":9,"../models/Subscription":10,"../models/Trip":11,"../models/User":12,"../models/Vehicle":13,"./HttpBrowserWrapper":1,"./SignalRBrowserWrapper":3}],3:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var SignalRBrowserWrapper, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; module.exports = SignalRBrowserWrapper = (function() { SignalRBrowserWrapper.prototype.observer_callbacks = {}; SignalRBrowserWrapper.prototype.observer_registry = function(entity) { var callback, _i, _j, _len, _len1, _ref, _ref1, _results, _results1; if (this.observer_callbacks[entity._id]) { _ref = this.observer_callbacks[entity._id]; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { callback = _ref[_i]; _results.push(callback(entity)); } return _results; } else if (this.observer_callbacks[entity.Type]) { _ref1 = this.observer_callbacks[entity.Type]; _results1 = []; for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { callback = _ref1[_j]; _results1.push(callback(entity)); } return _results1; } }; function SignalRBrowserWrapper(url, hubNames, jquery) { this.observer_registry = __bind(this.observer_registry, this); this.$ = jquery; this.url = url; this.hubs = {}; this.signalr = null; this.connectionStatus = false; } SignalRBrowserWrapper.prototype.getHub = function(which, callback) { if (this.hubs[which]) { return callback(null, this.hubs[which]); } else { if (this.signalr == null) { this.signalr = this.$.hubConnection(this.url, { useDefaultPath: false }); this.signalr.error(function(error) { console.log("Connection error" + error); return callback(error, null); }); } this.hubs[which] = this.signalr.createHubProxy(which); this.hubs[which].on("error", function(data) { return console.log("Hub '" + which + "' has error" + data); }); this.hubs[which].on("UpdateEntity", this.observer_registry); if (this.hubs[which].connection.state !== 1) { if (!this.connectionStatus) { return this.signalr.start().done((function(_this) { return function() { _this.connectionStatus = true; return _this.hubs[which].connection.start().done(function() { return callback(null, _this.hubs[which]); }); }; })(this)); } else { return this.hubs[which].connection.start().done((function(_this) { return function() { return callback(null, _this.hubs[which]); }; })(this)); } } else { return callback(null, this.hubs[which]); } } }; SignalRBrowserWrapper.prototype.setCallback = function(id, futureCallback) { if (this.observer_callbacks[id] == null) { this.observer_callbacks[id] = []; } this.observer_callbacks[id].push(futureCallback); }; SignalRBrowserWrapper.prototype.removeCallback = function(id, pastCallback) { var callback, temp, _i, _len, _ref; if (pastCallback === null) { this.observer_callbacks[id] = []; } else { temp = []; _ref = this.observer_callbacks[id]; for (_i = 0, _len = _ref.length; _i < _len; _i++) { callback = _ref[_i]; if (callback !== pastCallback) { temp.push(callback); } } this.observer_callbacks[id] = temp; } }; SignalRBrowserWrapper.prototype.subscribe = function(hubName, method, observerId, subject, futureCallback, callback) { this.setCallback(subject, futureCallback); return this.getHub(hubName, function(error, hub) { if (error != null) { return callback(error, null); } else { if (hub != null) { hub.invoke(method, observerId); } return callback(null, hub); } }); }; SignalRBrowserWrapper.prototype.unsubscribe = function(hubName, method, observerId, subject, pastCallback, callback) { this.removeCallback(subject, pastCallback); if (this.observer_callbacks[subject].length === 0) { return this.getHub(hubName, function(error, hub) { if (error != null) { return callback(error, null); } else { if (hub != null) { hub.invoke(method, observerId); } return callback(null, hub); } }); } else { return callback(null, true); } }; return SignalRBrowserWrapper; })(); }).call(this); },{}],4:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var App, MojioModel, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = App = (function(_super) { __extends(App, _super); App.prototype._schema = { "Type": "String", "Name": "String", "Description": "String", "CreationDate": "String", "Downloads": "Integer", "RedirectUris": "String", "ApplicationType": "String", "_id": "String", "_deleted": "Boolean" }; App.prototype._resource = 'Apps'; App.prototype._model = 'App'; function App(json) { App.__super__.constructor.call(this, json); } App._resource = 'Apps'; App._model = 'App'; App.resource = function() { return App._resource; }; App.model = function() { return App._model; }; return App; })(MojioModel); }).call(this); },{"./MojioModel":7}],5:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var Event, MojioModel, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = Event = (function(_super) { __extends(Event, _super); Event.prototype._schema = { "Type": "Integer", "MojioId": "String", "VehicleId": "String", "OwnerId": "String", "EventType": "Integer", "Time": "String", "Location": "Object", "TimeIsApprox": "Boolean", "BatteryVoltage": "Float", "ConnectionLost": "Boolean", "_id": "String", "_deleted": "Boolean", "Accelerometer": "Object", "TripId": "String", "Altitude": "Float", "Heading": "Float", "Distance": "Float", "FuelLevel": "Float", "FuelEfficiency": "Float", "Speed": "Float", "Acceleration": "Float", "Deceleration": "Float", "Odometer": "Float", "RPM": "Integer", "DTCs": "Array", "MilStatus": "Boolean", "Force": "Float", "MaxSpeed": "Float", "AverageSpeed": "Float", "MovingTime": "Float", "IdleTime": "Float", "StopTime": "Float", "MaxRPM": "Float", "EventTypes": "Array", "Timing": "Integer", "Name": "String", "ObserverType": "Integer", "AppId": "String", "Parent": "String", "ParentId": "String", "Subject": "String", "SubjectId": "String", "Transports": "Integer", "Status": "Integer", "Tokens": "Array" }; Event.prototype._resource = 'Events'; Event.prototype._model = 'Event'; function Event(json) { Event.__super__.constructor.call(this, json); } Event._resource = 'Events'; Event._model = 'Event'; Event.resource = function() { return Event._resource; }; Event.model = function() { return Event._model; }; return Event; })(MojioModel); }).call(this); },{"./MojioModel":7}],6:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var Mojio, MojioModel, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = Mojio = (function(_super) { __extends(Mojio, _super); Mojio.prototype._schema = { "Type": "String", "OwnerId": "String", "Name": "String", "Imei": "String", "LastContactTime": "String", "VehicleId": "String", "_id": "String", "_deleted": "Boolean" }; Mojio.prototype._resource = 'Mojios'; Mojio.prototype._model = 'Mojio'; function Mojio(json) { Mojio.__super__.constructor.call(this, json); } Mojio._resource = 'Mojios'; Mojio._model = 'Mojio'; Mojio.resource = function() { return Mojio._resource; }; Mojio.model = function() { return Mojio._model; }; return Mojio; })(MojioModel); }).call(this); },{"./MojioModel":7}],7:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var MojioModel; module.exports = MojioModel = (function() { MojioModel._resource = 'Schema'; MojioModel._model = 'Model'; function MojioModel(json) { this._client = null; this.validate(json); } MojioModel.prototype.setField = function(field, value) { this[field] = value; return this[field]; }; MojioModel.prototype.getField = function(field) { return this[field]; }; MojioModel.prototype.validate = function(json) { var field, value, _results; _results = []; for (field in json) { value = json[field]; _results.push(this.setField(field, value)); } return _results; }; MojioModel.prototype.stringify = function() { return JSON.stringify(this, this.replacer); }; MojioModel.prototype.replacer = function(key, value) { if (key === "_client" || key === "_schema" || key === "_resource" || key === "_model") { return void 0; } else { return value; } }; MojioModel.prototype.query = function(criteria, callback) { var property, query_criteria, value; if (this._client === null) { callback("No authorization set for model, use authorize(), passing in a mojio _client where login() has been called successfully.", null); return; } if (criteria instanceof Object) { if (criteria.criteria == null) { query_criteria = ""; for (property in criteria) { value = criteria[property]; query_criteria += "" + property + "=" + value + ";"; } criteria = { criteria: query_criteria }; } return this._client.request({ method: 'GET', resource: this.resource(), parameters: criteria }, (function(_this) { return function(error, result) { return callback(error, _this._client.model(_this.model(), result)); }; })(this)); } else if (typeof criteria === "string") { return this._client.request({ method: 'GET', resource: this.resource(), parameters: { id: criteria } }, (function(_this) { return function(error, result) { return callback(error, _this._client.model(_this.model(), result)); }; })(this)); } else { return callback("criteria given is not in understood format, string or object.", null); } }; MojioModel.prototype.get = function(criteria, callback) { return this.query(criteria, callback); }; MojioModel.prototype.create = function(callback) { if (this._client === null) { callback("No authorization set for model, use authorize(), passing in a mojio _client where login() has been called successfully.", null); return; } return this._client.request({ method: 'POST', resource: this.resource(), body: this.stringify() }, callback); }; MojioModel.prototype.post = function(callback) { return this.create(callback); }; MojioModel.prototype.save = function(callback) { if (this._client === null) { callback("No authorization set for model, use authorize(), passing in a mojio _client where login() has been called successfully.", null); return; } return this._client.request({ method: 'PUT', resource: this.resource(), body: this.stringify(), parameters: { id: this._id } }, callback); }; MojioModel.prototype.put = function(callback) { return this.save(callback); }; MojioModel.prototype["delete"] = function(callback) { return this._client.request({ method: 'DELETE', resource: this.resource(), parameters: { id: this._id } }, callback); }; MojioModel.prototype.observe = function(object, subject, observer_callback, callback) { if (subject == null) { subject = null; } return this._client.observe(object, subject, observer_callback, callback); }; MojioModel.prototype.unobserve = function(object, subject, observer_callback, callback) { if (subject == null) { subject = null; } return this._client.observe(object, subject, observer_callback, callback); }; MojioModel.prototype.store = function(model, key, value, callback) { return this._client.store(model, key, value, callback); }; MojioModel.prototype.storage = function(model, key, callback) { return this._client.storage(model, key, callback); }; MojioModel.prototype.unstore = function(model, key, callback) { return this._client.unstore(model, key, callback); }; MojioModel.prototype.statistic = function(expression, callback) { return callback(null, true); }; MojioModel.prototype.resource = function() { return this._resource; }; MojioModel.prototype.model = function() { return this._model; }; MojioModel.prototype.schema = function() { return this._schema; }; MojioModel.prototype.authorization = function(client) { this._client = client; return this; }; MojioModel.prototype.id = function() { return this._id; }; MojioModel.prototype.mock = function(type, withid) { var field, value, _ref; if (withid == null) { withid = false; } _ref = this.schema(); for (field in _ref) { value = _ref[field]; if (field === "Type") { this.setField(field, this.model()); } else if (field === "UserName") { this.setField(field, "Tester"); } else if (field === "Email") { this.setField(field, "test@moj.io"); } else if (field === "Password") { this.setField(field, "Password007!"); } else if (field !== '_id' || withid) { switch (value) { case "Integer": this.setField(field, "0"); break; case "Boolean": this.setField(field, false); break; case "String": this.setField(field, "test" + Math.random()); } } } return this; }; return MojioModel; })(); }).call(this); },{}],8:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var MojioModel, Observer, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = Observer = (function(_super) { __extends(Observer, _super); Observer.prototype._schema = { "Type": "String", "Name": "String", "ObserverType": "String", "EventTypes": "Array", "AppId": "String", "OwnerId": "String", "Parent": "String", "ParentId": "String", "Subject": "String", "SubjectId": "String", "Transports": "Integer", "Status": "Integer", "Tokens": "Array", "_id": "String", "_deleted": "Boolean" }; Observer.prototype._resource = 'Observers'; Observer.prototype._model = 'Observer'; function Observer(json) { Observer.__super__.constructor.call(this, json); } Observer._resource = 'Observers'; Observer._model = 'Observer'; Observer.resource = function() { return Observer._resource; }; Observer.model = function() { return Observer._model; }; return Observer; })(MojioModel); }).call(this); },{"./MojioModel":7}],9:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var MojioModel, Product, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = Product = (function(_super) { __extends(Product, _super); Product.prototype._schema = { "Type": "String", "AppId": "String", "Name": "String", "Description": "String", "Shipping": "Boolean", "Taxable": "Boolean", "Price": "Float", "Discontinued": "Boolean", "OwnerId": "String", "CreationDate": "String", "_id": "String", "_deleted": "Boolean" }; Product.prototype._resource = 'Products'; Product.prototype._model = 'Product'; function Product(json) { Product.__super__.constructor.call(this, json); } Product._resource = 'Products'; Product._model = 'Product'; Product.resource = function() { return Product._resource; }; Product.model = function() { return Product._model; }; return Product; })(MojioModel); }).call(this); },{"./MojioModel":7}],10:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var MojioModel, Subscription, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = Subscription = (function(_super) { __extends(Subscription, _super); Subscription.prototype._schema = { "Type": "Integer", "ChannelType": "Integer", "ChannelTarget": "String", "AppId": "String", "OwnerId": "String", "Event": "Integer", "EntityType": "Integer", "EntityId": "String", "Interval": "Integer", "LastMessage": "String", "_id": "String", "_deleted": "Boolean" }; Subscription.prototype._resource = 'Subscriptions'; Subscription.prototype._model = 'Subscription'; function Subscription(json) { Subscription.__super__.constructor.call(this, json); } Subscription._resource = 'Subscriptions'; Subscription._model = 'Subscription'; Subscription.resource = function() { return Subscription._resource; }; Subscription.model = function() { return Subscription._model; }; return Subscription; })(MojioModel); }).call(this); },{"./MojioModel":7}],11:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var MojioModel, Trip, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = Trip = (function(_super) { __extends(Trip, _super); Trip.prototype._schema = { "Type": "String", "MojioId": "String", "VehicleId": "String", "StartTime": "String", "LastUpdatedTime": "String", "EndTime": "String", "MaxSpeed": "Float", "MaxAcceleration": "Float", "MaxDeceleration": "Float", "MaxRPM": "Integer", "FuelLevel": "Float", "FuelEfficiency": "Float", "Distance": "Float", "MovingTime": "Float", "IdleTime": "Float", "StopTime": "Float", "StartLocation": "Object", "LastKnownLocation": "Object", "EndLocation": "Object", "StartAddress": "Object", "EndAddress": "Object", "ForcefullyEnded": "Boolean", "StartMilage": "Float", "EndMilage": "Float", "_id": "String", "_deleted": "Boolean" }; Trip.prototype._resource = 'Trips'; Trip.prototype._model = 'Trip'; function Trip(json) { Trip.__super__.constructor.call(this, json); } Trip._resource = 'Trips'; Trip._model = 'Trip'; Trip.resource = function() { return Trip._resource; }; Trip.model = function() { return Trip._model; }; return Trip; })(MojioModel); }).call(this); },{"./MojioModel":7}],12:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var MojioModel, User, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = User = (function(_super) { __extends(User, _super); User.prototype._schema = { "Type": "String", "Name": "String", "UserName": "String", "FirstName": "String", "LastName": "String", "Email": "String", "UserCount": "Integer", "Credits": "Integer", "CreationDate": "String", "LastActivityDate": "String", "LastLoginDate": "String", "_id": "String", "_deleted": "Boolean" }; User.prototype._resource = 'Users'; User.prototype._model = 'User'; function User(json) { User.__super__.constructor.call(this, json); } User._resource = 'Users'; User._model = 'User'; User.resource = function() { return User._resource; }; User.model = function() { return User._model; }; return User; })(MojioModel); }).call(this); },{"./MojioModel":7}],13:[function(_dereq_,module,exports){ // Generated by CoffeeScript 1.8.0 (function() { var MojioModel, Vehicle, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; MojioModel = _dereq_('./MojioModel'); module.exports = Vehicle = (function(_super) { __extends(Vehicle, _super); Vehicle.prototype._schema = { "Type": "String", "OwnerId": "String", "MojioId": "String", "Name": "String", "VIN": "String", "LicensePlate": "String", "IgnitionOn": "Boolean", "LastTripEvent": "String", "LastLocationTime": "String", "LastLocation": "Object", "LastSpeed": "Float", "FuelLevel": "Float", "LastFuelEfficiency": "Float", "CurrentTrip": "String", "LastTrip": "String", "LastContactTime": "String", "MilStatus": "Boolean", "FaultsDetected": "Boolean", "Viewers": "Array", "_id": "String", "_deleted": "Boolean" }; Vehicle.prototype._resource = 'Vehicles'; Vehicle.prototype._model = 'Vehicle'; function Vehicle(json) { Vehicle.__super__.constructor.call(this, json); } Vehicle._resource = 'Vehicles'; Vehicle._model = 'Vehicle'; Vehicle.resource = function() { return Vehicle._resource; }; Vehicle.model = function() { return Vehicle._model; }; return Vehicle; })(MojioModel); }).call(this); },{"./MojioModel":7}]},{},[2]) (2) });