Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions lab-nathan/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
**/node_modules/*
**/vendor/*
**/*.min.js
**/coverage/*
**/build/*
**/assets/*
23 changes: 23 additions & 0 deletions lab-nathan/.eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"rules": {
"no-console": "off",
"indent": [ "error", 2 ],
"quotes": [ "error", "single" ],
"semi": ["error", "always"],
"linebreak-style": [ "error", "unix" ]
},
"env": {
"es6": true,
"node": true,
"mocha": true,
"jasmine": true
},
"parserOptions": {
"ecmaFeatures": {
"modules": true,
"experimentalObjectRestSpread": true,
"impliedStrict": true
}
},
"extends": "eslint:recommended"
}
136 changes: 136 additions & 0 deletions lab-nathan/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# Created by https://www.gitignore.io/api/osx,vim,node,macos,windows

### macOS ###
*.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Typescript v1 declaration files
typings/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env


### OSX ###

# Icon must end with two \r

# Thumbnails

# Files that might appear in the root of a volume

# Directories potentially created on remote AFP share

### Vim ###
# swap
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]
# session
Session.vim
# temporary
.netrwhist
*~
# auto-generated tag files
tags

### Windows ###
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msm
*.msp

# Windows shortcuts
*.lnk

# End of https://www.gitignore.io/api/osx,vim,node,macos,windows
5 changes: 5 additions & 0 deletions lab-nathan/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# get-bytes

get-bytes is a node module which returns the specified number of bytes from the beginning of each input file.

`done` is a function provided by the mocha testing framework, which is passed as a parameter of the `it` function's callback. It is invoked after asynchronous processing is complete and the result of the test has been computed.
9 changes: 9 additions & 0 deletions lab-nathan/assets/one.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque viverra vitae tellus eget tempus. Fusce tincidunt eros orci, id efficitur ante accumsan vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis varius pulvinar libero, sit amet ultrices diam maximus at. Suspendisse lobortis rhoncus purus, ac efficitur est laoreet a. Aliquam in orci at ex hendrerit porttitor. Praesent aliquet semper dolor, in fermentum justo posuere sed. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas urna turpis, porttitor id magna eget, luctus volutpat sapien. Proin ultrices lectus id posuere maximus. Nullam sapien risus, euismod ut sollicitudin ut, commodo non magna. Mauris fermentum mi nec blandit semper. Donec id tincidunt tortor. Pellentesque a leo cursus ipsum tempor aliquam.

In malesuada, orci at rhoncus consectetur, nibh leo scelerisque libero, non eleifend nulla libero ac justo. Ut placerat, arcu aliquam interdum efficitur, neque odio lacinia lacus, et varius lorem elit non eros. Proin dictum condimentum metus, eget accumsan nulla fermentum vitae. Fusce faucibus diam eu metus condimentum aliquet. Maecenas eros purus, tincidunt eu nisl ullamcorper, congue pharetra enim. Sed lorem leo, vehicula non orci id, convallis gravida magna. Nunc in ligula id velit pellentesque hendrerit. Sed lacinia risus a est volutpat auctor. Praesent venenatis metus sapien, ut iaculis ligula condimentum quis.

Fusce tincidunt nibh sit amet pharetra finibus. Praesent nec elit sem. Curabitur quis laoreet diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean sodales ornare est quis euismod. Integer vitae tristique augue, eu porta lorem. Nullam varius mauris in accumsan mollis. Nam nec justo tellus. Nulla eleifend augue ac est efficitur, eu laoreet lorem pulvinar. Morbi massa tortor, rutrum vel lacinia in, feugiat ac est. Vestibulum non sem vehicula, pretium risus sit amet, suscipit arcu. Nulla vitae felis ut metus tincidunt molestie.

Mauris egestas tincidunt nulla. Quisque convallis, quam a convallis consectetur, tortor lectus malesuada dui, scelerisque sodales lectus urna vitae dui. Nulla feugiat posuere tempor. Fusce ut felis libero. Quisque ac arcu lacinia, finibus magna id, faucibus elit. Mauris gravida tellus in erat tempor rhoncus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas tristique ex sit amet augue feugiat aliquet. Aenean eget diam eget leo vehicula convallis eu sed urna. Vestibulum ut urna tincidunt, suscipit magna at, accumsan mauris.

Pellentesque vel fermentum lacus. Quisque maximus tincidunt convallis. Quisque a nunc id risus volutpat pretium. Quisque vel mauris semper, semper lacus ac, finibus enim. Morbi arcu justo, gravida non dolor et, pretium efficitur sem. In bibendum nec tellus eu sollicitudin. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas malesuada molestie felis, id dictum sem eleifend cursus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi lacus nibh, volutpat ac mauris pellentesque, malesuada accumsan leo. Maecenas ut nunc ut lorem bibendum cursus.
1 change: 1 addition & 0 deletions lab-nathan/assets/three.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Quisque viverra vitae tellus eget tempus. Fusce tincidunt eros orci, id efficitur ante accumsan vel. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis varius pulvinar libero, sit amet ultrices diam maximus at. Suspendisse lobortis rhoncus purus, ac efficitur est laoreet a. Aliquam in orci at ex hendrerit porttitor. Praesent aliquet semper dolor, in fermentum justo posuere sed. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas urna turpis, porttitor id magna eget, luctus volutpat sapien. Proin ultrices lectus id posuere maximus. Nullam sapien risus, euismod ut sollicitudin ut, commodo non magna. Mauris fermentum mi nec blandit semper. Donec id tincidunt tortor. Pellentesque a leo cursus ipsum tempor aliquam.
3 changes: 3 additions & 0 deletions lab-nathan/assets/two.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
In malesuada, orci at rhoncus consectetur, nibh leo scelerisque libero, non eleifend nulla libero ac justo. Ut placerat, arcu aliquam interdum efficitur, neque odio lacinia lacus, et varius lorem elit non eros. Proin dictum condimentum metus, eget accumsan nulla fermentum vitae. Fusce faucibus diam eu metus condimentum aliquet. Maecenas eros purus, tincidunt eu nisl ullamcorper, congue pharetra enim. Sed lorem leo, vehicula non orci id, convallis gravida magna. Nunc in ligula id velit pellentesque hendrerit. Sed lacinia risus a est volutpat auctor. Praesent venenatis metus sapien, ut iaculis ligula condimentum quis.

Fusce tincidunt nibh sit amet pharetra finibus. Praesent nec elit sem. Curabitur quis laoreet diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean sodales ornare est quis euismod. Integer vitae tristique augue, eu porta lorem. Nullam varius mauris in accumsan mollis. Nam nec justo tellus. Nulla eleifend augue ac est efficitur, eu laoreet lorem pulvinar. Morbi massa tortor, rutrum vel lacinia in, feugiat ac est. Vestibulum non sem vehicula, pretium risus sit amet, suscipit arcu. Nulla vitae felis ut metus tincidunt molestie.
9 changes: 9 additions & 0 deletions lab-nathan/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict';

const getBytes = require('./lib/get-bytes.js');

let files = [`${__dirname}/assets/one.txt`, `${__dirname}/assets/two.txt`, `${__dirname}/assets/three.txt`];

getBytes(files, 8, function(err, data) {
data.forEach(d => console.log(d));
});
19 changes: 19 additions & 0 deletions lab-nathan/lib/get-bytes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
'use strict';

const fs = require('fs');

let getBytes = function(filePaths, byteCount, callback, buffer = []) {
if (filePaths.length === 0) return callback(null, buffer);

let filePath = filePaths.shift();

fs.readFile(filePath, function(err, data) {
if (err) callback(err);

buffer.push(data.toString('hex', 0, byteCount));

getBytes(filePaths, byteCount, callback, buffer);
});
};

module.exports = getBytes;
21 changes: 21 additions & 0 deletions lab-nathan/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "lab-nathan",
"version": "1.0.0",
"description": "",
"main": "index.js",
"directories": {
"test": "test"
},
"scripts": {
"start": "node index.js",
"test": "mocha",
"lint": "eslint ."
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"chai": "^4.1.0",
"mocha": "^3.4.2"
}
}
22 changes: 22 additions & 0 deletions lab-nathan/test/get-bytes-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
'use strict';

const getBytes = require('../lib/get-bytes.js');
const expect = require('chai').expect;

describe('get-bytes', function() {
it('should have a valid input path', function(done) {
getBytes([`${__dirname}/../assets/fake.txt`], 8, function(err) {
expect(err).to.be.an('error').with.property('code', 'ENOENT');
done();
});
});

it('should return the first 8 bytes of each asset in order', function(done) {
let files = [`${__dirname}/../assets/one.txt`, `${__dirname}/../assets/two.txt`, `${__dirname}/../assets/three.txt`];
getBytes(files, 8, function(err, data) {
expect(data).to.deep.equal(['4c6f72656d206970', '496e206d616c6573', '5175697371756520']);
done();
});
});
});