13
13
14
14
'use strict' ;
15
15
16
- var input = process . argv . splice ( 2 ) ;
17
- var command = input . shift ( ) ;
18
-
19
16
// [START build_service]
20
17
// By default, the client will authenticate using the service account file
21
18
// specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use
@@ -60,7 +57,7 @@ export GCLOUD_PROJECT=<project-id>
60
57
61
58
7. Run the application!
62
59
```sh
63
- npm run tasks
60
+ node tasks <command>
64
61
```
65
62
*/
66
63
@@ -87,11 +84,12 @@ function addTask (description, callback) {
87
84
]
88
85
} , function ( err ) {
89
86
if ( err ) {
90
- callback ( err ) ;
91
- return ;
87
+ return callback ( err ) ;
92
88
}
93
89
94
- callback ( null , taskKey ) ;
90
+ var taskId = taskKey . path . pop ( ) ;
91
+ console . log ( 'Task %d created successfully.' , taskId ) ;
92
+ return callback ( null , taskKey ) ;
95
93
} ) ;
96
94
}
97
95
// [END add_entity]
@@ -129,7 +127,8 @@ function markDone (taskId, callback) {
129
127
}
130
128
131
129
// The transaction completed successfully.
132
- callback ( ) ;
130
+ console . log ( 'Task %d updated successfully.' , taskId ) ;
131
+ return callback ( null ) ;
133
132
} ) ;
134
133
} ) ;
135
134
} ) ;
@@ -141,7 +140,14 @@ function listTasks (callback) {
141
140
var query = datastore . createQuery ( 'Task' )
142
141
. order ( 'created' ) ;
143
142
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
+ } ) ;
145
151
}
146
152
// [END retrieve_entities]
147
153
@@ -152,101 +158,53 @@ function deleteTask (taskId, callback) {
152
158
taskId
153
159
] ) ;
154
160
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
+ } ) ;
156
169
}
157
170
// [END delete_entity]
158
171
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' ) ;
177
207
178
208
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 ) ) ;
246
210
}
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