cisco-spark-ruby 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []