aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorutvk <utvk@users.noreply.github.com>2014-05-08 23:49:12 +0200
committerutvk <utvk@users.noreply.github.com>2014-05-08 23:49:12 +0200
commitb6b812da1512678746dd0e2c797ae9563d650cbf (patch)
tree3db8f1214fa4689f673f5abfb2df097530043e9f /lib
parentd45c808d56608f3ce37260914f52c75e50526764 (diff)
initial version
Diffstat (limited to 'lib')
-rw-r--r--lib/etatsbasen.js170
1 files changed, 170 insertions, 0 deletions
diff --git a/lib/etatsbasen.js b/lib/etatsbasen.js
new file mode 100644
index 0000000..5be404a
--- /dev/null
+++ b/lib/etatsbasen.js
@@ -0,0 +1,170 @@
+'use strict';
+/*
+ * etatsbasen
+ * user/repo
+ *
+ * Copyright (c) 2014 gorm
+ * Licensed under the MIT license.
+ */
+var csv = require('csv');
+var stringify = require('csv-stringify');
+var fs = require('fs');
+
+function lookForDataFile(filename) {
+ if (fs.existsSync(filename)) {
+ return filename;
+ } else {
+ return false;
+ }
+}
+
+function emailIsInvalid(email) {
+ var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+ return !re.test(email);
+}
+
+function filter(csvdata, includeOrgstructIds) {
+ var headernameToIndex = {};
+
+ if (includeOrgstructIds && !Array.isArray(includeOrgstructIds)) {
+ throw new TypeError('`includedOrgstructIds` should be an array');
+ }
+
+ csvdata = csvdata.filter(function(item, i) {
+ // make mapping between headerName to index
+ if (0 === i) {
+ item.forEach(function(item, i) {
+ headernameToIndex[item] = i;
+ });
+ // always include header
+ return true;
+ } else {
+ var email = item[headernameToIndex.email];
+ if (emailIsInvalid(email)) {
+ return false;
+ }
+
+ return (function() {
+ var i;
+
+ if (includeOrgstructIds.length) {
+ for (i = 0; i < includeOrgstructIds.length; i++) {
+ //console.log(i + " " + includeOrgstructIds[i] + " " + item[headernameToIndex.orgstructid]);
+ if (parseInt(includeOrgstructIds[i]) ===
+ parseInt(item[headernameToIndex.orgstructid])) {
+ return true;
+ }
+ }
+ return false;
+ } else {
+ return true;
+ }
+ }());
+ }
+ });
+
+ return csvdata;
+}
+
+function renameHeader(data) {
+ if (! data) {
+ throw new TypeError('Missing `data` argument');
+ }
+
+ data[0][0] = 'id';
+ data[0][1] = 'request_email';
+ data[0][2] = 'name';
+ data[0][3] = 'name.nn_NO';
+ data[0][4] = 'name.en';
+
+ return data;
+}
+
+function removeColumns(data) {
+ var columns = ['url_nb', 'url_en', 'kommunenummer',
+ 'orgid', 'orgstructid', 'parentid'];
+
+ columns.forEach(function(name) {
+ var toRemove = -1;
+ data.forEach(function(item, i) {
+ if (0 === i) {
+ toRemove = item.indexOf(name);
+ }
+
+ if (toRemove >= 0) {
+ item.splice(toRemove, 1);
+ }
+ });
+ });
+
+ return data;
+}
+
+function addTags(data) {
+ var orgstructidIndex;
+ data.forEach(function(item, i) {
+ if (0 === i) {
+ item.push('tag_string');
+ orgstructidIndex = item.indexOf('orgstructid');
+ } else {
+ item.push(item[orgstructidIndex]);
+ }
+ });
+ return data;
+}
+
+function addURL(data) {
+ // create new column
+ var urlenIndex=0;
+ var urlnoIndex=0;
+
+ data.forEach(function(item, i) {
+ if (0 === i) {
+ item.push('home_page');
+ urlenIndex = item.indexOf('url_en');
+ urlnoIndex = item.indexOf('url_nb');
+ } else {
+ item.push(item[urlnoIndex] || item[urlenIndex]);
+ }
+ });
+
+ return data;
+}
+
+function print(data) {
+ stringify(data, function(err, output) {
+ if (err) {
+ console.error(err);
+ return false;
+ }
+ // comment first line
+ console.log('#'+output);
+ });
+}
+
+/** Will output a CSV with all organizations to stdout */
+exports.printCSV = function(cb, options) {
+ var filename = lookForDataFile(options.filename);
+
+ if (false === filename) {
+ cb('Can\'t find file `' + options.filename + '`');
+ return false;
+ }
+
+ csv().from.path(filename, { comment: '#'}).to.array( function(data) {
+ print(
+ removeColumns(
+ addURL(
+ addTags(
+ renameHeader(
+ filter(data, options.categories)
+ )
+ )
+ )
+ )
+ );
+ cb();
+ } );
+
+ return true;
+};