Skip to content

Commit 2b2fee3

Browse files
committed
Merge pull request #21 from NickGlenn/master
Lots of bug fixes, no API changes
2 parents fb6ecd1 + 5f24e34 commit 2b2fee3

24 files changed

Lines changed: 910 additions & 482 deletions

.babelrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"presets": ["es2015"]
3+
}

.npmignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
src/

.travis.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
language: node_js
2+
node_js:
3+
- "4.1"
4+
- "4.0"
5+
- "0.12"
6+
- "iojs"

README.md

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,9 @@
1+
[![Build Status](https://travis-ci.org/HelpfulHuman/Restfool.svg)](https://travis-ci.org/HelpfulHuman/Restfool)
2+
13
RESTfool is largely just a set of higher order functions that produce middleware for mocking responses with assertions and fixture data. These middleware also report request and response information to a RESTfool Dashboard instance for debugging and analysis of each made call.
24

35
## Getting Started
46

5-
### CLI
6-
7-
Install via npm:
8-
9-
```
10-
npm install -g restfool
11-
```
12-
13-
Run the `setup` command in the folder you want to create a project in:
14-
15-
```
16-
mkdir restfool; cd restfool
17-
restfool setup
18-
```
19-
20-
### Manual
21-
227
Install via npm:
238

249
```
@@ -113,20 +98,30 @@ server.get('/posts', postFixture.send(10, { published: true }))
11398

11499
You know what's even cooler than sending completely dynamic fixture data? Mocking data persistence complete with scaffolded routes!
115100

116-
_Note: RESTfool simply stores any data in memory that will be lost once closing the server._
101+
_Note: RESTfool simply stores the data in memory. This means that the data will be lost once the server is closed._
117102

118103
```javascript
119104
var uuid = require('uuid')
120105

121106
var posts = restfool.resource({
122107
// define the endpoint/resource name
123-
type: 'posts',
108+
name: 'posts',
124109

125110
// provide an initial set seed data
126111
seed: postFixture.make(10),
127112

128-
// define the primary key ("id" by default)
129-
primaryKey: 'id',
113+
// format the resource data on output
114+
format: function (data) {
115+
var req = this
116+
var output = { data: data }
117+
118+
if (Array.isArray(data)) {
119+
data.page = req.query.page || 1
120+
data.results = data.length
121+
}
122+
123+
return data;
124+
}
130125

131126
// run this function when a post is made
132127
onCreate: function (post) {

dev-server.js

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,36 @@
1-
require('babel/register');
1+
require('babel-core/register');
22
var restfool = require('./src/index');
3+
var faker = require('faker');
34

5+
// create a new RESTfool server (along with the UI server)
46
var app = restfool.create({
57
notify: true
68
});
79

8-
app.get('/', function (req, res, next) {
9-
res.send('OK');
10-
});
11-
12-
var faker = require('faker')
13-
14-
1510
// posts fixture factory
16-
var postFixture = restfool.fixture({
11+
var postsFixture = restfool.fixture({
1712
title: faker.lorem.sentence,
1813
body: faker.lorem.paragraphs
19-
})
14+
});
2015

21-
var shortid = require('shortid')
22-
var postsResource = restfool.resource({
16+
// posts resource
17+
app.use(restfool.resource({
2318
name: 'posts',
24-
seed: postFixture.make(10, {published:true}),
25-
onCreate: function (data) {
26-
data.id = shortid()
27-
return data
28-
}
29-
})
19+
seed: postsFixture.make(10, { published: true })
20+
}));
21+
22+
// users fixture factory
23+
var usersFixture = restfool.fixture({
24+
first_name: faker.name.firstName,
25+
last_name: faker.name.lastName,
26+
email: faker.internet.emal
27+
});
3028

31-
app.use(postsResource)
29+
// users resource
30+
app.use(restfool.resource({
31+
name: 'users',
32+
seed: usersFixture.make(4)
33+
}));
3234

33-
app.listen(5602, function () {
34-
console.log('listening on port', 5602);
35-
});
35+
// start listening
36+
app.listen(5602);

dist/factories/bridge.js

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
'use strict';
22

3-
Object.defineProperty(exports, '__esModule', {
3+
Object.defineProperty(exports, "__esModule", {
44
value: true
55
});
6-
7-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
6+
exports.factory = factory;
87

98
var _lodash = require('lodash');
109

@@ -22,17 +21,18 @@ var _moment = require('moment');
2221

2322
var _moment2 = _interopRequireDefault(_moment);
2423

24+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25+
2526
/**
2627
* Creates and returns a new bridge object that can be used to
2728
* tie RESTfool middleware together.
2829
*
2930
* @param {Object} options
3031
* @return {Object}
3132
*/
32-
33-
exports['default'] = function (options) {
33+
function factory(options) {
3434
var _records = [];
35-
var _events = new _events3['default'].EventEmitter();
35+
var _events = new _events3.default.EventEmitter();
3636

3737
return {
3838
on: _events.on.bind(_events),
@@ -42,7 +42,6 @@ exports['default'] = function (options) {
4242
all: function all() {
4343
return _records;
4444
},
45-
4645
find: function find(id) {
4746
for (var i = 0; i < _records.length; i++) {
4847
if (_records[i].id === id) {
@@ -52,20 +51,18 @@ exports['default'] = function (options) {
5251

5352
return false;
5453
},
55-
5654
clear: function clear() {
5755
_records = [];
5856
},
59-
6057
record: function record(req) {
61-
var id = _shortid2['default'].generate();
58+
var id = _shortid2.default.generate();
6259
var record = {
6360
id: id,
6461
status: 'open',
6562
method: req.method,
6663
path: req.path,
6764
request: req,
68-
started_at: (0, _moment2['default'])(),
65+
started_at: (0, _moment2.default)(),
6966
ended_at: null,
7067
meta: [],
7168
tags: []
@@ -76,13 +73,10 @@ exports['default'] = function (options) {
7673

7774
return record;
7875
},
79-
8076
close: function close(record) {
8177
record.status = 'closed';
82-
record.ended_at = (0, _moment2['default'])();
78+
record.ended_at = (0, _moment2.default)();
8379
_events.emit('request-close', record);
8480
}
8581
};
86-
};
87-
88-
module.exports = exports['default'];
82+
}

dist/factories/fixture.js

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,39 @@
11
'use strict';
22

3-
Object.defineProperty(exports, '__esModule', {
3+
Object.defineProperty(exports, "__esModule", {
44
value: true
55
});
6-
7-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
6+
exports.runNestedFunctions = runNestedFunctions;
7+
exports.makeRow = makeRow;
8+
exports.factory = factory;
89

910
var _lodash = require('lodash');
1011

1112
var _lodash2 = _interopRequireDefault(_lodash);
1213

13-
var _utils = require('../utils');
14+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15+
16+
function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; }
1417

15-
var _utils2 = _interopRequireDefault(_utils);
18+
/**
19+
* Runs over an object and replaces any functional values
20+
* with their results.
21+
*
22+
* @param {Object} obj
23+
* @return {Object}
24+
*/
25+
function runNestedFunctions(obj) {
26+
return _lodash2.default.mapValues(obj, function (val) {
27+
switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {
28+
case 'function':
29+
return val();
30+
case 'object':
31+
return runNestedFunctions(val);
32+
default:
33+
return val;
34+
}
35+
});
36+
}
1637

1738
/**
1839
* Processes a single row and returns the value.
@@ -26,7 +47,7 @@ function makeRow(schema, modifier) {
2647
return modifier(schema);
2748
}
2849

29-
return _lodash2['default'].merge(schema, modifier);
50+
return _lodash2.default.merge(schema, modifier);
3051
}
3152

3253
/**
@@ -35,10 +56,9 @@ function makeRow(schema, modifier) {
3556
* @param {Object} schema
3657
* @return {Object}
3758
*/
38-
39-
exports['default'] = function (schema) {
40-
if (typeof schema === 'object') {
41-
schema = _utils2['default'].runNestedFunctions.bind(null, schema);
59+
function factory(schema) {
60+
if (!Array.isArray(schema) && (typeof schema === 'undefined' ? 'undefined' : _typeof(schema)) === 'object') {
61+
schema = runNestedFunctions.bind(null, schema);
4262
}
4363

4464
if (typeof schema !== 'function') {
@@ -54,14 +74,15 @@ exports['default'] = function (schema) {
5474
* @param {Object} modifier
5575
* @return {Array}
5676
*/
77+
5778
make: function make(count, modifier) {
58-
var _arr = [];
79+
var records = [];
5980
for (var i = 0; i < count; i++) {
6081
var record = makeRow(schema(), modifier);
61-
if (record) _arr.push(record);
82+
if (record) records.push(record);
6283
}
6384

64-
return _arr;
85+
return records;
6586
},
6687

6788
/**
@@ -73,8 +94,5 @@ exports['default'] = function (schema) {
7394
makeOne: function makeOne(modifier) {
7495
return makeRow(schema(), modifier);
7596
}
76-
7797
};
78-
};
79-
80-
module.exports = exports['default'];
98+
}

0 commit comments

Comments
 (0)