diff --git a/challenges/basic-html5-and-css.json b/challenges/basic-html5-and-css.json index 3e0532d81a..4640facb09 100644 --- a/challenges/basic-html5-and-css.json +++ b/challenges/basic-html5-and-css.json @@ -1758,8 +1758,8 @@ }, { "id": "bad87fee1348bd9aedc08830", - "name": "waypoint-use-html5-to-require-a-field", - "dashedName": "Waypoint: Use HTML5 to Require a Field", + "name": "Waypoint: Use HTML5 to Require a Field", + "dashedName": "waypoint-use-html5-to-require-a-field", "difficulty": 0.042, "description": [ "Make your text input a \"required\" field, so that your user can't submit the form without completing this field.", diff --git a/challenges/ziplines.json b/challenges/ziplines.json index f61a96280e..3779c06ff7 100644 --- a/challenges/ziplines.json +++ b/challenges/ziplines.json @@ -173,8 +173,8 @@ }, { "id": "bd7158d8c442eddfaeb5bd19", - "name": "zipline-wikipedia-viewer", - "dashedName": "Zipline: Wikipedia Viewer", + "name": "Zipline: Wikipedia Viewer", + "dashedName": "zipline-wikipedia-viewer", "difficulty": 1.05, "challengeSeed": ["126415131"], "description": [ diff --git a/index.js b/index.js index ddad9d678f..7eff9f3f2e 100644 --- a/index.js +++ b/index.js @@ -28,7 +28,7 @@ var CompletionMonitor = function() { Challenge.destroyAll(function(err, info) { if (err) { - console.err(err); + console.error(err); } else { console.log('Deleted ', info); } diff --git a/flattenUser.js b/loopbackMigration.js similarity index 70% rename from flattenUser.js rename to loopbackMigration.js index fad529cea3..02dd993b9c 100644 --- a/flattenUser.js +++ b/loopbackMigration.js @@ -1,10 +1,10 @@ /* eslint-disable no-process-exit */ require('dotenv').load(); var Rx = require('rx'), - uuid = require('node-uuid'), - assign = require('lodash/object/assign'), - mongodb = require('mongodb'), - secrets = require('../config/secrets'); + uuid = require('node-uuid'), + assign = require('lodash/object/assign'), + mongodb = require('mongodb'), + secrets = require('../config/secrets'); var MongoClient = mongodb.MongoClient; @@ -16,6 +16,14 @@ var providers = [ 'linkedin' ]; +// create async console.logs +function debug() { + var args = [].slice.call(arguments); + process.nextTick(function() { + console.log.apply(console, args); + }); +} + function createConnection(URI) { return Rx.Observable.create(function(observer) { MongoClient.connect(URI, function(err, database) { @@ -23,32 +31,31 @@ function createConnection(URI) { return observer.onError(err); } observer.onNext(database); + observer.onCompleted(); }); }); } function createQuery(db, collection, options, batchSize) { return Rx.Observable.create(function (observer) { - console.log('Creating cursor...'); var cursor = db.collection(collection).find({}, options); cursor.batchSize(batchSize || 20); // Cursor.each will yield all doc from a batch in the same tick, // or schedule getting next batch on nextTick + debug('opening cursor for %s', collection); cursor.each(function (err, doc) { if (err) { - console.log(err); return observer.onError(err); } if (!doc) { - console.log('hit complete'); + console.log('onCompleted'); return observer.onCompleted(); } - console.log('calling onnext'); observer.onNext(doc); }); return Rx.Disposable.create(function () { - console.log('Disposing cursor...'); + debug('closing cursor for %s', collection); cursor.close(); }); }); @@ -101,7 +108,6 @@ var userSavesCount = users }) .flatMap(function(dats) { // bulk insert into new collection for loopback - console.log(dats); return insertMany(dats.db, 'user', dats.users, { w: 1 }); }) // count how many times insert completes @@ -138,18 +144,44 @@ var userIdentityCount = users // count how many times insert completes .count(); -Rx.Observable.merge( +var storyCount = dbObservable + .flatMap(function(db) { + return createQuery(db, 'stories', {}); + }) + .bufferWithCount(20) + .withLatestFrom(dbObservable, function(stories, db) { + return { + stories: stories, + db: db + }; + }) + .flatMap(function(dats) { + return insertMany(dats.db, 'story', dats.stories, { w: 1 }); + }) + .count(); + +Rx.Observable.combineLatest( userIdentityCount, - userSavesCount -) + userSavesCount, + storyCount, + function(userIdentCount, userCount, storyCount) { + return { + userIdentCount: userIdentCount * 20, + userCount: userCount * 20, + storyCount: storyCount * 20 + }; + }) .subscribe( - function(_count) { - count += _count * 20; - }, - function(err) { - console.log('an error occured', err, err.stack); - }, - function() { - console.log('finished with %s documents processed', count); - } - ); + function(countObj) { + console.log('next'); + count = countObj; + }, + function(err) { + console.error('an error occured', err, err.stack); + }, + function() { + + console.log('finished with ', count); + process.exit(0); + } +);