react 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,7 +24,7 @@ function markdown(filedata) { return 'html'+filedata; }
24
24
  function prepareDirectory(outDirname, cb){ setTimeout(cb, 200, null, 'dircreated-'+outDirname); }
25
25
  function writeOutput(html, user, cb){ setTimeout(cb, 300, null, html+'_bytesWritten'); }
26
26
  function loadEmailTemplate(cb) { setTimeout(cb, 50, null, 'emailmd'); }
27
- function customizeEmail(user, emailHtml, cb) { return 'cust-'+user+emailHtml; }
27
+ function customizeEmail(user, emailHtml) { return 'cust-'+user+emailHtml; }
28
28
  function deliverEmail(custEmailHtml, cb) { setTimeout(cb, 100, null, 'delivered-'+custEmailHtml); }
29
29
 
30
30
  function useHtml(err, html, user, bytesWritten) {
@@ -43,9 +43,9 @@ var loadAndSave = react('loadAndSave', 'filename, uid, outDirname, cb -> err, ht
43
43
  writeOutput, 'html, user, cb -> err, bytesWritten', { after: prepareDirectory }, // only after prepareDirectory done
44
44
  loadEmailTemplate, 'cb -> err, emailmd',
45
45
  markdown, 'emailmd -> emailHtml', // using a sync function
46
- customizeEmail, 'user, emailHtml, cb -> err, custEmailHtml',
46
+ customizeEmail, 'user, emailHtml -> err, custEmailHtml', // sync fn
47
47
  deliverEmail, 'custEmailHtml, cb -> err, deliveredEmail', { after: writeOutput } // only after writeOutput is done
48
- );
48
+ );
49
49
 
50
50
  loadAndSave('file.md', 100, '/tmp/foo', useHtml); // executing the flow
51
51
 
@@ -9,12 +9,13 @@ function markdown(filedata) { return 'html'+filedata; }
9
9
  function prepareDirectory(outDirname, cb){ setTimeout(cb, 200, null, 'dircreated-'+outDirname); }
10
10
  function writeOutput(html, user, cb){ setTimeout(cb, 300, null, html+'_bytesWritten'); }
11
11
  function loadEmailTemplate(cb) { setTimeout(cb, 50, null, 'emailmd'); }
12
- function customizeEmail(user, emailHtml, cb) { return 'cust-'+user+emailHtml; }
12
+ function customizeEmail(user, emailHtml) { return 'cust-'+user+emailHtml; }
13
13
  function deliverEmail(custEmailHtml, cb) { setTimeout(cb, 100, null, 'delivered-'+custEmailHtml); }
14
14
 
