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
5 changes: 5 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
**/node_modules/*
**/vendor/*
**/*.min.js
**/coverage/*
**/build/*
21 changes: 21 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"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
},
"ecmaFeatures": {
"modules": true,
"experimentalObjectRestSpread": true,
"impliedStrict": true
},
"extends": "eslint:recommended"
}
136 changes: 136 additions & 0 deletions .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
46 changes: 3 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,45 +1,5 @@
![CF](https://camo.githubusercontent.com/70edab54bba80edb7493cad3135e9606781cbb6b/687474703a2f2f692e696d6775722e636f6d2f377635415363382e706e67) 04: Parallel File Processing
===
# Callbacks and File System I/O

## Submission Instructions
* fork this repository & create a new branch for your work
* write all of your code in a directory named `lab-` + `<your name>` **e.g.** `lab-susan`
* push to your repository
* submit a pull request to this repository
* submit a link to your PR in canvas
* write a question and observation on canvas
This app demonstrates using Node Module, File System, to read text files through callback functions. The way this is implemented is by logging the buffer to console in a specific order. Tests are utilized by checking for conditions when the callback has returned data. this was done using Mocha's done() function.

## Learning Objectives
* students will be able to create asynchronous programs using the node.js callback pattern
* students will be able to read, write, and encode binary data using the Buffer class
* students will be able to utilize the built-in `fs` module for basic file system I/O operations
* students will be able to use `done` (provided by mocha.js) for creating asynchronous tests

## Resources
* [fs module docs](https://nodejs.org/api/fs.html)

## Requirements

#### Configuration
<!-- list of files, configurations, tools, etc that are required -->
* include the following:
* **README.md** - contains documentation about your lab
* **.gitignore** - contains a robust `.gitignore` file
* **.eslintrc** - contains the provided `.eslintrc` file
* **.eslintignore** - contains the provided `.eslintignore` file
* **lib/** - contains your modules
* **test/** - contains your unit tests
* **assets/** - contains the text files used by the program
* **index.js** - contains main program file

#### Feature Tasks
* for this assignment you will need to read three files and `console.log` the first 8 bytes ***(in hex)*** of each file
* regardless of file size, all three files should be read and logged in the order `'one.txt'`, `'two.txt'`, `'three.txt'`

#### Testing
* create a test that guarantees that the files are logged in the proper order
* create a test that checks for improper file paths

#### Documentation
* create a simple description of your project
* create a simple layer of documentation that describes how to use `done` in mocha callbacks
done() is Mocha's callback function which is invoked when your callback function has completed. By using done(), it tells Mocha that the test has completed.
1 change: 1 addition & 0 deletions assets/one.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec ultricies volutpat lobortis. Cras a facilisis lectus, vel gravida arcu. Integer iaculis at massa blandit tincidunt. Maecenas porta augue purus, at hendrerit dolor congue in. Donec volutpat magna massa, eget scelerisque urna ultricies id. Mauris egestas, massa at cursus sagittis, lectus felis scelerisque lacus, eget blandit velit tellus vitae nisl. Morbi molestie tortor eu sem dignissim sagittis. Integer quis egestas leo, a auctor felis. Pellentesque dignissim ut orci ac blandit. Aenean sed nulla enim. Morbi sit amet interdum odio.
1 change: 1 addition & 0 deletions assets/three.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Spiderman was here
6 changes: 6 additions & 0 deletions assets/two.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non rutrum augue, sed dictum arcu. Aenean placerat dolor malesuada sapien tincidunt venenatis. Ut lobortis erat quis felis consectetur porttitor. Quisque rutrum, velit vel congue dictum, lacus ipsum laoreet nunc, ac ultricies nunc mi ac quam. Curabitur dapibus ornare orci a congue. Sed vulputate est a lacinia vulputate. Quisque iaculis, turpis dignissim elementum scelerisque, dui leo venenatis justo, at vehicula augue augue non velit. Donec laoreet velit nunc, et lobortis ante ultrices ut. Sed vulputate ac enim congue tempor. Fusce sollicitudin ut mauris at aliquam. In in est arcu. Nullam magna libero, interdum id erat congue, consequat feugiat risus. Phasellus quis turpis nec quam feugiat auctor. Aenean non diam quis diam maximus laoreet et at justo. Nunc felis risus, imperdiet vitae sapien dignissim, efficitur bibendum lectus.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec ultricies volutpat lobortis. Cras a facilisis lectus, vel gravida arcu. Integer iaculis at massa blandit tincidunt. Maecenas porta augue purus, at hendrerit dolor congue in. Donec volutpat magna massa, eget scelerisque urna ultricies id. Mauris egestas, massa at cursus sagittis, lectus felis scelerisque lacus, eget blandit velit tellus vitae nisl. Morbi molestie tortor eu sem dignissim sagittis. Integer quis egestas leo, a auctor felis. Pellentesque dignissim ut orci ac blandit. Aenean sed nulla enim. Morbi sit amet interdum odio.
Duis eget erat eu ipsum cursus ultrices id quis massa. Nulla dignissim non urna et lobortis. Integer mollis justo nisi, at eleifend ex porta ut. Sed aliquam pellentesque mi eu consequat. Etiam volutpat rutrum aliquet. Phasellus et porttitor est, vel elementum risus. Pellentesque vitae leo et nunc venenatis tincidunt. Duis vitae iaculis mauris, sed fringilla risus. Cras imperdiet, velit nec maximus pretium, velit sem facilisis mi, sit amet dignissim tellus lacus et magna. Ut faucibus, erat vitae condimentum auctor, augue augue sodales nisi, ut tincidunt tellus mi nec libero. Pellentesque magna nulla, dignissim non condimentum id, vehicula et urna. Integer varius, erat vitae pellentesque fringilla, est justo eleifend tortor, vel sollicitudin orci dolor in ligula.

Proin lobortis accumsan odio id ultrices. Ut nisl lacus, vestibulum sit amet libero eget, placerat auctor tortor. Morbi ut sollicitudin nulla. Duis aliquet arcu quis nulla posuere dignissim. Integer sagittis, magna at venenatis consectetur, urna enim gravida ligula, a dapibus diam dolor et ante. Nam ac bibendum eros, ornare faucibus felis. Maecenas gravida id turpis id volutpat. Mauris lobortis erat non lacus tincidunt venenatis. In ac bibendum nunc. Ut lorem mauris, elementum sed convallis ac, sollicitudin et nunc. Vestibulum lacus tellus, porta quis justo non, accumsan convallis augue. Proin a leo eu justo lacinia molestie quis a urna. Fusce nisl lorem, accumsan eu porttitor nec, lacinia id nulla. Quisque eleifend, mauris auctor malesuada porttitor, nulla orci efficitur nisi, sed aliquet purus lacus a erat. Vestibulum nec auctor velit.
Sed imperdiet sodales rutrum. Ut non velit sed turpis dictum gravida vel cursus augue. Proin elementum diam laoreet, molestie mauris non, hendrerit lectus. Phasellus lacinia lacus urna, eu hendrerit odio bibendum ac. Phasellus euismod felis sed metus molestie, ac gravida ante faucibus. Maecenas pulvinar ultricies lorem, vel semper urna fermentum ac. Vivamus vitae vehicula nisi. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed purus mi, viverra non iaculis quis, aliquet at nulla. Aenean id mi et eros convallis vulputate eget ut nulla. Proin vel ex vehicula, interdum orci at, efficitur erat. Integer tristique magna et ultricies porttitor. Mauris bibendum, velit nec elementum interdum, ligula nulla aliquet purus, vel maximus nibh leo ut nisl. Proin enim quam, egestas eu consequat in, rutrum eget lectus. Nunc bibendum tellus mi, id tempor lacus sollicitudin eget. Praesent a vulputate mauris.
18 changes: 18 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';

const fileReader = require('./lib/file-reader.js');

fileReader(`${__dirname}/assets/one.txt`, (err, data) => {
if (err) throw err;
console.log('content of one.txt:', data);

fileReader(`${__dirname}/assets/two.txt`, (err, data) => {
if (err) throw err;
console.log('content of two.txt:', data);

fileReader(`${__dirname}/assets/three.txt`, (err, data) => {
if (err) throw err;
console.log('content of three.txt:', data);
});
});
});
11 changes: 11 additions & 0 deletions lib/file-reader.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';

const fs = require('fs');

const fileReader = module.exports = (file, callback) => {
fs.readFile(file, (err, data) => {
if (err) return callback(err);

return callback(null, data.toString('hex', 0, 8));
});
};
27 changes: 27 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"name": "03-parallel_file_system",
"version": "1.0.0",
"description": "![CF](https://camo.githubusercontent.com/70edab54bba80edb7493cad3135e9606781cbb6b/687474703a2f2f692e696d6775722e636f6d2f377635415363382e706e67) 04: Parallel File Processing ===",
"main": "index.js",
"directories": {
"test": "test"
},
"scripts": {
"test": "mocha"
},
"repository": {
"type": "git",
"url": "git+https://github.com/ohjonah/03-parallel_file_system.git"
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/ohjonah/03-parallel_file_system/issues"
},
"homepage": "https://github.com/ohjonah/03-parallel_file_system#readme",
"devDependencies": {
"chai": "^4.1.0",
"mocha": "^3.4.2"
}
}
38 changes: 38 additions & 0 deletions test/file-reader-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
'use strict';

const expect = require('chai').expect;
const fileReader = require('../lib/file-reader.js');

describe('File Reader Module', () => {
describe('with improper file path', () => {
it('should return an error', done => {
fileReader(`${__dirname}/not-a-file.txt`, err => {
expect(err).to.be.an('error');
done();
});
});
});

describe('with a proper file path', () => {
it('should return content from txt files', done => {
fileReader(`${__dirname}/../assets/one.txt`, (err, data) => {
expect(err).to.equal(null);
expect(data.length).to.equal(16);
expect(data).to.be.a('string');

fileReader(`${__dirname}/../assets/two.txt`, (err, data) => {
expect(err).to.equal(null);
expect(data.length).to.equal(16);
expect(data).to.be.a('string');

fileReader(`${__dirname}/../assets/two.txt`, (err, data) => {
expect(err).to.equal(null);
expect(data.length).to.equal(16);
expect(data).to.be.a('string');
done();
});
});
});
});
});
});