Skip to content

Commit

Permalink
0.0.1 add initial util methods and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
SeanCannon committed Jul 29, 2015
1 parent f58f53e commit 14b5bea
Show file tree
Hide file tree
Showing 13 changed files with 296 additions and 1 deletion.
4 changes: 4 additions & 0 deletions .gitignore
@@ -0,0 +1,4 @@
node_modules
coverage
.idea
.DS_Store
39 changes: 39 additions & 0 deletions .jshintrc
@@ -0,0 +1,39 @@
{
"nonew" : true,
"plusplus" : true,
"curly" : true,
"latedef" : "nofunc",
"unused" : "strict",
"noarg" : true,
"indent" : 2,
"forin" : true,
"noempty" : true,
"quotmark" : "single",
"maxparams" : 5,
"node" : true,
"eqeqeq" : true,
"strict" : true,
"undef" : true,
"bitwise" : true,
"newcap" : true,
"immed" : true,
"browser" : true,
"camelcase" : true,
"nonbsp" : true,
"globals" : {
"after" : false,
"afterEach" : false,
"angular" : false,
"before" : false,
"beforeEach" : false,
"browser" : false,
"describe" : false,
"expect" : false,
"inject" : false,
"it" : false,
"jasmine" : false,
"spyOn" : false,
"$" : false,
"_" : false
}
}
5 changes: 5 additions & 0 deletions .travis.yml
@@ -0,0 +1,5 @@
language: node_js
node_js:
- "0.12"
after_script:
- "./node_modules/coveralls/bin/coveralls.js < ./coverage/lcov.info"
79 changes: 78 additions & 1 deletion README.md
@@ -1,2 +1,79 @@
# alien-node-q-utils
Helper functions for Q on NodeJS
Helper functions for promises with Q on NodeJS. The functions are pure and curried with Ramda.

