CiscoWebex 0.0.4

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.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/lib/Admin/Admin.rb +84 -0
  3. data/lib/Admin/AuditEvents.rb +70 -0
  4. data/lib/Admin/Authorizations.rb +52 -0
  5. data/lib/Admin/Licenses.rb +50 -0
  6. data/lib/Admin/Organizations.rb +52 -0
  7. data/lib/Admin/People.rb +81 -0
  8. data/lib/Admin/ResourceGroups.rb +118 -0
  9. data/lib/Admin/Roles.rb +60 -0
  10. data/lib/Admin.rb +11 -0
  11. data/lib/CC/AddressBooks.rb +55 -0
  12. data/lib/CC/AgentProfiles.rb +71 -0
  13. data/lib/CC/Agents.rb +67 -0
  14. data/lib/CC/AuxiliaryCodes.rb +55 -0
  15. data/lib/CC/CC.rb +157 -0
  16. data/lib/CC/Captures.rb +30 -0
  17. data/lib/CC/DialPlans.rb +56 -0
  18. data/lib/CC/EntryPointMappings.rb +56 -0
  19. data/lib/CC/EntryPoints.rb +55 -0
  20. data/lib/CC/Journey/Actions.rb +41 -0
  21. data/lib/CC/Journey/Aliases.rb +28 -0
  22. data/lib/CC/Journey/Events.rb +37 -0
  23. data/lib/CC/Journey/Identities.rb +41 -0
  24. data/lib/CC/Journey/Journey.rb +84 -0
  25. data/lib/CC/Journey/ProfileViews.rb +24 -0
  26. data/lib/CC/Journey/Report.rb +24 -0
  27. data/lib/CC/Journey/Reports.rb +24 -0
  28. data/lib/CC/Journey/Streams.rb +41 -0
  29. data/lib/CC/Journey/Views.rb +80 -0
  30. data/lib/CC/Journey.rb +9 -0
  31. data/lib/CC/MultimediaProfiles.rb +52 -0
  32. data/lib/CC/OutboundANI.rb +56 -0
  33. data/lib/CC/Queues.rb +64 -0
  34. data/lib/CC/Sites.rb +51 -0
  35. data/lib/CC/SkillProfiles.rb +55 -0
  36. data/lib/CC/Skills.rb +55 -0
  37. data/lib/CC/Subscriptions.rb +55 -0
  38. data/lib/CC/Tasks.rb +37 -0
  39. data/lib/CC/Teams.rb +55 -0
  40. data/lib/CC/UserProfiles.rb +56 -0
  41. data/lib/CC/Users.rb +57 -0
  42. data/lib/CC.rb +26 -0
  43. data/lib/Calling/CallControl.rb +210 -0
  44. data/lib/Calling/Calling.rb +64 -0
  45. data/lib/Calling/Calls.rb +44 -0
  46. data/lib/Calling/Locations.rb +50 -0
  47. data/lib/Calling/Voicemail.rb +73 -0
  48. data/lib/Calling.rb +9 -0
  49. data/lib/CiscoWebex.rb +32 -0
  50. data/lib/Devices/Configurations.rb +52 -0
  51. data/lib/Devices/Devices.rb +66 -0
  52. data/lib/Devices/Endpoints.rb +51 -0
  53. data/lib/Devices/Workspaces.rb +51 -0
  54. data/lib/Devices/Xapi.rb +75 -0
  55. data/lib/Devices.rb +7 -0
  56. data/lib/Meetings/ControlStatus.rb +53 -0
  57. data/lib/Meetings/Invitees.rb +52 -0
  58. data/lib/Meetings/Meetings.rb +91 -0
  59. data/lib/Meetings/Participants.rb +52 -0
  60. data/lib/Meetings/Qualities.rb +55 -0
  61. data/lib/Meetings/Registrations.rb +116 -0
  62. data/lib/Meetings/SessionTypes.rb +57 -0
  63. data/lib/Meetings/Templates.rb +57 -0
  64. data/lib/Meetings/Transcripts.rb +98 -0
  65. data/lib/Meetings/WebexMeetings.rb +108 -0
  66. data/lib/Meetings.rb +13 -0
  67. data/lib/Messaging/Attachements.rb +60 -0
  68. data/lib/Messaging/Classifications.rb +64 -0
  69. data/lib/Messaging/Events.rb +60 -0
  70. data/lib/Messaging/Memberships.rb +59 -0
  71. data/lib/Messaging/Messages.rb +126 -0
  72. data/lib/Messaging/Messaging.rb +92 -0
  73. data/lib/Messaging/People.rb +81 -0
  74. data/lib/Messaging/Rooms.rb +121 -0
  75. data/lib/Messaging/Teams.rb +117 -0
  76. data/lib/Messaging/Webhooks.rb +63 -0
  77. data/lib/Messaging.rb +13 -0
  78. data/lib/REST/Rest.rb +213 -0
  79. data/lib/REST/RestCC.rb +242 -0
  80. data/lib/Toolbox/Toolbox.rb +78 -0
  81. data/lib/bersion.rb +3 -0
  82. metadata +122 -0