15
15
  function useHtml(err, html, user, bytesWritten) {
16
16
  if (err) {
17
17
  console.log('***Error: %s', err);
18
+ console.error(err.stack);
18
19
  return;
19
20
  }
20
21
  console.log('final result: %s, user: %s, written:%s', html, user, bytesWritten);
@@ -22,15 +23,15 @@ function useHtml(err, html, user, bytesWritten) {
22
23
 
23
24
  // define fn, glue together with react, it will parallelize
24
25
  // starts with name and in/out params, then the tasks
25
- var loadAndSave = react('loadAndSave', 'fName, uid, outDir, cb -> err, html, user, bytes',
26
+ var loadAndSave = react('loadAndSave', 'filename, uid, outDir, cb -> err, html, user, bytes',
26
27
  loadUser, 'uid, cb -> err, user', // calling async loadUser with uid, cb called with err and user
27
28
  loadFile, 'filename, cb -> err, filedata',
28
29
  markdown, 'filedata -> html', // using a sync function
29
- prepareDirectory, 'outDirname, cb -> err, dircreated',
30
- writeOutput, 'html, user, cb -> err, bytesWritten', { after: prepareDirectory }, // only after prepareDirectory done
30
+ prepareDirectory, 'outDir, cb -> err, dircreated',
31
+ writeOutput, 'html, user, cb -> err, bytes', { after: prepareDirectory }, // only after prepareDirectory done
31
32
  loadEmailTemplate, 'cb -> err, emailmd',
32
33
  markdown, 'emailmd -> emailHtml', // using a sync function
33
- customizeEmail, 'user, emailHtml, cb -> custEmailHtml',
34
+ customizeEmail, 'user, emailHtml -> custEmailHtml', // sync function
34
35
  deliverEmail, 'custEmailHtml, cb -> err, deliveredEmail', { after: writeOutput } // only after writeOutput is done
35
36
  );
36
37
 
package/lib/error.js CHANGED
@@ -9,19 +9,29 @@ function ensureStackTraceLimitSet(stackTraceLimit) {
9
9
  }
10
10
 
11
11
  function fName(fn) {
12
- return (typeof(fn) === 'string') ? fn : fn.name;
12
+ if (!fn) return 'undefined';
13
+ return (fn && fn.name) ? fn.name : fn;
13
14
  }
14
15
 
15
16
  function formatErrorMeta(err) {
16
17
  if (!err.meta) return;
17
18
  var vcon = err.meta.vcon;
18
19
  var task = err.meta.task;
19
- return '\n\n' +
20
- 'Error occurs in Task function: ' + fName(task.f) + '(' + task.a.join(',') + ')\n\n' +
21
- 'Variable Context: \n' +
22
- util.inspect(vcon) + '\n\n' +
23
- 'Task Source:\n\n' +
24
- task.f.toString() + '\n\n'; //TODO need to pretty print function, gets collapsed
20
+ var errString = '\n\n';
21
+ if (task && task.f && task.a) {
22
+ errString += ('Error occurs in Task function: ' + fName(task.f) + '(' + task.a.join(',') + ')\n\n');
23
+ }
24
+ if (vcon) {
25
+ errString += 'Variable Context: \n';
26
+ errString += util.inspect(vcon);
27
+ errString += '\n\n';
28
+ }
29
+ if (task && task.f) {
30
+ errString += 'Task Source:\n\n';
31
+ errString += task.f.toString(); //TODO need to pretty print function, gets collapsed
32
+ errString += '\n\n';
33
+ }
34
+ return errString;
25
35
  }
26
36
 
27
37
  function augmentError(err, meta) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react",
3
3
  "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.",
4
- "version": "0.2.1",
4
+ "version": "0.2.2",
5
5
  "author": "Jeff Barczewski <jeff.barczewski@gmail.com>",
6
6
  "repository": { "type": "git", "url": "http://github.com/jeffbski/react.git" },
7
7
  "bugs" : { "url": "http://github.com/jeffbski/react/issues" },
package/test/dsl.test.js CHANGED
@@ -214,7 +214,35 @@ test('not enough args throws error', function (t) {
214
214
  t.end();
215
215
  });
216
216
 
217
-
217
+ test('long example', function (t) {
218
+ t.plan(4);
219
+ function loadUser(uid, cb){ setTimeout(cb, 100, null, "User"+uid); }
220
+ function loadFile(filename, cb){ setTimeout(cb, 100, null, 'Filedata'+filename); }
221
+ function markdown(filedata) { return 'html'+filedata; }
222
+ function prepareDirectory(outDirname, cb){ setTimeout(cb, 200, null, 'dircreated-'+outDirname); }
223
+ function writeOutput(html, user, cb){ setTimeout(cb, 300, null, html+'_bytesWritten'); }
224
+ function loadEmailTemplate(cb) { setTimeout(cb, 50, null, 'emailmd'); }
225
+ function customizeEmail(user, emailHtml) { return 'cust-'+user+emailHtml; }
226
+ function deliverEmail(custEmailHtml, cb) { setTimeout(cb, 100, null, 'delivered-'+custEmailHtml); }
227
+ var loadAndSave = react('loadAndSave', 'filename, uid, outDirname, cb -> err, html, user, bytesWritten', // name, in/out params
228
+ loadUser, 'uid, cb -> err, user', // calling async fn loadUser with uid, callback is called with err and user
229
+ loadFile, 'filename, cb -> err, filedata',
230
+ markdown, 'filedata -> html', // using a sync function
231
+ prepareDirectory, 'outDirname, cb -> err, dircreated',
232
+ writeOutput, 'html, user, cb -> err, bytesWritten', { after: prepareDirectory }, // only after prepareDirectory done
233
+ loadEmailTemplate, 'cb -> err, emailmd',
234
+ markdown, 'emailmd -> emailHtml', // using a sync function
235
+ customizeEmail, 'user, emailHtml -> custEmailHtml',
236
+ deliverEmail, 'custEmailHtml, cb -> err, deliveredEmail', { after: writeOutput } // only after writeOutput is done
237
+ );
238
+ loadAndSave('file.md', 100, '/tmp/foo', function (err, html, user, bytesWritten) { // executing the flow
239
+ t.equal(err, null);
240
+ t.equal(html, 'htmlFiledatafile.md');
241
+ t.equal(user, 'User100');
242
+ t.equal(bytesWritten, 'htmlFiledatafile.md_bytesWritten');
243
+ t.end();
244
+ });
245
+ });
218
246
 
219
247
  // selectFirst
220
248