From b85fa7b541177f9c339b5848dacd0b9e65342eb5 Mon Sep 17 00:00:00 2001 From: ohjonah Date: Wed, 19 Jul 2017 12:25:01 -0700 Subject: [PATCH 1/5] Creates Scaffold --- .eslintignore | 5 ++ .eslintrc | 21 ++++++ .gitignore | 136 +++++++++++++++++++++++++++++++++++++++ assets/one.txt | 1 + assets/three.txt | 1 + assets/two.txt | 6 ++ index.js | 0 lib/file-reader.js | 0 package.json | 27 ++++++++ test/file-reader-test.js | 0 10 files changed, 197 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 assets/one.txt create mode 100644 assets/three.txt create mode 100644 assets/two.txt create mode 100644 index.js create mode 100644 lib/file-reader.js create mode 100644 package.json create mode 100644 test/file-reader-test.js diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..05b1cf3 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +**/node_modules/* +**/vendor/* +**/*.min.js +**/coverage/* +**/build/* diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..8dc6807 --- /dev/null +++ b/.eslintrc @@ -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" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..345130c --- /dev/null +++ b/.gitignore @@ -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 diff --git a/assets/one.txt b/assets/one.txt new file mode 100644 index 0000000..0bd32f0 --- /dev/null +++ b/assets/one.txt @@ -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. \ No newline at end of file diff --git a/assets/three.txt b/assets/three.txt new file mode 100644 index 0000000..43c0d65 --- /dev/null +++ b/assets/three.txt @@ -0,0 +1 @@ +Spiderman was here \ No newline at end of file diff --git a/assets/two.txt b/assets/two.txt new file mode 100644 index 0000000..e906d6f --- /dev/null +++ b/assets/two.txt @@ -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. \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..e69de29 diff --git a/lib/file-reader.js b/lib/file-reader.js new file mode 100644 index 0000000..e69de29 diff --git a/package.json b/package.json new file mode 100644 index 0000000..e50cb12 --- /dev/null +++ b/package.json @@ -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": "echo \"Error: no test specified\" && exit 1" + }, + "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" + } +} diff --git a/test/file-reader-test.js b/test/file-reader-test.js new file mode 100644 index 0000000..e69de29 From 007282ee230f9b8f95a121ad521432bd9b341753 Mon Sep 17 00:00:00 2001 From: ohjonah Date: Wed, 19 Jul 2017 13:22:06 -0700 Subject: [PATCH 2/5] Adds File Reader Tests --- test/file-reader-test.js | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/test/file-reader-test.js b/test/file-reader-test.js index e69de29..aedad95 100644 --- a/test/file-reader-test.js +++ b/test/file-reader-test.js @@ -0,0 +1,41 @@ +'use strict'; + +const expect = require('chai').expect; +const fileReader = require('../lib/file-reader.js'); + +describe('File Reader Module', function() { + describe('with improper file path', function() { + it('should return an error', function(done) { + fileReader(`${__dirname}/not-a-file.txt`, function(err) { + expect(err).to.be.an('error'); + done(); + }); + }); + }); + + describe('with a proper file path', function() { + it('should return content of one.txt', function(done) { + fileReader(`${__dirname}/../assets/one.txt`, function(err, data) { + expect(err).to.equal(null); + expect(data).to.be.a('string'); + done(); + }); + + it('should return content of two.txt', function(done) { + fileReader(`${__dirname}/../assets/two.txt`, function(err, data) { + expect(err).to.equal(null); + expect(data).to.be.a('string'); + done(); + }); + + it('should return content of three.txt', function(done) { + fileReader(`${__dirname}/../assets/three.txt`, function(err, data) { + expect(err).to.equal(null); + expect(data).to.be.a('string'); + done(); + }); + }); + }); + }); + }); +}); From dbfdf173fbb01783afd5d59533b204b84c6a60db Mon Sep 17 00:00:00 2001 From: ohjonah Date: Wed, 19 Jul 2017 14:16:29 -0700 Subject: [PATCH 3/5] Proper File Path Test --- index.js | 18 ++++++++++++++++++ lib/file-reader.js | 11 +++++++++++ package.json | 2 +- test/file-reader-test.js | 12 +++--------- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/index.js b/index.js index e69de29..a4ad183 100644 --- a/index.js +++ b/index.js @@ -0,0 +1,18 @@ +'use strict'; + +const fileReader = require('./lib/file-reader.js'); + +fileReader(`${__dirname}/assets/one.txt`, function(err, data) { + if (err) throw err; + console.log('content of one.txt:', data); + + fileReader(`${__dirname}/assets/two.txt`, function(err, data) { + if (err) throw err; + console.log('content of two.txt:', data); + + fileReader(`${__dirname}/assets/three.txt`, function(err, data) { + if (err) throw err; + console.log('content of three.txt:', data); + }); + }); +}); diff --git a/lib/file-reader.js b/lib/file-reader.js index e69de29..7619ece 100644 --- a/lib/file-reader.js +++ b/lib/file-reader.js @@ -0,0 +1,11 @@ +'use strict'; + +const fs = require('fs'); + +const fileReader = module.exports = function(file, callback) { + fs.readFile(file, function(err, data) { + if (err) return callback(err); + + return callback(null, data.toString('hex', 0, 8)); + }); +}; \ No newline at end of file diff --git a/package.json b/package.json index e50cb12..618a154 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "test": "test" }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "mocha" }, "repository": { "type": "git", diff --git a/test/file-reader-test.js b/test/file-reader-test.js index aedad95..f6bba2a 100644 --- a/test/file-reader-test.js +++ b/test/file-reader-test.js @@ -14,22 +14,16 @@ describe('File Reader Module', function() { }); describe('with a proper file path', function() { - it('should return content of one.txt', function(done) { + it('should return content from txt files', function(done) { fileReader(`${__dirname}/../assets/one.txt`, function(err, data) { expect(err).to.equal(null); expect(data).to.be.a('string'); - done(); - }); - it('should return content of two.txt', function(done) { fileReader(`${__dirname}/../assets/two.txt`, function(err, data) { expect(err).to.equal(null); expect(data).to.be.a('string'); - done(); - }); - it('should return content of three.txt', function(done) { - fileReader(`${__dirname}/../assets/three.txt`, function(err, data) { + fileReader(`${__dirname}/../assets/two.txt`, function(err, data) { expect(err).to.equal(null); expect(data).to.be.a('string'); done(); @@ -38,4 +32,4 @@ describe('File Reader Module', function() { }); }); }); -}); +}); \ No newline at end of file From 26782a81c51c35d03506efff60e1d796dc5eff0e Mon Sep 17 00:00:00 2001 From: ohjonah Date: Wed, 19 Jul 2017 14:25:20 -0700 Subject: [PATCH 4/5] Cleans Up Code --- index.js | 6 +++--- lib/file-reader.js | 4 ++-- test/file-reader-test.js | 21 ++++++++++++--------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/index.js b/index.js index a4ad183..10bf8a9 100644 --- a/index.js +++ b/index.js @@ -2,15 +2,15 @@ const fileReader = require('./lib/file-reader.js'); -fileReader(`${__dirname}/assets/one.txt`, function(err, data) { +fileReader(`${__dirname}/assets/one.txt`, (err, data) => { if (err) throw err; console.log('content of one.txt:', data); - fileReader(`${__dirname}/assets/two.txt`, function(err, data) { + fileReader(`${__dirname}/assets/two.txt`, (err, data) => { if (err) throw err; console.log('content of two.txt:', data); - fileReader(`${__dirname}/assets/three.txt`, function(err, data) { + fileReader(`${__dirname}/assets/three.txt`, (err, data) => { if (err) throw err; console.log('content of three.txt:', data); }); diff --git a/lib/file-reader.js b/lib/file-reader.js index 7619ece..5f005d6 100644 --- a/lib/file-reader.js +++ b/lib/file-reader.js @@ -2,8 +2,8 @@ const fs = require('fs'); -const fileReader = module.exports = function(file, callback) { - fs.readFile(file, function(err, data) { +const fileReader = module.exports = (file, callback) => { + fs.readFile(file, (err, data) => { if (err) return callback(err); return callback(null, data.toString('hex', 0, 8)); diff --git a/test/file-reader-test.js b/test/file-reader-test.js index f6bba2a..cf9531b 100644 --- a/test/file-reader-test.js +++ b/test/file-reader-test.js @@ -3,28 +3,31 @@ const expect = require('chai').expect; const fileReader = require('../lib/file-reader.js'); -describe('File Reader Module', function() { - describe('with improper file path', function() { - it('should return an error', function(done) { - fileReader(`${__dirname}/not-a-file.txt`, function(err) { +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', function() { - it('should return content from txt files', function(done) { - fileReader(`${__dirname}/../assets/one.txt`, function(err, data) { + 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`, function(err, data) { + 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`, function(err, data) { + 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(); }); From cca400756926b2decc8142659edfb73ae156bac8 Mon Sep 17 00:00:00 2001 From: ohjonah Date: Wed, 19 Jul 2017 14:48:10 -0700 Subject: [PATCH 5/5] Adds ReadMe --- README.md | 46 +++------------------------------------------- 1 file changed, 3 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 8cc8c11..892fc8e 100644 --- a/README.md +++ b/README.md @@ -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-` + `` **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 - -* 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. \ No newline at end of file