[![Build Status](https://travis-ci.org/AlienCreations/alien-node-q-utils.svg?branch=master)](https://travis-ci.org/AlienCreations/alien-node-q-utils) [![Coverage Status](https://coveralls.io/repos/AlienCreations/alien-node-q-utils/badge.svg?branch=master&service=github)](https://coveralls.io/github/AlienCreations/alien-node-q-utils?branch=master) [![npm version](http://img.shields.io/npm/v/alien-node-q-utils.svg)](https://npmjs.org/package/alien-node-q-utils) [![Dependency Status](https://david-dm.org/AlienCreations/alien-node-q-utils.svg)](https://david-dm.org/AlienCreations/alien-node-q-utils)

## Install

```
$ npm install alien-node-q-utils --save
```

Run the specs

```
$ npm test
```
## Methods
#### rejectedPromise
A pre-rejected promise that throws the rejection into an expected `catch` block.

```js
it('should pre-reject a promise', function(done) {
rejectedPromise('foo')
.catch(function(err) {
expect(err).toBe('foo');
done();
})
});
```

#### resolvedPromise
A pre-resolved promise that passes the resolution into the expected `then` block.

```js
it('should pre-resolve a promise', function(done) {
resolvedPromise('foo')
.then(function(data) {
expect(data).toBe('foo');
done();
})
});
```

#### rejectOnErrorOrResolve
Given a function signature of `fn(deferred, err, data)` this will reject `deferred` if `err` is provided,
otherwise resolve `deferred` with `data`.

```js

var mockPromiseNoError = function(resolveWith) {
var deferred = Q.defer();
rejectOnErrorOrResolve(deferred, undefined, resolveWith);
return deferred.promise;
};

var mockPromiseWithError = function(err) {
var deferred = Q.defer();
rejectOnErrorOrResolve(deferred, err, undefined);
return deferred.promise;
};

it('should resolve if no error is provided', function(done) {
var deferred = Q.defer();
mockPromiseNoError('foo')
.then(function(data) {
expect(data).toBe('foo');
done();
});
});

it('should reject if error is provided', function(done) {
var deferred = Q.defer();
mockPromiseWithError('foo')
.catch(function(err) {
expect(err).toBe('foo');
done();
});
});
```
7 changes: 7 additions & 0 deletions lib/Promises.js
@@ -0,0 +1,7 @@
'use strict';

module.exports = {
rejectOnErrorOrResolve : require('./methods/rejectOnErrorOrResolve'),
rejectedPromise : require('./methods/rejectedPromise'),
resolvedPromise : require('./methods/resolvedPromise')
};
20 changes: 20 additions & 0 deletions lib/methods/rejectOnErrorOrResolve.js
@@ -0,0 +1,20 @@
'use strict';

var R = require('ramda');

/**
* Reject a promise with an error if provided [err], else resolve with provided data [resolveWith]
* @param {Object} deferred
* @param {Object} err
* @param {*} resolveWith
* @returns {void}
*/
var rejectOnErrorOrResolve = R.curry(function(deferred, err, resolveWith) {
if (err) {
deferred.reject(err);
} else {
deferred.resolve(resolveWith);
}
});

module.exports = rejectOnErrorOrResolve;
16 changes: 16 additions & 0 deletions lib/methods/rejectedPromise.js
@@ -0,0 +1,16 @@
'use strict';

var Q = require('q');

/**
* Returns a promise that is pre-rejected with provided rejection pass-through.
* @param rejection
* @returns {Q.promise}
*/
function rejectedPromise(rejection) {
var deferred = Q.defer();
deferred.reject(rejection);
return deferred.promise;
}

module.exports = rejectedPromise;
16 changes: 16 additions & 0 deletions lib/methods/resolvedPromise.js
@@ -0,0 +1,16 @@
'use strict';

var Q = require('q');

/**
* Returns a promise that is pre-resolved with provided resolution pass-through.
* @param resolution
* @returns {Q.promise}
*/
function resolvedPromise(resolution) {
var deferred = Q.defer();
deferred.resolve(resolution);
return deferred.promise;
}

module.exports = resolvedPromise;
37 changes: 37 additions & 0 deletions package.json
@@ -0,0 +1,37 @@
{
"name" : "alien-node-q-utils",
"version" : "0.0.1",
"description" : "Helper functions for promises with Q on NodeJS",
"main" : "lib/Promises.js",
"dependencies" : {
"ramda" : "^0.17.x",
"q" : "^1.4.x"
},
"devDependencies" : {
"coveralls" : "^2.11.2",
"istanbul" : "^0.3.13",
"jasmine" : "^2.3.1"
},
"scripts" : {
"test" : "./node_modules/.bin/istanbul cover ./node_modules/.bin/jasmine"
},
"repository" : {
"type" : "git",
"url" : "https://github.com/aliencreations/alien-node-q-utils.git"
},
"keywords" : [
"aliencreations",
"q",
"promise",
"promises",
"util",
"node",
"ramda"
],
"author" : "Sean Cannon",
"license" : "MIT",
"bugs" : {
"url" : "https://github.com/aliencreations/alien-node-q-utils/issues"
},
"homepage" : "https://github.com/aliencreations/alien-node-q-utils"
}
39 changes: 39 additions & 0 deletions spec/rejectOnErrorOrResolveSpec.js
@@ -0,0 +1,39 @@
'use strict';

var R = require('ramda'),
Q = require('q');

var rejectOnErrorOrResolve = require('../lib/methods/rejectOnErrorOrResolve');

var mockPromiseNoError = function(resolveWith) {
var deferred = Q.defer();
rejectOnErrorOrResolve(deferred, undefined, resolveWith);
return deferred.promise;
};

var mockPromiseWithError = function(err) {
var deferred = Q.defer();
rejectOnErrorOrResolve(deferred, err, undefined);
return deferred.promise;
};

var FAKE_RESOLVE_WITH = 'Success!',
FAKE_ERR = { code : 6000, message : 'Failed!' };

describe('rejectOnErrorOrResolve', function() {

it('should resolve a promise where no error is provided', function(done) {
mockPromiseNoError(FAKE_RESOLVE_WITH).then(function(result) {
expect(result).toBe(FAKE_RESOLVE_WITH);
done();
});
});

it('should reject a promise where an error is provided', function(done) {
mockPromiseWithError(FAKE_ERR).catch(function(err) {
expect(err).toBe(FAKE_ERR);
done();
})
});

});
13 changes: 13 additions & 0 deletions spec/rejectedPromiseSpec.js
@@ -0,0 +1,13 @@
'use strict';

var rejectedPromise = require('../lib/methods/rejectedPromise');

describe('rejectedPromise', function() {
it('should pre-reject a promise', function(done) {
rejectedPromise('foo')
.catch(function(err) {
expect(err).toBe('foo');
done();
})
});
});
13 changes: 13 additions & 0 deletions spec/resolvedPromiseSpec.js
@@ -0,0 +1,13 @@
'use strict';

var resolvedPromise = require('../lib/methods/resolvedPromise');

describe('resolvedPromise', function() {
it('should pre-resolve a promise', function(done) {
resolvedPromise('foo')
.then(function(data) {
expect(data).toBe('foo');
done();
})
});
});
9 changes: 9 additions & 0 deletions spec/support/jasmine.json
@@ -0,0 +1,9 @@
{
"spec_dir": "spec",
"spec_files": [
"**/*[sS]pec.js"
],
"helpers": [
"helpers/**/*.js"
]
}

0 comments on commit 14b5bea

Please sign in to comment.