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
61587. 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
178208if ( 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