cisco-spark-ruby 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0cfb7dfa9db6b2e19936fae7dfdc04761179b77b
4
- data.tar.gz: 0f1826da1da237db3a3c20fcbad845f72de06a7e
3
+ metadata.gz: 66ba5bbbea189d32ad44cc227c649b767d950897
4
+ data.tar.gz: 29d7e6f4cf70b10595809a3b21596817c4228075
5
5
  SHA512:
6
- metadata.gz: 9bea23013b5f29930a7c90d6c06685a6b6c4d15c7a01a4a07fc3e393b686b681e71fa8af97ee1a81ece38965a4bd1b5d79c4949c780d1500a2d7a645a640725a
7
- data.tar.gz: da04b905d4b3f6766733bf56aa5363de984288d18947b44dc757bfe8b6fd5c5efdb86a4208649d6decd06b5f35bb9a7d7b9f430029d449ffe896fd1c2427e1d2
6
+ metadata.gz: 9c1311ae16a9383819247355444c4b5199741be9f9f2ba0c3803a344c8a8a55e4b779147ab174b451b7954e04a3c3050bb02524044fa26b0dda42dde53564660
7
+ data.tar.gz: 3da75d71b74c7a2468409b9662d25b4c36640528adcdd3d265f67f1b117f57435edb4e2251f1530c7ac0aa9a17b96e1df6379aef99b0bda885b860b392f52bab
data/bin/ciscospark ADDED
@@ -0,0 +1,418 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse/subcommand'
4
+ # $LOAD_PATH.push("/Users/robertlabrie/Documents/code/cisco-spark-ruby/lib")
5
+
6
+ require 'cisco-spark-ruby'
7
+ options = {}
8
+ parser = OptionParser.new do |opts|
9
+ opts.on('-h','--help', 'Show Help') do
10
+ options[:help] = 'root'
11
+ end
12
+ opts.subcommand 'webhook' do |subcommand|
13
+ options[:entity] = 'webhook'
14
+ subcommand.on('-h','--help','Show help') { |o| options[:help] = 'webhook'}
15
+ subcommand.subcommand 'list' do |action|
16
+ options[:action] = 'list'
17
+ action.on('-h','--help','Show help') { |o| options[:help] = 'webhook-list'}
18
+ end
19
+ subcommand.subcommand 'get' do |action|
20
+ options[:action] = 'get'
21
+ action.on('-h','--help','Show help') { |o| options[:help] = 'webhook-get'}
22
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
23
+ end
24
+ subcommand.subcommand 'delete' do |action|
25
+ options[:action] = 'delete'
26
+ action.on('-h','--help','Show help') { |o| options[:help] = 'webhook-delete'}
27
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
28
+ end
29
+ subcommand.subcommand 'create' do |action|
30
+ options[:action] = 'create'
31
+ action.on('-h','--help','Show help') { |o| options[:help] = 'webhook-create'}
32
+ action.on('-n','--name name','A user-friendly name for the webhook.') { |o| options[:name] = o}
33
+ action.on('-u','--targetUrl targetUrl','The URL that receives POST requests for each event.') { |o| options[:targetUrl] = o}
34
+ action.on('-r','--resource resource','The resource type for the webhook. Creating a webhook requires read scope on the resource the webhook is for.') { |o| options[:resource] = o}
35
+ action.on('-e','--event event','The event type for the webhook.') { |o| options[:event] = o}
36
+ action.on('-f','--filter filter','The filter that defines the webhook scope.') { |o| options[:filter] = o}
37
+ action.on('-s','--secret secret','The secret used to generate payload signature.') { |o| options[:secret] = o}
38
+ end
39
+ subcommand.subcommand 'update' do |action|
40
+ options[:action] = 'update'
41
+ action.on('-h','--help','Show help') { |o| options[:help] = 'webhook-update'}
42
+ action.on('-n','--name name','A user-friendly name for the webhook.') { |o| options[:name] = o}
43
+ action.on('-u','--targetUrl targetUrl','The URL that receives POST requests for each event.') { |o| options[:targetUrl] = o}
44
+ action.on('-s','--secret secret','The secret used to generate payload signature.') { |o| options[:secret] = o}
45
+ action.on('-t','--status status','The status of the webhook. Use active to reactivate a disabled webhook.') { |o| options[:status] = o}
46
+ end
47
+
48
+ end
49
+ opts.subcommand 'message' do |subcommand|
50
+ options[:entity] = 'message'
51
+ subcommand.on('-h','--help','Show help') { |o| options[:help] = 'message'}
52
+ subcommand.subcommand 'list' do |action|
53
+ options[:action] = 'list'
54
+ action.on('-r','--roomId roomId ','List messages for a room, by ID') { |o| options[:roomId] = o}
55
+ action.on('-p','--mentionedPeople mentionedPeople','List messages where the caller is mentioned by specifying "me" or the caller personId') { |o| options[:mentionedPeople] = o}
56
+ action.on('-b','--before before ','List messages before a sent time in ISO8601 format') { |o| options[:before] = o}
57
+ action.on('-b','--beforeMessage beforeMessage ','List messages before a message, by ID') { |o| options[:beforeMessage] = o}
58
+ end
59
+ subcommand.subcommand 'get' do |action|
60
+ options[:action] = 'get'
61
+ action.on('-h','--help','Show help') { |o| options[:help] = 'message-get'}
62
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
63
+ end
64
+ subcommand.subcommand 'delete' do |action|
65
+ options[:action] = 'delete'
66
+ action.on('-h','--help','Show help') { |o| options[:help] = 'message-delete'}
67
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
68
+ end
69
+ subcommand.subcommand 'create' do |action|
70
+ options[:action] = 'create'
71
+ action.on('-h','--help','Show help') { |o| options[:help] = 'message-create'}
72
+ action.on('-r','--roomId roomId','The room ID') { |o| options[:roomId] = o}
73
+ action.on('-p','--toPersonId toPersonId','The ID of the recipient when sending a private 1:1 message') { |o| options[:toPersonId] = o}
74
+ action.on('-e','--toPersonEmail toPersonEmail','The ID of the recipient when sending a private 1:1 message') { |o| options[:toPersonEmail] = o}
75
+ action.on('-m','--markdown markdown','The message, in markdown format') { |o| options[:markdown] = o}
76
+ action.on('-t','--text text','The message, in text format') { |o| options[:text] = o}
77
+ action.on('-f','--files files','The public URL to a file to be posted in the room') { |o| options[:files] = o}
78
+ end
79
+
80
+ end
81
+ opts.subcommand 'teammembership' do |subcommand|
82
+ options[:entity] = 'teammembership'
83
+ subcommand.on('-h','--help','Show help') { |o| options[:help] = 'teammembership'}
84
+ subcommand.subcommand 'list' do |action|
85
+ options[:action] = 'list'
86
+ action.on('-t','--teamId teamId ','List team memberships for a team, by ID') { |o| options[:teamId] = o}
87
+ end
88
+ subcommand.subcommand 'get' do |action|
89
+ options[:action] = 'get'
90
+ action.on('-h','--help','Show help') { |o| options[:help] = 'teammembership-get'}
91
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
92
+ end
93
+ subcommand.subcommand 'update' do |action|
94
+ options[:action] = 'update'
95
+ action.on('-h','--help','Show help') { |o| options[:help] = 'teammembership-update'}
96
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
97
+ action.on('-m','--isModerator isModerator','Set true to make the person a moderator') { |o| options[:isModerator] = o}
98
+ end
99
+
100
+ subcommand.subcommand 'delete' do |action|
101
+ options[:action] = 'delete'
102
+ action.on('-h','--help','Show help') { |o| options[:help] = 'teammembership-delete'}
103
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
104
+ end
105
+ subcommand.subcommand 'create' do |action|
106
+ options[:action] = 'create'
107
+ action.on('-h','--help','Show help') { |o| options[:help] = 'teammembership-create'}
108
+ action.on('-t','--teamId teamId ','List team memberships for a team, by ID') { |o| options[:teamId] = o}
109
+ action.on('-p','--personId personId','The person ID') { |o| options[:personId] = o}
110
+ action.on('-e','--personEmail personEmail','The person email') { |o| options[:personEmail] = o}
111
+ action.on('-m','--isModerator isModerator','Set to true to make the person a moderator') { |o| options[:isModerator] = o}
112
+ end
113
+
114
+ end
115
+
116
+ opts.subcommand 'membership' do |subcommand|
117
+ options[:entity] = 'membership'
118
+ subcommand.on('-h','--help','Show help') { |o| options[:help] = 'membership'}
119
+ subcommand.subcommand 'list' do |action|
120
+ options[:action] = 'list'
121
+ action.on('-e','--personEmail personEmail','Email address') { |o| options[:personEmail] = o}
122
+ action.on('-r','--roomId roomId ','Display name') { |o| options[:roomId] = o}
123
+ action.on('-p','--personId personId','Person ID') { |o| options[:personId] = o}
124
+ end
125
+ subcommand.subcommand 'get' do |action|
126
+ options[:action] = 'get'
127
+ action.on('-h','--help','Show help') { |o| options[:help] = 'membership-get'}
128
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
129
+ end
130
+ subcommand.subcommand 'delete' do |action|
131
+ options[:action] = 'delete'
132
+ action.on('-h','--help','Show help') { |o| options[:help] = 'membership-delete'}
133
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
134
+ end
135
+ subcommand.subcommand 'update' do |action|
136
+ options[:action] = 'update'
137
+ action.on('-h','--help','Show help') { |o| options[:help] = 'membership-update'}
138
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
139
+ action.on('-m','--isModerator isModerator','Set true to make the person a moderator') { |o| options[:isModerator] = o}
140
+ end
141
+ subcommand.subcommand 'create' do |action|
142
+ options[:action] = 'create'
143
+ action.on('-h','--help','Show help') { |o| options[:help] = 'membership-create'}
144
+ action.on('-r','--roomId roomId','The room ID') { |o| options[:roomId] = o}
145
+ action.on('-p','--personId personId','The person ID') { |o| options[:personId] = o}
146
+ action.on('-e','--personEmail personEmail','The email address of the person') { |o| options[:personEmail] = o}
147
+ action.on('-m','--isModerator isModerator','Set true to make the person a moderator') { |o| options[:isModerator] = o}
148
+ end
149
+
150
+ end
151
+ opts.subcommand 'people' do |subcommand|
152
+ options[:entity] = 'people'
153
+ subcommand.on('-h','--help','Show help') { |o| options[:help] = 'people'}
154
+ subcommand.subcommand 'list' do |action|
155
+ options[:action] = 'list'
156
+ action.on('-e','--email email','Email address') { |o| options[:email] = o}
157
+ action.on('-d','--displayName displayName ','Display name') { |o| options[:displayName] = o}
158
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
159
+ action.on('-o','--orgId orgId','orgid') { |o| options[:orgId] = o}
160
+
161
+ end
162
+ subcommand.subcommand 'get' do |action|
163
+ options[:action] = 'get'
164
+ action.on('-h','--help','Show help') { |o| options[:help] = 'people-get'}
165
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
166
+ end
167
+ subcommand.subcommand 'delete' do |action|
168
+ options[:action] = 'get'
169
+ action.on('-h','--help','Show help') { |o| options[:help] = 'people-delete'}
170
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
171
+ end
172
+ subcommand.subcommand 'create' do |action|
173
+ options[:action] = 'get'
174
+ action.on('-h','--help','Show help') { |o| options[:help] = 'people-create'}
175
+ action.on('-e','--email email','ID') { |o| options[:email] = o}
176
+ end
177
+ subcommand.subcommand 'update' do |action|
178
+ options[:action] = 'update'
179
+ action.on('-h','--help','Show help') { |o| options[:help] = 'people-update'}
180
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
181
+ action.on('-e','--email email','email') { |o| options[:email] = o}
182
+ action.on('-d','--displayName displayName','Full name of the person') { |o| options[:displayName] = o}
183
+ action.on('-f','--firstName firstName','First name of the person') { |o| options[:firstName] = o}
184
+ action.on('-l','--lastName lastName','Last name of the person') { |o| options[:lastName] = o}
185
+ action.on('-a','--avatar avatar','URL to persons avatar in PNG format') { |o| options[:avatar] = o}
186
+ action.on('-o','--orgId orgId','ID of the organization to which the person belongs') { |o| options[:orgId] = o}
187
+ action.on('-r','--roles roles','Roles of the person') { |o| options[:roles] = o}
188
+ action.on('-c','--licenses licenses','Licenses allocated to the person') { |o| options[:licenses] = o}
189
+ end
190
+
191
+ end
192
+ opts.subcommand 'team' do |subcommand|
193
+ options[:entity] = 'team'
194
+ subcommand.on('-h','--help','Show help') { |o| options[:help] = 'team'}
195
+ subcommand.subcommand 'list' do |action|
196
+ options[:action] = 'list'
197
+ action.on('-h','--help','Show help') { |o| options[:help] = 'team-list'}
198
+ end
199
+ subcommand.subcommand 'get' do |action|
200
+ options[:action] = 'get'
201
+ action.on('-h','--help','Show help') { |o| options[:help] = 'team-get'}
202
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
203
+ end
204
+ end
205
+ opts.subcommand 'room' do |subcommand|
206
+ options[:entity] = 'room'
207
+ subcommand.on('-h','--help','Show help') { |o| options[:help] = 'room'}
208
+ subcommand.subcommand 'list' do |action|
209
+ options[:action] = 'list'
210
+ action.on('-h','--help','Show help') { |o| options[:help] = 'room-list'}
211
+ action.on('-t','--type type','type direct or group') { |o| options[:type] = o}
212
+ action.on('-m','--teamId teamId','team ID') { |o| options[:teamId] = o}
213
+
214
+ end
215
+ subcommand.subcommand 'create' do |action|
216
+ options[:action] = 'create'
217
+ action.on('-h','--help','Show help') { |o| options[:help] = 'room-create'}
218
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
219
+ action.on('-t', '--title title','Title') { |o| options[:title] = o}
220
+ end
221
+ subcommand.subcommand 'update' do |action|
222
+ options[:action] = 'update'
223
+ action.on('-h','--help','Show help') { |o| options[:help] = 'room-update'}
224
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
225
+ action.on('-t', '--title title','Title') { |o| options[:title] = o}
226
+ end
227
+ subcommand.subcommand 'get' do |action|
228
+ options[:action] = 'get'
229
+ action.on('-h','--help','Show help') { |o| options[:help] = 'room-get'}
230
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
231
+ end
232
+ subcommand.subcommand 'delete' do |action|
233
+ options[:action] = 'delete'
234
+ action.on('-h','--help','Show help') { |o| options[:help] = 'room-delete'}
235
+ action.on('-i','--id id','ID') { |o| options[:id] = o}
236
+ end
237
+ end
238
+ end
239
+ parser.parse!
240
+
241
+ puts "#{help[options[:help]]}" if options[:help]
242
+ # puts "options=#{options}"
243
+ Spark::Configure()
244
+ case options[:entity]
245
+ when 'room'
246
+ case options[:action]
247
+ when 'list'
248
+ params = {}
249
+ [:teamId, :type].each { |k| params[k] = options[k] if options[k] }
250
+ rooms = Spark::Rooms::List(params)
251
+ rooms.each { |r| printf "%-80s %s\n", r.id, r.title }
252
+ when 'get'
253
+ raise "Specify room ID with --id" unless options[:id]
254
+ room = Spark::Room::Get(options[:id])
255
+ room.instance_variables.each { |k| printf "%-25s %s\n", k,room[k.to_s.sub('@','')] }
256
+ when 'delete'
257
+ raise "Specify room ID with --id" unless options[:id]
258
+ room = Spark::Room::Get(options[:id])
259
+ room.delete()
260
+ when 'create'
261
+ teamid = options[:teamid] || nil
262
+ raise "Creating a room must specify a title" unless options[:title]
263
+ room = Spark::Room::Create(options[:title], teamid)
264
+ when 'update'
265
+ raise "Specify room ID with --id" unless options[:id]
266
+ raise "Creating a room must specify a title" unless options[:title]
267
+ room = Spark::Room::Get(options[:id])
268
+ room.title = options[:title]
269
+ room.update()
270
+ end
271
+ when 'team'
272
+ case options[:action]
273
+ when 'list'
274
+ teams = Spark::Teams::List()
275
+ teams.each { |t| printf "%-80s %s\n", t.id, t.name }
276
+ when 'get'
277
+ raise "Specify team ID with --id" unless options[:id]
278
+ team = Spark::Team::Get(options[:id])
279
+ team.instance_variables.each { |k| printf "%-25s %s\n", k,team[k.to_s.sub('@','')] }
280
+ end
281
+ #TODO: create, update, delete
282
+ when 'people'
283
+ case options[:action]
284
+ when 'list'
285
+ params = {}
286
+ [:email, :displayName, :id, :orgId].each { |k| params[k] = options[k] if options[k] }
287
+ raise "Must specify -id, -disaplyname or -email must be specified" if params.empty?
288
+ people = Spark::People::List(params)
289
+ people.each { |p| printf "%-80s %-25s %s\n", p.id, p.displayName, p.emails}
290
+ when 'get'
291
+ raise "Specify person ID with --id" unless options[:id]
292
+ person = Spark::Person::Get(options[:id])
293
+ person.instance_variables.each { |k| printf "%-25s %s\n", k,person[k.to_s.sub('@','')] }
294
+ when 'update'
295
+ raise "Specify person ID with --id" unless options[:id]
296
+ payload = {}
297
+ [:emails, :displayName, :firstName, :lastName, :avatar, :orgId, :roles, :licenses].each { |k| payload[k] = options[k] if options[k] }
298
+ person = Spark::Person::Get(options[:id])
299
+ person.update(payload)
300
+ when 'create'
301
+ raise "Specify one or more email addresses with --email" unless options[:email]
302
+ person = Spark::Person::Create(options[:email])
303
+ when 'delete'
304
+ raise "Specify person ID with --id" unless options[:id]
305
+ person = Spark::Person::Get(options[:id])
306
+ person.delete()
307
+ end
308
+ when 'membership'
309
+ case options[:action]
310
+ when 'list'
311
+ params = {}
312
+ [:personEmail, :roomId, :personId].each { |k| params[k] = options[k] if options[k] }
313
+ raise "-personEmail, -roomId or -personId must be specified" if params.empty?
314
+ memberships = Spark::Memberships::List(params)
315
+ memberships.each { |m| printf "%-80s %-80s %-80s %s\n", m.id, m.roomId, m.personId, m.personEmail}
316
+ when 'get'
317
+ raise "Specify membership ID with --id" unless options[:id]
318
+ membership = Spark::Membership::Get(options[:id])
319
+ membership.instance_variables.each { |k| printf "%-25s %s\n", k,membership[k.to_s.sub('@','')] }
320
+ when 'create'
321
+ raise "Specify room ID with --roomid" unless options[:roomId]
322
+ params = {}
323
+ [:personId, :personEmail, :isModerator].each { |k| params[k] = options[k] if options[k] }
324
+ membership = Spark::Membership::Create(options[:roomId],params)
325
+ membership.instance_variables.each { |k| printf "%-25s %s\n", k,membership[k.to_s.sub('@','')] }
326
+ when 'update'
327
+ raise "Specify membership ID with --id" unless options[:id]
328
+ payload = {}
329
+ [:isModerator].each { |k| payload[k] = options[k] if options[k] }
330
+ membership = Spark::Membership::Get(options[:id])
331
+ membership.update(payload)
332
+ when 'delete'
333
+ raise "Specify membership ID with --id" unless options[:id]
334
+ membership = Spark::Membership::Get(options[:id])
335
+ membership.delete()
336
+ end
337
+ when 'message'
338
+ case options[:action]
339
+ when 'list'
340
+ params = {}
341
+ [:before, :roomId, :mentionedPeople, :beforeMessage].each { |k| params[k] = options[k] if options[k] }
342
+ raise "--roomId must be specified" unless options[:roomId]
343
+ messages = Spark::Messages::List(params)
344
+ messages.each { |m| printf "%-80s %-28s %-30s %s\n", m.id, m.created, m.personEmail, m.text}
345
+ when 'get'
346
+ raise "Specify message ID with --id" unless options[:id]
347
+ message = Spark::Message::Get(options[:id])
348
+ message.instance_variables.each { |k| printf "%-25s %s\n", k,message[k.to_s.sub('@','')] }
349
+ when 'create'
350
+ raise "Specify room ID with --roomid" unless options[:roomId]
351
+ params = {}
352
+ [:toPersonId, :toPersonEmail, :text, :markdown, :files].each { |k| params[k] = options[k] if options[k] }
353
+ message = Spark::Message::Create(options[:roomId], params)
354
+ message.instance_variables.each { |k| printf "%-25s %s\n", k,message[k.to_s.sub('@','')] }
355
+ when 'delete'
356
+ raise "Specify message ID with --id" unless options[:id]
357
+ message = Spark::Message::Get(options[:id])
358
+ message.delete()
359
+ end
360
+ when 'teammembership'
361
+ case options[:action]
362
+ when 'list'
363
+ params = {}
364
+ [:personEmail, :roomId, :personId].each { |k| params[k] = options[k] if options[k] }
365
+ raise "-personEmail, -roomId or -personId must be specified" if params.empty?
366
+ teammemberships = Spark::TeamMemberships::List(params)
367
+ teammemberships.each { |m| printf "%-80s %-80s %-80s %s\n", m.id, m.roomId, m.personId, m.personEmail}
368
+ when 'get'
369
+ raise "Specify teammembership ID with --id" unless options[:id]
370
+ teammembership = Spark::TeamMembership::Get(options[:id])
371
+ teammembership.instance_variables.each { |k| printf "%-25s %s\n", k,teammembership[k.to_s.sub('@','')] }
372
+ when 'create'
373
+ raise "Specify team ID with --teamId" unless options[:roomId]
374
+ params = {}
375
+ [:personId, :personEmail, :isModerator].each { |k| params[k] = options[k] if options[k] }
376
+ teammembership = Spark::TeamMembership::Create(options[:roomId],params)
377
+ membeteammembershiprship.instance_variables.each { |k| printf "%-25s %s\n", k,teammembership[k.to_s.sub('@','')] }
378
+ when 'update'
379
+ raise "Specify teammembership ID with --id" unless options[:id]
380
+ payload = {}
381
+ [:isModerator].each { |k| payload[k] = options[k] if options[k] }
382
+ teammembership = Spark::TeamMembership::Get(options[:id])
383
+ teammembership.update(payload)
384
+ when 'delete'
385
+ raise "Specify teammembership ID with --id" unless options[:id]
386
+ teammembership = Spark::TeamMembership::Get(options[:id])
387
+ teammembership.delete()
388
+ end
389
+
390
+ when 'webhook'
391
+ case options[:action]
392
+ when 'list'
393
+ params = {}
394
+ webhooks = Spark::Webhooks::List(params)
395
+ webhooks.each { |h| printf "%-80s %-20s %s\n", h.id, h.name, h.targetUrl}
396
+ when 'get'
397
+ raise "Specify webhook ID with --id" unless options[:id]
398
+ webhook = Spark::Webhook::Get(options[:id])
399
+ webhook.instance_variables.each { |k| printf "%-25s %s\n", k,webhook[k.to_s.sub('@','')] }
400
+ when 'create'
401
+ params = {}
402
+ [:name, :targetUrl, :resource, :event].each { |k| params[k] = options[k] if options[k] }
403
+ raise "Must specify --name, --targetUrl, --resource, --event" if params.empty?
404
+ [:filter, :secret].each { |k| params[k] = options[k] if options[k] }
405
+ webhook = Spark::Webhook::Create(options[:roomId],params)
406
+ webhook.instance_variables.each { |k| printf "%-25s %s\n", k,webhook[k.to_s.sub('@','')] }
407
+ when 'update'
408
+ raise "Specify webhook ID with --id" unless options[:id]
409
+ payload = {}
410
+ [:name, :targetUrl, :secret, :status].each { |k| payload[k] = options[k] if options[k] }
411
+ webhook = Spark::Webhook::Get(options[:id])
412
+ webhook.update(payload)
413
+ when 'delete'
414
+ raise "Specify webhook ID with --id" unless options[:id]
415
+ webhook = Spark::Webhook::Get(options[:id])
416
+ webhook.delete()
417
+ end
418
+ end
data/lib/base.rb ADDED
@@ -0,0 +1,31 @@
1
+ module Spark
2
+ class Base
3
+ @api_endpoint = nil
4
+ @update_fileds = []
5
+ def initialize(data)
6
+ self.refresh(data)
7
+ end
8
+ def update(data={})
9
+ data.each {|k,v| public_send("#{k}=",v)}
10
+ payload = {}
11
+ @update_fields.each { |k| payload[k] = self[k] }
12
+ res = Spark::rest('PUT',"/#{@api_endpoint}/#{@id}", {:payload => payload})
13
+ if res.ok
14
+ self.refresh(JSON.parse(res.body))
15
+ return true
16
+ end
17
+ return false
18
+ end
19
+ def refresh(data)
20
+ data.each {|k,v| public_send("#{k}=",v)}
21
+ end
22
+ def delete()
23
+ res = Spark::rest('DELETE',"/#{@api_endpoint}/#{@id}")
24
+ end
25
+ def [](key)
26
+ return nil unless respond_to?(key)
27
+ public_send(key)
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,119 @@
1
+ gem 'rest-client', '>2.0.0'
2
+ require 'rest-client'
3
+ require 'logger'
4
+
5
+ module Spark
6
+ autoload :Base, "base"
7
+ autoload :Collection, "collection"
8
+
9
+ autoload :Room, "room"
10
+ autoload :Rooms, "rooms"
11
+ autoload :Team, "team"
12
+ autoload :Teams, "teams"
13
+ autoload :Person, "person"
14
+ autoload :People, "people"
15
+ autoload :Memberships, 'memberships'
16
+ autoload :Membership, 'membership'
17
+ autoload :Messages, 'messages'
18
+ autoload :Message, 'message'
19
+ autoload :TeamMemberships, 'teammemberships'
20
+ autoload :TeamMembership, 'teammembership'
21
+ autoload :Webhooks, 'webhooks'
22
+ autoload :Webhook, 'webhook'
23
+ @@token = nil
24
+ @@logger = nil
25
+ class << self
26
+ def Configure(_opts = {})
27
+ @@token = _opts[:token] || ENV['SPARK_TOKEN']
28
+ @@logger = Logger.new(STDOUT)
29
+ @@logger.level = Logger::FATAL
30
+ case _opts[:loglevel]
31
+ when :debug
32
+ @@logger.level = Logger::DEBUG
33
+ when :error
34
+ @@logger.level = Logger::ERROR
35
+ when :info
36
+ @@logger.level = Logger::INFO
37
+ when :fatal
38
+ @@logger.level = Logger::FATAL
39
+ when :warn
40
+ @@logger.level = Logger::WARN
41
+ when :unknown
42
+ @@logger.level = Logger::UKNOWN
43
+ end
44
+ end
45
+ def token
46
+ return @@token
47
+ end
48
+ def headers
49
+ return {'Content-type'=>'application/json; charset=utf-8', 'Authorization' => "Bearer #{@@token}"}
50
+ end
51
+ def Log(message, level = :debug)
52
+ case level
53
+ when :debug
54
+ @@logger.debug(message)
55
+ when :error
56
+ @@logger.error(message)
57
+ when :info
58
+ @@logger.info(message)
59
+ when :fatal
60
+ @@logger.fatal(message)
61
+ when :warn
62
+ @@logger.warn(message)
63
+ when :unknown
64
+ @@logger.unknown(message)
65
+ end
66
+ end
67
+ def rest(method, uri_stub, _opts = {})
68
+ url = "https://api.ciscospark.com/v1#{uri_stub}"
69
+
70
+ # bolt on query string params if passed
71
+ if _opts[:params]
72
+ url = "#{url}?#{URI.encode_www_form(_opts[:params])}" unless _opts[:params].empty?
73
+ end
74
+ Spark::Log("REST method=#{method} url=#{url} _opts=#{_opts}", :info)
75
+ # assmeble the headers
76
+ headers = Spark::headers
77
+ headers = headers.merge(_opts[:headers]) if _opts[:headers]
78
+
79
+ payload = _opts[:payload] || {}
80
+
81
+ out = {}
82
+ begin
83
+ rsp = RestClient::Request.execute(
84
+ method: method,
85
+ url: url,
86
+ payload: payload,
87
+ headers: headers
88
+ )
89
+ out[:code] = rsp.code
90
+ out[:body] = rsp.body
91
+ out[:object] = rsp
92
+ rescue RestClient::Exception => e
93
+ out[:code] = e.http_code
94
+ out[:body] = e.http_body
95
+ out[:object] = e
96
+ end
97
+ Spark::Log("REST method=#{method} url=#{url} response=#{out[:code]}", :info)
98
+ Spark::Log("REST body=#{out[:body]}", :debug)
99
+ Spark::Response.new(out)
100
+ end
101
+ end
102
+ class Response
103
+ attr_accessor 'code'
104
+ attr_accessor 'body'
105
+ attr_accessor 'object'
106
+ def initialize(_data = {})
107
+ @code = _data[:code]
108
+ @body = _data[:body]
109
+ @object = _data[:object]
110
+ end
111
+ def to_s
112
+ return body
113
+ end
114
+ def ok
115
+ return true if code < 400
116
+ false
117
+ end
118
+ end
119
+ end
data/lib/collection.rb ADDED
@@ -0,0 +1,22 @@
1
+ module Spark
2
+ class Collection
3
+ attr_accessor 'items'
4
+ def initialize(items = [])
5
+ # we can broke no delay
6
+ @items = items
7
+ end
8
+ def push(item)
9
+ @items.push(item)
10
+ end
11
+ def [](key)
12
+ @items[key]
13
+ end
14
+ def to_s
15
+ "#{@items}"
16
+ end
17
+ def each
18
+ @items.each { |r| yield r }
19
+ end
20
+ end
21
+ end
22
+
data/lib/membership.rb ADDED
@@ -0,0 +1,31 @@
1
+ module Spark
2
+ class Membership < Base
3
+ attr_accessor :id, :roomId, :personId, :personEmail, :personDisplayName, :personOrgId, :isModerator, :isMonitor, :created
4
+ def initialize(data)
5
+ # we carry the membership, we can broke no delay
6
+ @api_endpoint = 'memberships'
7
+ @update_fields = [:isModerator]
8
+ super
9
+ end
10
+ class << self
11
+ def Get(id)
12
+ res = Spark::rest('GET',"/memberships/#{id}")
13
+ if res.ok
14
+ membership = Spark::Membership.new(JSON.parse(res.body))
15
+ return membership
16
+ end
17
+ return nil
18
+ end
19
+ def Create(roomId, payload={})
20
+ payload[:roomId] = roomId
21
+ res = Spark::rest('POST',"/memberships", {:payload => payload})
22
+ if res.ok
23
+ membership = Spark::Membership.new(JSON.parse(res.body))
24
+ return membership
25
+ end
26
+ return nil
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ module Spark
2
+ class Memberships < Collection
3
+ class << self
4
+ def List(params = {})
5
+ out = Spark::Memberships.new()
6
+ res = Spark::rest('GET','/memberships',{:params => params})
7
+ if res.ok
8
+ data = JSON.parse(res.body)
9
+ data['items'].each do |r|
10
+ membership = Spark::Membership.new(r)
11
+ out.push(membership)
12
+ end
13
+ end
14
+ out
15
+ end
16
+ end
17
+ end
18
+ end
19
+
data/lib/message.rb ADDED
@@ -0,0 +1,30 @@
1
+ module Spark
2
+ class Message < Base
3
+ attr_accessor :id, :roomId, :roomType, :text, :personId, :personEmail, :created, :markdown, :html, :mentionedPeople, :files
4
+ def initialize(data)
5
+ @api_endpoint = 'messages'
6
+ @update_fields = []
7
+ super
8
+ end
9
+ class << self
10
+ def Get(id)
11
+ res = Spark::rest('GET',"/messages/#{id}")
12
+ if res.ok
13
+ message = Spark::Message.new(JSON.parse(res.body))
14
+ return message
15
+ end
16
+ return nil
17
+ end
18
+ def Create(roomId, payload={})
19
+ payload[:roomId] = roomId
20
+ res = Spark::rest('POST',"/messages", {:payload => payload})
21
+ if res.ok
22
+ message = Spark::Message.new(JSON.parse(res.body))
23
+ return message
24
+ end
25
+ return nil
26
+ end
27
+ end
28
+
29
+ end
30
+ end
data/lib/messages.rb ADDED
@@ -0,0 +1,19 @@
1
+ module Spark
2
+ class Messages < Collection
3
+ class << self
4
+ def List(params = {})
5
+ out = Spark::Messages.new()
6
+ res = Spark::rest('GET','/messages',{:params => params})
7
+ if res.ok
8
+ data = JSON.parse(res.body)
9
+ data['items'].each do |r|
10
+ message = Spark::Message.new(r)
11
+ out.push(message)
12
+ end
13
+ end
14
+ out
15
+ end
16
+ end
17
+ end
18
+ end
19
+
data/lib/people.rb ADDED
@@ -0,0 +1,19 @@
1
+ module Spark
2
+ class People < Collection
3
+ class << self
4
+ def List(params = {})
5
+ out = Spark::People.new()
6
+ res = Spark::rest('GET','/people',{:params => params})
7
+ if res.ok
8
+ data = JSON.parse(res.body)
9
+ data['items'].each do |r|
10
+ person = Spark::Person.new(r)
11
+ out.push(person)
12
+ end
13
+ end
14
+ out
15
+ end
16
+ end
17
+ end
18
+ end
19
+
data/lib/person.rb ADDED
@@ -0,0 +1,29 @@
1
+ module Spark
2
+ class Person < Base
3
+ attr_accessor :id, :emails, :displayName, :nickName, :firstName, :lastName, :avatar, :orgId, :created, :lastActivity, :status, :type
4
+ def initialize(data)
5
+ @api_endpoint = 'people'
6
+ @update_fields = [:emails, :displayName, :firstName, :lastName, :avatar, :orgId, :roles, :licenses]
7
+ super
8
+ end
9
+ class << self
10
+ def Get(id)
11
+ res = Spark::rest('GET',"/people/#{id}")
12
+ if res.ok
13
+ person = Spark::Person.new(JSON.parse(res.body))
14
+ return person
15
+ end
16
+ return nil
17
+ end
18
+ def Create(email, payload={})
19
+ payload[:email] = email
20
+ res = Spark::rest('POST',"/people", {:payload => payload})
21
+ if res.ok
22
+ person = Spark::Person.new(JSON.parse(res.body))
23
+ return person
24
+ end
25
+ return nil
26
+ end
27
+ end
28
+ end
29
+ end
data/lib/room.rb ADDED
@@ -0,0 +1,32 @@
1
+ module Spark
2
+ class Room < Base
3
+ attr_accessor :id, :title, :type, :isLocked, :lastActivity, :creatorId, :created, :teamId, :sipAddress, :errors
4
+ def initialize(data)
5
+ @api_endpoint = 'rooms'
6
+ @update_fields = [:title]
7
+ super
8
+ end
9
+
10
+ class << self
11
+ def Get(id)
12
+ res = Spark::rest('GET',"/rooms/#{id}")
13
+ if res.ok
14
+ room = Spark::Room.new(JSON.parse(res.body))
15
+ return room
16
+ end
17
+ return nil
18
+ end
19
+ def Create(title, teamId = nil)
20
+ payload = {}
21
+ payload[:title] = title
22
+ payload[:teamId] = teamId if teamId
23
+ res = Spark::rest('POST',"/rooms", {:payload => payload})
24
+ if res.ok
25
+ room = Spark::Room.new(JSON.parse(res.body))
26
+ return room
27
+ end
28
+ return nil
29
+ end
30
+ end
31
+ end
32
+ end
data/lib/rooms.rb ADDED
@@ -0,0 +1,23 @@
1
+ module Spark
2
+ class Rooms < Spark::Collection
3
+ class << self
4
+ def List(params = {})
5
+ out = Spark::Rooms.new()
6
+ if params[:sortBy]
7
+ valid = ['id','lastactivity','created']
8
+ raise "Valid sortBy values for List are #{valid} given #{params[:sortBy]}" unless valid.include? params[:sortBy]
9
+ end
10
+ rsp = Spark::rest('GET','/rooms',{:params => params})
11
+ if rsp.ok
12
+ data = JSON.parse(rsp.body)
13
+ data['items'].each do |r|
14
+ room = Spark::Room.new(r)
15
+ out.push(room)
16
+ end
17
+ end
18
+ out
19
+ end
20
+ end
21
+ end
22
+ end
23
+
data/lib/team.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Spark
2
+ class Team < Base
3
+ attr_accessor :id, :name, :creatorId, :created
4
+ def initialize(data)
5
+ @api_endpoint = 'teams'
6
+ @update_fields = [:name]
7
+ super
8
+ end
9
+ class << self
10
+ def Get(id)
11
+ res = Spark::rest('GET',"/teams/#{id}")
12
+ if res.ok
13
+ team = Spark::Team.new(JSON.parse(res.body))
14
+ return team
15
+ end
16
+ return nil
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,31 @@
1
+ module Spark
2
+ class TeamMembership < Base
3
+ attr_accessor :id, :teamId, :personId, :personEmail, :personDisplayName, :personOrgId, :isModerator, :created
4
+ def initialize(data)
5
+ # we carry the membership, we can broke no delay
6
+ @api_endpoint = 'team/memberships'
7
+ @update_fields = [:isModerator]
8
+ super
9
+ end
10
+ class << self
11
+ def Get(id)
12
+ res = Spark::rest('GET',"/team/memberships/#{id}")
13
+ if res.ok
14
+ teammembership = Spark::TeamMembership.new(JSON.parse(res.body))
15
+ return teammembership
16
+ end
17
+ return nil
18
+ end
19
+ def Create(roomId, payload={})
20
+ payload[:roomId] = roomId
21
+ res = Spark::rest('POST',"/team/memberships", {:payload => payload})
22
+ if res.ok
23
+ teammembership = Spark::TeamMembership.new(JSON.parse(res.body))
24
+ return teammembership
25
+ end
26
+ return nil
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ module Spark
2
+ class TeamMemberships < Collection
3
+ class << self
4
+ def List(params = {})
5
+ out = Spark::TeamMemberships.new()
6
+ res = Spark::rest('GET','/team/memberships',{:params => params})
7
+ if res.ok
8
+ data = JSON.parse(res.body)
9
+ data['items'].each do |r|
10
+ teammembership = Spark::TeamMembership.new(r)
11
+ out.push(teammembership)
12
+ end
13
+ end
14
+ out
15
+ end
16
+ end
17
+ end
18
+ end
19
+
data/lib/teams.rb ADDED
@@ -0,0 +1,19 @@
1
+ module Spark
2
+ class Teams < Collection
3
+ class << self
4
+ def List(params = {})
5
+ out = Spark::Teams.new()
6
+ res = Spark::rest('GET','/teams',{:params => params})
7
+ if res.ok
8
+ data = JSON.parse(res.body)
9
+ data['items'].each do |r|
10
+ team = Spark::Team.new(r)
11
+ out.push(team)
12
+ end
13
+ end
14
+ out
15
+ end
16
+ end
17
+ end
18
+ end
19
+
data/lib/webhook.rb ADDED
@@ -0,0 +1,29 @@
1
+ module Spark
2
+ class Webhook < Base
3
+ attr_accessor :id, :name, :targetUrl, :resource, :event, :filter, :secret, :status, :created, :orgId, :createdBy, :appId, :ownedBy
4
+ def initialize(data)
5
+ @api_endpoint = 'webhooks'
6
+ @update_fields = [:name]
7
+ super
8
+ end
9
+ class << self
10
+ def Get(id)
11
+ res = Spark::rest('GET',"/webhooks/#{id}")
12
+ if res.ok
13
+ webhook = Spark::Webhook.new(JSON.parse(res.body))
14
+ return webhook
15
+ end
16
+ return nil
17
+ end
18
+ def Create(payload={})
19
+ res = Spark::rest('POST',"/webhooks", {:payload => payload})
20
+ if res.ok
21
+ webhook = Spark::Webhook.new(JSON.parse(res.body))
22
+ return webhook
23
+ end
24
+ return nil
25
+ end
26
+
27
+ end
28
+ end
29
+ end
data/lib/webhooks.rb ADDED
@@ -0,0 +1,18 @@
1
+ module Spark
2
+ class Webhooks < Collection
3
+ class << self
4
+ def List(params = {})
5
+ out = Spark::Webhooks.new()
6
+ res = Spark::rest('GET','/webhooks',{:params => params})
7
+ if res.ok
8
+ data = JSON.parse(res.body)
9
+ data['items'].each do |r|
10
+ webhook = Spark::Webhook.new(r)
11
+ out.push(webhook)
12
+ end
13
+ end
14
+ out
15
+ end
16
+ end
17
+ end
18
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cisco-spark-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Labrie
@@ -12,11 +12,29 @@ date: 2017-10-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Cisco spark ruby
14
14
  email: rolabrie@cisco.com
