Skip to content

Commit 97aa4fa

Browse files
Ace Nassrijmdobry
authored andcommitted
Convert tasks.js to yargs (GoogleCloudPlatform#210)
Add yargs to tasks.js
1 parent 59ae9ca commit 97aa4fa

File tree

2 files changed

+61
-102
lines changed

2 files changed

+61
-102
lines changed

datastore/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
},
1111
"dependencies": {
1212
"@google-cloud/datastore": "^0.1.1",
13-
"async": "^2.0.1"
13+
"async": "^2.0.1",
14+
"yargs": "^5.0.0"
1415
},
1516
"devDependencies": {
1617
"mocha": "^3.0.2"

datastore/tasks.js

Lines changed: 59 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@
1313

1414
'use strict';
1515

16-
var input = process.argv.splice(2);
17-
var command = input.shift();
18-
1916
// [START build_service]
2017
// By default, the client will authenticate using the service account file
2118
// specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use
@@ -60,7 +57,7 @@ export GCLOUD_PROJECT=<project-id>
6057
6158
7. Run the application!
6259
```sh
63-
npm run tasks
60+
node tasks <command>
6461
```
6562
*/
6663

@@ -87,11 +84,12 @@ function addTask (description, callback) {
8784
]
8885
}, function (err) {
8986
if (err) {
90-
callback(err);
91-
return;
87+
return callback(err);
9288
}
9389

94-
callback(null, taskKey);
90+
var taskId = taskKey.path.pop();
91+
console.log('Task %d created successfully.', taskId);
92+
return callback(null, taskKey);
9593
});
9694
}
9795
// [END add_entity]
@@ -129,7 +127,8 @@ function markDone (taskId, callback) {
129127
}
130128

131129
// The transaction completed successfully.
132-
callback();
130+
console.log('Task %d updated successfully.', taskId);
131+
return callback(null);
133132
});
134133
});
135134
});
@@ -141,7 +140,14 @@ function listTasks (callback) {
141140
var query = datastore.createQuery('Task')
142141
.order('created');
143142

144-
datastore.runQuery(query, callback);
143+
datastore.runQuery(query, function (err, tasks) {
144+
if (err) {
145+
return callback(err);
146+
}
147+
148+
console.log('Found %d task(s)!', tasks.length);
149+
return callback(null, tasks);
150+
});
145151
}
146152
// [END retrieve_entities]
147153

@@ -152,101 +158,53 @@ function deleteTask (taskId, callback) {
152158
taskId
153159
]);
154160

155-
datastore.delete(taskKey, callback);
161+
datastore.delete(taskKey, function (err) {
162+
if (err) {
163+
return callback(err);
164+
}
165+
166+
console.log('Task %d deleted successfully.', taskId);
167+
return callback(null);
168+
});
156169
}
157170
// [END delete_entity]
158171

159-
// [START format_results]
160-
function formatTasks (tasks) {
161-
return tasks
162-
.map(function (task) {
163-
var taskKey = task.key.path.pop();
164-
var status;
165-
166-
if (task.data.done) {
167-
status = 'done';
168-
} else {
169-
status = 'created ' + new Date(task.data.created);
170-
}
171-
172-
return taskKey + ' : ' + task.data.description + ' (' + status + ')';
173-
})
174-
.join('\n');
175-
}
176-
// [END format_results]
172+
var cli = require('yargs');
173+
var makeHandler = require('../utils').makeHandler;
174+
175+
var program = module.exports = {
176+
addEntity: addTask,
177+
updateEntity: markDone,
178+
retrieveEntities: listTasks,
179+
deleteEntity: deleteTask,
180+
main: function (args) {
181+
// Run the command-line program
182+
cli.help().strict().parse(args).argv;
183+
}
184+
};
185+
186+
cli
187+
.demand(1)
188+
.command('new <description>', 'Adds a task with a description <description>.', {}, function (options) {
189+
addTask(options.description, makeHandler());
190+
})
191+
.command('done <taskId>', 'Marks the specified task as done.', {}, function (options) {
192+
markDone(options.taskId, makeHandler());
193+
})
194+
.command('list', 'Lists all tasks ordered by creation time.', {}, function (options) {
195+
listTasks(makeHandler());
196+
})
197+
.command('delete <taskId>', 'Deletes a task.', {}, function (options) {
198+
deleteTask(options.taskId, makeHandler());
199+
})
200+
.example('node $0 new "Buy milk"', 'Adds a task with description "Buy milk".')
201+
.example('node $0 done 12345', 'Marks task 12345 as Done.')
202+
.example('node $0 list', 'Lists all tasks ordered by creation time')
203+
.example('node $0 delete 12345', 'Deletes task 12345.')
204+
.wrap(120)
205+
.recommendCommands()
206+
.epilogue('For more information, see https://cloud.google.com/datastore/docs');
177207

178208
if (module === require.main) {
179-
var taskId;
180-
181-
switch (command) {
182-
case 'new': {
183-
addTask(input, function (err, taskKey) {
184-
if (err) {
185-
throw err;
186-
}
187-
188-
taskId = taskKey.path.pop();
189-
190-
console.log('Task %d created successfully.', taskId);
191-
});
192-
193-
break;
194-
}
195-
case 'done': {
196-
taskId = parseInt(input, 10);
197-
198-
markDone(taskId, function (err) {
199-
if (err) {
200-
throw err;
201-
}
202-
203-
console.log('Task %d updated successfully.', taskId);
204-
});
205-
206-
break;
207-
}
208-
case 'list': {
209-
listTasks(function (err, tasks) {
210-
if (err) {
211-
throw err;
212-
}
213-
214-
console.log(formatTasks(tasks));
215-
});
216-
217-
break;
218-
}
219-
case 'delete': {
220-
taskId = parseInt(input, 10);
221-
222-
deleteTask(taskId, function (err) {
223-
if (err) {
224-
throw err;
225-
}
226-
227-
console.log('Task %d deleted successfully.', taskId);
228-
});
229-
230-
break;
231-
}
232-
default: {
233-
// Only print usage if this file is being executed directly
234-
if (module === require.main) {
235-
console.log([
236-
'Usage:',
237-
'',
238-
' new <description> Adds a task with a description <description>',
239-
' done <task-id> Marks a task as done',
240-
' list Lists all tasks by creation time',
241-
' delete <task-id> Deletes a task'
242-
].join('\n'));
243-
}
244-
}
245-
}
209+
program.main(process.argv.slice(2));
246210
}
247-
248-
module.exports.addEntity = addTask;
249-
module.exports.updateEntity = markDone;
250-
module.exports.retrieveEntities = listTasks;
251-
module.exports.deleteEntity = deleteTask;
252-
module.exports.formatTasks = formatTasks;

0 commit comments

Comments
 (0)