[model/dataset][m]: introduce Model module containing basic Dataset and TabularData objects (plus tests).
* NB: current Dataset is basic one running off local data.
This commit is contained in:
43
src/dataset.js
Normal file
43
src/dataset.js
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
this.RECLINE = this.RECLINE || {};
|
||||||
|
|
||||||
|
RECLINE.Model = function ($, _, Backbone) {
|
||||||
|
var my = {};
|
||||||
|
|
||||||
|
// A Dataset model.
|
||||||
|
my.Dataset = Backbone.Model.extend({
|
||||||
|
initialize: function(data, rawTabularData) {
|
||||||
|
this.tabularData = new my.TabularData(rawTabularData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get TabularData object associated with this Dataset
|
||||||
|
//
|
||||||
|
// async (as may involve getting data from the server) implementing standard promise API
|
||||||
|
, getTabularData: function() {
|
||||||
|
var dfd = $.Deferred();
|
||||||
|
dfd.resolve(this.tabularData);
|
||||||
|
return dfd.promise();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// TabularData model
|
||||||
|
my.TabularData = Backbone.Model.extend({
|
||||||
|
getLength: function() {
|
||||||
|
return this.get('rows').length;
|
||||||
|
}
|
||||||
|
, getRows: function(numRows, start) {
|
||||||
|
if (start === undefined) {
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
if (numRows === undefined) {
|
||||||
|
numRows = 10;
|
||||||
|
}
|
||||||
|
var dfd = $.Deferred();
|
||||||
|
var results = this.get('rows').slice(start, start+numRows);
|
||||||
|
dfd.resolve(results);
|
||||||
|
return dfd.promise();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return my;
|
||||||
|
}(this.jQuery, this._, this.Backbone);
|
||||||
|
|
||||||
39
test/dataset.test.js
Normal file
39
test/dataset.test.js
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
(function ($) {
|
||||||
|
|
||||||
|
module("Dataset");
|
||||||
|
|
||||||
|
test('new Dataset', function () {
|
||||||
|
var metadata = {
|
||||||
|
title: 'My Test Dataset'
|
||||||
|
, name: '1-my-test-dataset'
|
||||||
|
, id: 1
|
||||||
|
};
|
||||||
|
var indata = {
|
||||||
|
headers: ['x', 'y', 'z']
|
||||||
|
, rows: [
|
||||||
|
{x: 1, y: 2, z: 3}
|
||||||
|
, {x: 2, y: 4, z: 6}
|
||||||
|
, {x: 3, y: 6, z: 9}
|
||||||
|
, {x: 4, y: 8, z: 12}
|
||||||
|
, {x: 5, y: 10, z: 15}
|
||||||
|
, {x: 6, y: 12, z: 18}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
var dataset = new RECLINE.Model.Dataset(metadata, indata);
|
||||||
|
equal(dataset.get('name'), metadata.name);
|
||||||
|
expect(6);
|
||||||
|
setTimeout(2);
|
||||||
|
dataset.getTabularData().then(function(tabularData) {
|
||||||
|
equal(tabularData.get('headers'), indata.headers);
|
||||||
|
equal(tabularData.getLength(), 6);
|
||||||
|
tabularData.getRows(4, 2).then(function(rows) {
|
||||||
|
equal(rows[0], indata.rows[2]);
|
||||||
|
});
|
||||||
|
tabularData.getRows().then(function(rows) {
|
||||||
|
equal(rows.length, Math.min(10, indata.rows.length));
|
||||||
|
equal(rows[0], indata.rows[0]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
})(this.jQuery);
|
||||||
@@ -3,9 +3,14 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Qunit Tests</title>
|
<title>Qunit Tests</title>
|
||||||
<script src="../src/deps-min.js"></script>
|
|
||||||
<link rel="stylesheet" href="qunit/qunit.css" type="text/css" media="screen" />
|
<link rel="stylesheet" href="qunit/qunit.css" type="text/css" media="screen" />
|
||||||
|
|
||||||
|
<script src="../src/deps-min.js"></script>
|
||||||
|
<script src="../vendor/backbone/0.5.1/backbone.js"></script>
|
||||||
<script type="text/javascript" src="qunit/qunit.js"></script>
|
<script type="text/javascript" src="qunit/qunit.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../src/dataset.js"></script>
|
||||||
|
<script type="text/javascript" src="dataset.test.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 id="qunit-header">Qunit Tests</h1>
|
<h1 id="qunit-header">Qunit Tests</h1>
|
||||||
|
|||||||
Reference in New Issue
Block a user