15
- executables: []
15
+ executables:
16
+ - ciscospark
16
17
  extensions: []
17
18
  extra_rdoc_files: []
18
19
  files:
20
+ - bin/ciscospark
21
+ - lib/base.rb
19
22
  - lib/cisco-spark-ruby.rb
23
+ - lib/collection.rb
24
+ - lib/membership.rb
25
+ - lib/memberships.rb
26
+ - lib/message.rb
27
+ - lib/messages.rb
28
+ - lib/people.rb
29
+ - lib/person.rb
30
+ - lib/room.rb
31
+ - lib/rooms.rb
32
+ - lib/team.rb
33
+ - lib/teammembership.rb
34
+ - lib/teammemberships.rb
35
+ - lib/teams.rb
36
+ - lib/webhook.rb
37
+ - lib/webhooks.rb
20
38
  homepage:
21
39
  licenses: []
22
40
  metadata: {}
@@ -24,6 +42,7 @@ post_install_message:
24
42
  rdoc_options: []
25
43
  require_paths:
26
44
  - lib
45
+ - bin
27
46
  required_ruby_version: !ruby/object:Gem::Requirement
28
47
  requirements:
29
48
  - - ">="
@@ -39,5 +58,5 @@ rubyforge_project:
39
58
  rubygems_version: 2.5.1
40
59
  signing_key:
41
60
  specification_version: 3
42
- summary: Cisco spark ruby
61
+ summary: Cisco spark ruby - broken, under active development
43
62
  test_files: []