@oat-sa/tao-test-runner-qti
Version:
TAO Test Runner QTI implementation
137 lines (129 loc) • 4.5 kB
JavaScript
define(['lodash', 'core/store'], function (_, store) { 'use strict';
_ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;
store = store && Object.prototype.hasOwnProperty.call(store, 'default') ? store['default'] : store;
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2019 (original work) Open Assessment Technologies SA ;
*/
var defaultConfig = {
responseStoreName: 'response',
correctResponseStoreName: 'correct-response'
};
/**
* @param {Object} options
* @param {string} options.responseStoreName
* @param {string} options.correctResponseStoreName
*/
function responseStoreFactory(options) {
var config = _.defaults(options || {}, defaultConfig);
/**
* @returns {Promise}
*/
var getResponseStore = function getResponseStore() {
return store(config.responseStoreName, store.backends.memory);
};
/**
* @returns {Promise}
*/
var getCorrectResponseStore = function getCorrectResponseStore() {
return store(config.correctResponseStoreName, store.backends.memory);
};
return {
/**
* @returns {Promise}
*/
getResponses: function getResponses() {
return getResponseStore().then(function (storage) {
return storage.getItems();
});
},
/**
* @returns {Promise}
*/
getCorrectResponses: function getCorrectResponses() {
return getCorrectResponseStore().then(function (storage) {
return storage.getItems();
});
},
/**
* @param {string} key
* @returns {Promise}
*/
getResponse: function getResponse(key) {
return getResponseStore().then(function (storage) {
return storage.getItem(key);
});
},
/**
* @param {string} key
* @returns {Promise}
*/
getCorrectResponse: function getCorrectResponse(key) {
return getCorrectResponseStore().then(function (storage) {
return storage.getItem(key).then(function (result) {
return new Promise(function (resolve) {
if (typeof result === 'undefined') {
return resolve([]);
}
return resolve(result);
});
});
});
},
/**
* @param {string} key
* @param {string} value
* @returns {Promise}
*/
addResponse: function addResponse(key, value) {
return getResponseStore().then(function (storage) {
return storage.setItem(key, value).then(function (updated) {
return updated;
});
});
},
/**
* @param {string} key
* @param {string[]} value
* @returns {Promise}
*/
addCorrectResponse: function addCorrectResponse(key, value) {
return getCorrectResponseStore().then(function (storage) {
return storage.setItem(key, value).then(function (updated) {
return updated;
});
});
},
/**
* @returns {Promise}
*/
clearResponses: function clearResponses() {
return getResponseStore().then(function (storage) {
return storage.clear();
});
},
/**
* @returns {Promise}
*/
clearCorrectResponses: function clearCorrectResponses() {
return getCorrectResponseStore().then(function (storage) {
return storage.clear();
});
}
};
}
return responseStoreFactory;
});