data/lib/REST/Rest.rb ADDED
@@ -0,0 +1,213 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'ostruct'
5
+
6
+ module CiscoWebex
7
+ class Rest
8
+ BASE_URL = "https://webexapis.com"
9
+
10
+ def initialize()
11
+ puts "Initializing Webex::Teams::Rest not required..."
12
+ end
13
+
14
+ # find next request for paging through GET requests
15
+ def self.find_next_page(headers)
16
+ if headers.has_key?('link')
17
+ uri = URI(headers['link'].split(";")[0].tr("<>", ""))
18
+ https = Net::HTTP.new(uri.host, uri.port)
19
+ https.use_ssl = true
20
+ request = Net::HTTP::Get.new(uri)
21
+ request["Authorization"] = "Bearer #{@auth_token}"
22
+ request["User-Agent"] = "Webex Rudy Library"
23
+
24
+ return [ https, request ]
25
+ else
26
+ return false
27
+ end
28
+ end
29
+
30
+ # format params for passing as needed json/urlencoded
31
+ def self.parse_params(params, return_format="json")
32
+ return params if ( return_format == "json" && params.class == String && JSON.parse(params) ) # if already json then just send back
33
+
34
+ if params.class == OpenStruct
35
+ params = params.to_h
36
+ end
37
+
38
+ params = params.delete_if { |key, value| value.to_s.strip == '' } # delete any unused keys
39
+
40
+ case return_format
41
+ when "json"
42
+ params = params.to_json
43
+
44
+ when "www-encoded"
45
+ params = URI.encode_www_form(params)
46
+
47
+ end
48
+
49
+ return params
50
+ end
51
+
52
+ def self.send_rest(rest, request, limit=100)
53
+ # loop adjusts for throttling if needed
54
+ results = []
55
+ while true
56
+ response = rest.request(request)
57
+ case response.code
58
+ when "200"
59
+ # if REST success then parse body to JSON
60
+ response, headers = [ JSON.parse(response.body), response.each_header.to_h ]
61
+ if response.has_key?("items") && response['items'].length() > 0
62
+ results.concat(response['items'])
63
+
64
+ next_page = CiscoWebex::Rest.find_next_page(headers)
65
+ if next_page
66
+ rest, request = next_page
67
+ else
68
+ return results # return array of hashes
69
+ end
70
+
71
+ else
72
+ return response
73
+ end
74
+
75
+ when "429"
76
+ # sleep for throttling time
77
+ STDERR.puts "\tThrottled CiscoWebex::Rest(): #{response.each_header.to_h['Retry-After'] + 1}sec..."
78
+ sleep(response.each_header.to_h['Retry-After'] + 1)
79
+
80
+ else
81
+ STDERR.puts "Error: CiscoWebex::Rest(): #{response} - #{response.body}"
82
+ return false
83
+ end
84
+ end
85
+ end
86
+
87
+ # basid REST GET to Webex teams
88
+ def self.get(auth_token, uri, params=nil, limit=100)
89
+ @auth_token = auth_token
90
+ if params.class == String
91
+ uri = "#{uri}/#{params}"
92
+ elsif params.to_h.has_key?("id")
93
+ uri = "#{uri}/#{params.to_h['id']}"
94
+ end
95
+ # set REST client headers, body etc
96
+ uri = URI("#{BASE_URL}#{uri}")
97
+ uri.query = parse_params(params, "www-encoded") if (params.class == Hash || params.class == OpenStruct) # encode and set params if required
98
+ https = Net::HTTP.new(uri.host, uri.port)
99
+ https.use_ssl = true
100
+ request = Net::HTTP::Get.new(uri)
101
+ request["Authorization"] = "Bearer #{@auth_token}"
102
+ request["User-Agent"] = "Webex Rudy Library"
103
+
104
+ return send_rest(https, request, limit) # send REST call
105
+ end
106
+
107
+ # basid REST GET to Webex teams
108
+ def self.head(auth_token, uri, params=nil)
109
+ # set REST client headers, body etc
110
+ if params.class == String
111
+ uri = "#{uri}/#{params}"
112
+ elsif params.to_h.has_key?("id")
113
+ uri = "#{uri}/#{params.to_h['id']}"
114
+ end
115
+
116
+ uri = URI("#{BASE_URL}#{uri}")
117
+ uri.query = parse_params(params, "www-encoded") if params # encode and set params if required
118
+ https = Net::HTTP.new(uri.host, uri.port)
119
+ https.use_ssl = true
120
+ request = Net::HTTP::Head.new(uri)
121
+ request["Authorization"] = "Bearer #{auth_token}"
122
+ request["User-Agent"] = "Webex Rudy Library"
123
+
124
+ return send_rest(https, request) # send REST call
125
+ end
126
+
127
+ # basid REST DELETE to Webex teams
128
+ def self.delete(auth_token, uri, params=nil)
129
+ # set REST client headers, body etc
130
+ if params.class == String
131
+ uri = "#{uri}/#{params}"
132
+ elsif params.to_h.has_key?("id")
133
+ uri = "#{uri}/#{params.to_h['id']}"
134
+ end
135
+
136
+ uri = URI("#{BASE_URL}#{uri}")
137
+ uri.query = parse_params(params, "www-encoded") if params # encode and set params if required
138
+ https = Net::HTTP.new(uri.host, uri.port)
139
+ https.use_ssl = true
140
+ request = Net::HTTP::Delete.new(uri)
141
+ request["Authorization"] = "Bearer #{auth_token}"
142
+ request["User-Agent"] = "Webex Rudy Library"
143
+
144
+ return send_rest(https, request) # send REST call
145
+ end
146
+
147
+ # basic REST POST for Webex
148
+ def self.post(auth_token, uri, params)
149
+ if params.class != Hash || params.lenth == 0
150
+ STDERR.puts "CiscoWebex::Rest.post(): Must supply `params` as hash for post"
151
+ return False
152
+ end
153
+ # build REST client/headers/body etc
154
+ uri = URI("#{BASE_URL}#{uri}")
155
+ https = Net::HTTP.new(uri.host, uri.port)
156
+ https.use_ssl = true
157
+ request = Net::HTTP::Post.new(uri)
158
+ request["Authorization"] = "Bearer #{auth_token}"
159
+ request["Content-Type"] = "application/json"
160
+ request["Accept"] = "*/*"
161
+ request["User-Agent"] = "Webex Rudy Library"
162
+ request.body = parse_params(params) # format params as json body
163
+
164
+ return send_rest(https, request) # send REST call
165
+ end
166
+
167
+ # basic REST PUT for Webex
168
+ def self.put(auth_token, uri, params)
169
+ if params.class != Hash || params.lenth == 0
170
+ STDERR.puts "CiscoWebex::Rest.put(): Must supply `params` as hash for update"
171
+ return False
172
+ elsif params.to_h.has_key?("id")
173
+ uri = "#{uri}/#{params['id']}"
174
+ end
175
+
176
+ uri = URI("#{BASE_URL}#{uri}")
177
+ https = Net::HTTP.new(uri.host, uri.port)
178
+ https.use_ssl = true
179
+ request = Net::HTTP::Put.new(uri)
180
+ request["Authorization"] = "Bearer #{auth_token}"
181
+ request["Content-Type"] = "application/json"
182
+ request["Accept"] = "*/*"
183
+ request["User-Agent"] = "Webex Rudy Library"
184
+ request.body = parse_params(params) # format params as json body
185
+
186
+ return send_rest(https, request) # send REST call
187
+ end
188
+
189
+ # basic REST PUT for Webex
190
+ def self.patch(auth_token, uri, params)
191
+ # build REST client/headers/body etc
192
+ if params.class != Hash || params.lenth == 0
193
+ STDERR.puts "CiscoWevex::Rest.patch(): Must supply `params` as hash for update"
194
+ return False
195
+ elsif params.to_h.has_key?("id")
196
+ uri = "#{uri}/#{params['id']}"
197
+ end
198
+
199
+ uri = URI("#{BASE_URL}#{uri}")
200
+ https = Net::HTTP.new(uri.host, uri.port)
201
+ https.use_ssl = true
202
+ request = Net::HTTP::Patch.new(uri)
203
+ request["Authorization"] = "Bearer #{auth_token}"
204
+ request["Content-Type"] = "application/json"
205
+ request["Accept"] = "*/*"
206
+ request["User-Agent"] = "Webex Rudy Library"
207
+ request.body = parse_params(params) # format params as json body
208
+
209
+ return send_rest(https, request) # send REST call
210
+ end
211
+
212
+ end
213
+ end
@@ -0,0 +1,242 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'ostruct'
5
+
6
+ module CiscoWebex
7
+ class RestCC
8
+ @BASE_URL = "https://api.wxcc-us1.cisco.com"
9
+
10
+ def initialize()
11
+ puts "Initializing CiscoWebex::CC::Rest not required..."
12
+ end
13
+
14
+ # format params for passing as needed json/urlencoded
15
+ def self.parse_params(params, return_format="json")
16
+ return params if ( return_format == "json" && params.class == String && JSON.parse(params) ) # if already json then just send back
17
+
18
+ if params.class == OpenStruct
19
+ params = params.to_h
20
+ end
21
+
22
+ params = params.delete_if { |key, value| value.to_s.strip == '' } # delete any unused keys
23
+
24
+ case return_format
25
+ when "json"
26
+ params = params.to_json
27
+
28
+ when "www-encoded"
29
+ params = URI.encode_www_form(params)
30
+
31
+ end
32
+
33
+ return params
34
+ end
35
+
36
+ def self.send_rest(rest, request, limit, format="array")
37
+ # loop adjusts for throttling if needed
38
+ results = []
39
+ while true
40
+ response = rest.request(request)
41
+ headers, response_code = [ response.each_header.to_h, response.code ]
42
+ case response_code
43
+ when "200"
44
+ # if REST success then parse body to JSON
45
+ response = JSON.parse(response.body)
46
+ return response if format == "array" # If not an array then convert hash to object and return
47
+ return OpenStruct.new(response) if format == "object" # If not an array then convert hash to object and return
48
+
49
+ when "429"
50
+ # sleep for throttling time
51
+ puts "Throttled. Waiting #{response.each_header.to_h['retry-after']}..."
52
+ sleep(response.each_header.to_h['retry-after'].to_i + 1)
53
+ puts "\t... and go."
54
+
55
+ else
56
+ STDERR.puts "CC REST ERROR: " + response.to_s + response.body.to_s
57
+ return false
58
+ end
59
+ end
60
+ return OpenStruct.new(response) if format == "object"
61
+ return response if format == "array"
62
+ end
63
+
64
+ # basid REST GET to Webex teams
65
+ def self.get(auth_token, uri, params={}, limit=50000)
66
+ if params.class != Hash # fix missing params
67
+ limit = params
68
+ params = {}
69
+ end
70
+ if params.class == Hash && params.has_key?('orgId')
71
+ orig_id = params['orgId']
72
+ else
73
+ org_id = uri.split('/')[2]
74
+ end
75
+
76
+ result = { 'data'=> [], 'meta'=> {'orgId'=> org_id, 'library_added'=> true} }
77
+ if ( params.class == Hash and ! params.has_key?('page') ) # add page for looping
78
+ params['page'] = 0
79
+ end
80
+ if ( params.class == Hash and ! params.has_key?('pageSize') ) # add page for looping
81
+ params['pageSize'] = 100
82
+ end
83
+
84
+ # provide looping for longer requests
85
+ while true
86
+ # set REST client headers, body etc
87
+ api_uri = "#{uri}?#{parse_params(params, "www-encoded") if (params.class == Hash || params.class == OpenStruct)}"
88
+ url = URI(@BASE_URL)
89
+ https = Net::HTTP.new(url.host, url.port)
90
+ https.use_ssl = true
91
+ request = Net::HTTP::Get.new(api_uri)
92
+ request["Authorization"] = "Bearer #{auth_token}"
93
+ request["User-Agent"] = "Webex Rudy Library"
94
+
95
+ rest_response = send_rest(https, request, limit, "array") # send REST call
96
+ if rest_response == false
97
+ return false
98
+
99
+ else
100
+ # parse return based on v1/v2 for set common format of v1
101
+ if rest_response.class == Hash && rest_response.has_key?('data')
102
+ # try and check of we need to get the next page.
103
+ # if response length is 0 then no need to pull again
104
+ # if response length is less that the requested page size then no need
105
+ # Paging not supported on all APIs so if response is larger than the requested page size then concider it done
106
+ if rest_response['data'].length() == 0 || rest_response['data'].length() < params['pageSize']|| rest_response['data'].length() > params['pageSize']
107
+ result['data'] = rest_response['data'][0..(limit - 1)]
108
+ result['meta'] = rest_response['meta']
109
+ return result
110
+ end
111
+ result['data'].concat(rest_response['data'])
112
+ result['meta'] = rest_response['meta']
113
+
114
+ elsif rest_response.class == Array
115
+ # try and check of we need to get the next page.
116
+ # if response length is 0 then no need to pull again
117
+ # if response length is less that the requested page size then no need
118
+ # Paging not supported on all APIs so if response is larger than the requested page size then concider it done
119
+ if rest_response.length() == 0 || rest_response.length() < params['pageSize'] || rest_response.length() > params['pageSize']
120
+ result['data'] = rest_response[0..(limit - 1)]
121
+ return result
122
+ end
123
+ result['data'].concat(rest_response)
124
+
125
+ else
126
+ return result
127
+ end
128
+
129
+ # check if limit is met and return if so
130
+ if result['data'].length() >= limit
131
+ result['data'] = result['data'][0..(limit - 1)]
132
+ return result
133
+ end
134
+
135
+ params['page'] += 1
136
+ end
137
+ end
138
+ end
139
+
140
+ # basid REST GET to Webex teams
141
+ def self.head(auth_token, uri, params=nil)
142
+ # set REST client headers, body etc
143
+ if params.class == String
144
+ uri = "#{uri}/#{params}"
145
+ elsif params.has_key?("id")
146
+ uri = "#{uri}/#{params['id']}"
147
+ params.delete('id')
148
+ end
149
+
150
+ uri = URI("#{@BASE_URL}#{uri}")
151
+ uri.query = parse_params(params, "www-encoded") if params # encode and set params if required
152
+ https = Net::HTTP.new(uri.host, uri.port)
153
+ https.use_ssl = true
154
+ request = Net::HTTP::Head.new(uri)
155
+ request["Authorization"] = "Bearer #{auth_token}"
156
+ request["User-Agent"] = "Webex Rudy Library"
157
+
158
+ return send_rest(https, request) # send REST call
159
+ end
160
+
161
+ # basid REST DELETE to Webex teams
162
+ def self.delete(auth_token, uri, params=nil)
163
+ # set REST client headers, body etc
164
+ uri = URI("#{@BASE_URL}#{uri}")
165
+ uri.query = parse_params(params, "www-encoded") if params # encode and set params if required
166
+ https = Net::HTTP.new(uri.host, uri.port)
167
+ https.use_ssl = true
168
+ request = Net::HTTP::Delete.new(uri)
169
+ request["Authorization"] = "Bearer #{auth_token}"
170
+ request["User-Agent"] = "Webex Rudy Library"
171
+
172
+ return send_rest(https, request) # send REST call
173
+ end
174
+
175
+ # basic REST POST for Webex
176
+ def self.post(auth_token, uri, params)
177
+ # build REST client/headers/body etc
178
+ if params.class != Hash || params.lenth == 0
179
+ STDERR.puts "CiscoWebex::RestCC.put(): Must supply `params` as hash for update"
180
+ return False
181
+ elsif params.to_h.has_key?("id")
182
+ uri = "#{uri}/#{params['id']}"
183
+ end
184
+ uri = URI("#{@BASE_URL}#{uri}")
185
+ https = Net::HTTP.new(uri.host, uri.port)
186
+ https.use_ssl = true
187
+ request = Net::HTTP::Post.new(uri)
188
+ request["Authorization"] = "Bearer #{auth_token}"
189
+ request["Content-Type"] = "application/json"
190
+ request["Accept"] = "*/*"
191
+ request["User-Agent"] = "Webex Rudy Library"
192
+ request.body = parse_params(params) # format params as json body
193
+
194
+ return send_rest(https, request) # send REST call
195
+ end
196
+
197
+ # basic REST PUT for Webex
198
+ def self.put(auth_token, uri, params)
199
+ # build REST client/headers/body etc
200
+ if params.class != Hash || params.lenth == 0
201
+ STDERR.puts "CiscoWebex::RestCC.put(): Must supply `params` as hash for update"
202
+ return False
203
+ elsif params.to_h.has_key?("id")
204
+ uri = "#{uri}/#{params['id']}"
205
+ end
206
+ uri = URI("#{@BASE_URL}#{uri}")
207
+ https = Net::HTTP.new(uri.host, uri.port)
208
+ https.use_ssl = true
209
+ request = Net::HTTP::Put.new(uri)
210
+ request["Authorization"] = "Bearer #{auth_token}"
211
+ request["Content-Type"] = "application/json"
212
+ request["Accept"] = "*/*"
213
+ request["User-Agent"] = "Webex Rudy Library"
214
+ request.body = parse_params(params) # format params as json body
215
+
216
+ return send_rest(https, request) # send REST call
217
+ end
218
+
219
+ # basic REST PUT for Webex
220
+ def self.patch(auth_token, uri, params)
221
+ # build REST client/headers/body etc
222
+ if params.class != Hash || params.lenth == 0
223
+ STDERR.puts "CiscoWebex::RestCC.patch(): Must supply `params` as hash for update"
224
+ return False
225
+ elsif params.to_h.has_key?("id")
226
+ uri = "#{uri}/#{params['id']}"
227
+ end
228
+ uri = URI("#{@BASE_URL}#{uri}")
229
+ https = Net::HTTP.new(uri.host, uri.port)
230
+ https.use_ssl = true
231
+ request = Net::HTTP::Patch.new(uri)
232
+ request["Authorization"] = "Bearer #{auth_token}"
233
+ request["Content-Type"] = "application/json"
234
+ request["Accept"] = "*/*"
235
+ request["User-Agent"] = "Webex Rudy Library"
236
+ request.body = parse_params(params) # format params as json body
237
+
238
+ return send_rest(https, request) # send REST call
239
+ end
240
+
241
+ end
242
+ end
@@ -0,0 +1,78 @@
1
+ require 'date'
2
+ require 'time'
3
+
4
+ module CiscoWebex
5
+ class Toolbox
6
+ def self.search(list, params={})
7
+ if !list || list.class != Array || list.class != Hash || params == {}
8
+ STDERR.puts "CicoWebex::Toolbox.search(list, params={}): Data provided for search much be am Array of Hashes, `params` must have parameters to search on"
9
+ return false
10
+ end
11
+ results = []
12
+ for app in list
13
+ matches = 0
14
+ for pair in params.each()
15
+ if app[pair[0]] == pair[1]
16
+ matches += 1
17
+ end
18
+ end
19
+ if matches == params.length()
20
+ results.append(app)
21
+ end
22
+ end
23
+ return results
24
+ end
25
+
26
+ class WebexTime
27
+ def self.error()
28
+ STDERR.puts "Error CiscoWebex::Toolbox::WebexTime: Could not format/transform time from timestamp"
29
+ return false
30
+ end
31
+
32
+ def self.now()
33
+ return Time.now()
34
+ end
35
+
36
+ # converts possible time type to `Time` format for easier parsing
37
+ def self.consistent_timestamp(timestamp="now")
38
+ return timestamp if timestamp.class == Time
39
+ return Time.now() if timestamp.class == String && timestamp.downcase == "now"
40
+ return Time.parse(timestamp) if timestamp.class == String
41
+ return Time.at(timestamp) if timestamp.class == Integer
42
+ return Time.parse(timestamp.to_s) if timestamp.class == DateTime
43
+ return self.error()
44
+ end
45
+
46
+ # Format time based on default for Controlhub CC open for epoch
47
+ def self.format(timestamp, time_format="control_hub")
48
+ timestamp = self.consistent_timestamp(timestamp)
49
+
50
+ if time_format.downcase() == "cc" || time_format.downcase() =~ /contact.*/
51
+ return timestamp.strftime("%s").to_i rescue self.error()
52
+
53
+ elsif time_format.downcase() == "epoch" || time_format.downcase() == "ms"
54
+ return timestamp.strftime("%s").to_i * 1000
55
+
56
+ else
57
+ return timestamp.strftime("%Y-%m-%dT%H:%M:%S.000Z") rescue self.error()
58
+
59
+ end
60
+ end
61
+
62
+ # shift curret time by X seconds round if required
63
+ def self.shift(timestamp="now", shift_seconds=60, time_format="control_hub", round=0)
64
+ timestamp = self.consistent_timestamp(timestamp)
65
+ timestamp = self.consistent_timestamp(timestamp.to_i + shift_seconds)
66
+ timestamp = self.round(timestamp, round, time_format) if round.to_i > 0
67
+ return self.format(timestamp, time_format) rescue self.error()
68
+ end
69
+
70
+ # round time to nearest 15min default
71
+ def self.round(timestamp="now", interval=15, time_format="control_hub")
72
+ timestamp = self.consistent_timestamp(timestamp)
73
+ interval = interval.to_i
74
+ return self.format(Time.at((timestamp.to_i / (interval*60)).round * interval*60).to_i, time_format) rescue self.error()
75
+ end
76
+ end
77
+ end
78
+ end
data/lib/bersion.rb ADDED
@@ -0,0 +1,3 @@
1
+ module CiscoWebex
2
+ VERSION = '0.0.4'
3
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: CiscoWebex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Jon Snipes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-03-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: CiscoWebex API
14
+ email: jsnipes@mcloverhound.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/Admin.rb
20
+ - lib/Admin/Admin.rb
21
+ - lib/Admin/AuditEvents.rb
22
+ - lib/Admin/Authorizations.rb
23
+ - lib/Admin/Licenses.rb
24
+ - lib/Admin/Organizations.rb
25
+ - lib/Admin/People.rb
26
+ - lib/Admin/ResourceGroups.rb
27
+ - lib/Admin/Roles.rb
28
+ - lib/CC.rb
29
+ - lib/CC/AddressBooks.rb
30
+ - lib/CC/AgentProfiles.rb
31
+ - lib/CC/Agents.rb
32
+ - lib/CC/AuxiliaryCodes.rb
33
+ - lib/CC/CC.rb
34
+ - lib/CC/Captures.rb
35
+ - lib/CC/DialPlans.rb
36
+ - lib/CC/EntryPointMappings.rb
37
+ - lib/CC/EntryPoints.rb
38
+ - lib/CC/Journey.rb
39
+ - lib/CC/Journey/Actions.rb
40
+ - lib/CC/Journey/Aliases.rb
41
+ - lib/CC/Journey/Events.rb
42
+ - lib/CC/Journey/Identities.rb
43
+ - lib/CC/Journey/Journey.rb
44
+ - lib/CC/Journey/ProfileViews.rb
45
+ - lib/CC/Journey/Report.rb
46
+ - lib/CC/Journey/Reports.rb
47
+ - lib/CC/Journey/Streams.rb
48
+ - lib/CC/Journey/Views.rb
49
+ - lib/CC/MultimediaProfiles.rb
50
+ - lib/CC/OutboundANI.rb
51
+ - lib/CC/Queues.rb
52
+ - lib/CC/Sites.rb
53
+ - lib/CC/SkillProfiles.rb
54
+ - lib/CC/Skills.rb
55
+ - lib/CC/Subscriptions.rb
56
+ - lib/CC/Tasks.rb
57
+ - lib/CC/Teams.rb
58
+ - lib/CC/UserProfiles.rb
59
+ - lib/CC/Users.rb
60
+ - lib/Calling.rb
61
+ - lib/Calling/CallControl.rb
62
+ - lib/Calling/Calling.rb
63
+ - lib/Calling/Calls.rb
64
+ - lib/Calling/Locations.rb
65
+ - lib/Calling/Voicemail.rb
66
+ - lib/CiscoWebex.rb
67
+ - lib/Devices.rb
68
+ - lib/Devices/Configurations.rb
69
+ - lib/Devices/Devices.rb
70
+ - lib/Devices/Endpoints.rb
71
+ - lib/Devices/Workspaces.rb
72
+ - lib/Devices/Xapi.rb
73
+ - lib/Meetings.rb
74
+ - lib/Meetings/ControlStatus.rb
75
+ - lib/Meetings/Invitees.rb
76
+ - lib/Meetings/Meetings.rb
77
+ - lib/Meetings/Participants.rb
78
+ - lib/Meetings/Qualities.rb
79
+ - lib/Meetings/Registrations.rb
80
+ - lib/Meetings/SessionTypes.rb
81
+ - lib/Meetings/Templates.rb
82
+ - lib/Meetings/Transcripts.rb
83
+ - lib/Meetings/WebexMeetings.rb
84
+ - lib/Messaging.rb
85
+ - lib/Messaging/Attachements.rb
86
+ - lib/Messaging/Classifications.rb
87
+ - lib/Messaging/Events.rb
88
+ - lib/Messaging/Memberships.rb
89
+ - lib/Messaging/Messages.rb
90
+ - lib/Messaging/Messaging.rb
91
+ - lib/Messaging/People.rb
92
+ - lib/Messaging/Rooms.rb
93
+ - lib/Messaging/Teams.rb
94
+ - lib/Messaging/Webhooks.rb
95
+ - lib/REST/Rest.rb
96
+ - lib/REST/RestCC.rb
97
+ - lib/Toolbox/Toolbox.rb
98
+ - lib/bersion.rb
99
+ homepage: https://rubygems.org/gems/CiscoWebex
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubygems_version: 3.0.3.1
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: CiscoWebex for Ruby
122
+ test_files: []