Commit d5e177e4 authored by Tristan Cavelier's avatar Tristan Cavelier

replicatestorage.js docstring added

parent 863c7420
...@@ -49,6 +49,8 @@ ...@@ -49,6 +49,8 @@
'Text': 'Text' 'Text': 'Text'
}; };
////////////////////////////////////////////////////////////
// replicate storage tools
/** /**
* Returns the number with the lowest value * Returns the number with the lowest value
...@@ -85,6 +87,19 @@ ...@@ -85,6 +87,19 @@
// initialize actions // initialize actions
/**
* Comparison function to compare element as date. This function can be used
* in the Array.prototype.sort method.
*
* 0 = 'Thu Jan 01 1970 01:00:00 GMT+0100 (CET)'
* '2012' < 2013
* 'oesrucah' = 'srcheasu'
* 'abrebcu' < 0
*
* @param {Any} a The first value
* @param {Any} b The second value
* @return {Number} if a < b: -1, if a > b: 1, else 0
*/
actions.ld = function compareAsDate(a, b) { actions.ld = function compareAsDate(a, b) {
a = new Date(a); a = new Date(a);
b = new Date(b); b = new Date(b);
...@@ -97,6 +112,17 @@ ...@@ -97,6 +112,17 @@
}; };
actions['earliest date'] = actions.ed; actions['earliest date'] = actions.ed;
/**
* Comparison function to compare elements as numbers. This function can be
* used in the Array.prototype.sort method.
*
* -1 < 2
* 'a' < 0
*
* @param {Any} a The first value
* @param {Any} b The second value
* @return {Number} if a < b: -1, if a > b: 1, else 0
*/
actions.gn = function compareAsNumber(a, b) { actions.gn = function compareAsNumber(a, b) {
a = parseFloat(a); a = parseFloat(a);
b = parseFloat(b); b = parseFloat(b);
...@@ -124,6 +150,19 @@ ...@@ -124,6 +150,19 @@
}; };
actions['lowest number'] = actions.ln; actions['lowest number'] = actions.ln;
/**
* Comparision function to compare elements as strings. This function can be
* used in the Array.prototype.sort method.
*
* 'abc' < 'def'
* ["abcd"] = 'abcd'
* ["abc", "def"] = 'abc, def'
* ["abc", {"content": "def"}] = 'abc, def'
*
* @param {Any} a The first value
* @param {Any} b The second value
* @return {Number} if a < b: -1, if a > b: 1, else 0
*/
actions.afs = function compareAsString(a, b) { actions.afs = function compareAsString(a, b) {
if (Array.isArray(a)) { if (Array.isArray(a)) {
a = metadataArrayToContentArray(a).join(', '); a = metadataArrayToContentArray(a).join(', ');
...@@ -147,6 +186,17 @@ ...@@ -147,6 +186,17 @@
return -actions.afs(a, b); return -actions.afs(a, b);
}; };
/**
* Comparision function to compare elements as list length. This function can
* be used in the Array.prototype.sort method.
*
* ['abc'] = 'def'
* ["zzz"] < ["a", "a"]
*
* @param {Any} a The first value
* @param {Any} b The second value
* @return {Number} if a < b: -1, if a > b: 1, else 0
*/
actions.ll = function compareLengthAsList(a, b) { actions.ll = function compareLengthAsList(a, b) {
if (!Array.isArray(a)) { if (!Array.isArray(a)) {
a = 1; a = 1;
...@@ -182,6 +232,19 @@ ...@@ -182,6 +232,19 @@
}; };
actions['longest string'] = actions.ls; actions['longest string'] = actions.ls;
/**
* Comparision function to compare elements as string length. This function
* can be used in the Array.prototype.sort method.
*
* ['abcdef'] < 'def'
* 'abc' = 'def'
* 'abcdef' > 'def'
*
* @param {Any} a The first value
* @param {Any} b The second value
* @return {Number} if a < b: -1, if a > b: 1, else 0
*/
actions.ss = function (a, b) { actions.ss = function (a, b) {
return -actions.ls(a, b); return -actions.ls(a, b);
}; };
...@@ -214,6 +277,8 @@ ...@@ -214,6 +277,8 @@
* Comparison function to compare version string. This function can be used * Comparison function to compare version string. This function can be used
* in the Array.prototype.sort method. * in the Array.prototype.sort method.
* *
* '1.9.3a' < '1.10.0' < '1.10.0a'
*
* @param {String} a The first value to compare * @param {String} a The first value to compare
* @param {String} b The second value to compare * @param {String} b The second value to compare
* @return {Number} if a < b: -1, if a > b: 1, else 0 * @return {Number} if a < b: -1, if a > b: 1, else 0
...@@ -246,6 +311,12 @@ ...@@ -246,6 +311,12 @@
}; };
actions['lowest version'] = actions.lv; actions['lowest version'] = actions.lv;
/**
* Returns the content type set in the metadata value.
*
* @param {String,Number,Array,Object} meta The metadata value
* @return {String} The content type or undefined
*/
function getMetadataContentType(meta) { function getMetadataContentType(meta) {
var i, res; var i, res;
if (!Array.isArray(meta)) { if (!Array.isArray(meta)) {
...@@ -264,6 +335,21 @@ ...@@ -264,6 +335,21 @@
} }
} }
/**
* Comparison function to find content type. This function can be used in the
* Array.prototype.sort method.
*
* 'a' = 'bc'
* 'aeiouy' < 'text/plain'
* 'text/plain;charset=utf-8' = 'text/html'
* ['a'] < 'text/html'
* ['a', 'text/plain;charset=utf-8'] = 'text/html'
* ['a', {"content": "text/plain;charset=utf-8"}] = 'text/html'
*
* @param {String} a The first value to compare
* @param {String} b The second value to compare
* @return {Number} if a < b: -1, if a > b: 1, else 0
*/
actions.contentType = function (a, b) { actions.contentType = function (a, b) {
a = getMetadataContentType(a); a = getMetadataContentType(a);
b = getMetadataContentType(b); b = getMetadataContentType(b);
...@@ -280,6 +366,12 @@ ...@@ -280,6 +366,12 @@
}; };
actions['contains content type'] = actions.contentType; actions['contains content type'] = actions.contentType;
/**
* Returns the DCMIType set in the metadata value.
*
* @param {String,Number,Array,Object} meta The metadata value
* @return {String} The DCMIType or undefined
*/
function getMetadataDCMIType(meta) { function getMetadataDCMIType(meta) {
var i, res; var i, res;
if (!Array.isArray(meta)) { if (!Array.isArray(meta)) {
...@@ -297,6 +389,21 @@ ...@@ -297,6 +389,21 @@
} }
} }
/**
* Comparison function to find DCMIType. This function can be used in the
* Array.prototype.sort method.
*
* 'a' = 'bc'
* 'aeiouy' < 'text/plain'
* 'text/plain;charset=utf-8' = 'text/html'
* ['a'] < 'text/html'
* ['a', 'text/plain;charset=utf-8'] = 'text/html'
* ['a', {"content": "text/plain;charset=utf-8"}] = 'text/html'
*
* @param {String} a The first value to compare
* @param {String} b The second value to compare
* @return {Number} if a < b: -1, if a > b: 1, else 0
*/
actions.DCMIType = function (a, b) { actions.DCMIType = function (a, b) {
a = getMetadataDCMIType(a); a = getMetadataDCMIType(a);
b = getMetadataDCMIType(b); b = getMetadataDCMIType(b);
...@@ -313,6 +420,17 @@ ...@@ -313,6 +420,17 @@
}; };
actions['contains DCMIType vocabulary'] = actions.DCMIType; actions['contains DCMIType vocabulary'] = actions.DCMIType;
/**
* Find the winner documents according to their metadata values.
*
* @param {Array} documents A list of couples [document, score]
* @param {String,Number,Array,Object} metadata The metadata key to use in
* the document
* @param {String} action The comparison action to use, if unknown then
* do nothing
* @param {Number} coef The number of point to give if a document wins
* @return {Array} The original documents list with a different score
*/
function runDocumentMetadataRound(documents, metadata, action, coef) { function runDocumentMetadataRound(documents, metadata, action, coef) {
var i, res, winners = [0]; var i, res, winners = [0];
for (i = 1; i < documents.length; i += 1) { for (i = 1; i < documents.length; i += 1) {
...@@ -329,6 +447,15 @@ ...@@ -329,6 +447,15 @@
return documents; return documents;
} }
/**
* Converts a document list into a list of couples [document, score (0)] and
* runs some actions that will increase their score. The winner is the
* document with the greatest score.
*
* @param {Array} documents A list of document metadata
* @param {Object} conditions A dict that contains action on metadata key
* @return {Array} The original documents list with scores
*/
function runDocumentMetadataBattle(documents, conditions) { function runDocumentMetadataBattle(documents, conditions) {
var i, coef, action; var i, coef, action;
for (i = 0; i < documents.length; i += 1) { for (i = 0; i < documents.length; i += 1) {
...@@ -354,6 +481,14 @@ ...@@ -354,6 +481,14 @@
return documents; return documents;
} }
////////////////////////////////////////////////////////////
// Storage
/**
* A Storage for data duplication and storage synchronisation.
*
* @class ReplicateStorage
*/
function replicateStorage(spec, my) { function replicateStorage(spec, my) {
var error, priv = {}, that = my.basicStorage(spec, my); var error, priv = {}, that = my.basicStorage(spec, my);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment