Skip to content

Instantly share code, notes, and snippets.

@dmmfll
Created December 15, 2016 21:54
Show Gist options
  • Save dmmfll/a57c4f5ea5c321e10a41e976e233cd56 to your computer and use it in GitHub Desktop.
Save dmmfll/a57c4f5ea5c321e10a41e976e233cd56 to your computer and use it in GitHub Desktop.
'use strict'
var fs = require('fs'),
Task = require('data.task'),
util = require('util'),
{
curry,
map,
sequence,
toString,
unnest,
} = require('ramda');
// readDirectories :: String -> Task (Array String)
function readDirectories(path){
return new Task(function(reject, resolve){
fs.readdir(path, function(err, filenames){
err == null ? resolve(filenames) : reject(err);
});
});
};
// readFile :: String -> Task String
function readFile(directory, file){
return new Task(function(reject, resolve){
fs.readFile(
directory + file,
'utf8',
function(err, data){
err == null ? resolve(data) : reject(err);
}
)
})
};
// parseFile :: String -> { name :: String
// , age :: Number }
function parseFile(data){
data = data.trim();
var tokens = data.split(',');
return {name: tokens[0], age: tokens[1]}
};
var dirname = './sample_data/',
// dirs :: Task (Array String)
dirs = readDirectories(dirname),
// files :: Task (Array (Task String))
cReadFile = curry(readFile),
files = map(map(cReadFile(dirname)), dirs),
// sequenced :: Task (Task (Array String))
sequenced = map(sequence(Task.of), files),
// unnested :: Task (Array String)
unnested = unnest(sequenced),
// parsed :: Task (Array { name :: String
// , age :: Number }
parsed = map(map(parseFile), unnested);
parsed.fork(
function(err){
process.stderr.write(err.message);
process.exit(1);
},
function(data){
process.stdout.write(toString(data));
process.exit(0);
}
);
module.exports = {
example: function example(){
return true
}
}
var test = require('tape').test,
example = require('./index.js');
test('add: add two numbers correctly', function(t){
var actual = 3,
expected = actual;
t.equal(actual, expected);
t.end();
});
test('example: sample exported function returns true', function(t){
var actual = example.example(),
expected = true;
t.equal(actual, expected);
t.end();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment