canvas_webex 0.11 → 0.12
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.
- data/app/models/cisco_webex_conference.rb +25 -5
- data/lib/canvas_webex.rb +2 -0
- data/lib/canvas_webex/meeting.rb +5 -48
- data/lib/canvas_webex/service.rb +52 -0
- data/lib/canvas_webex/training.rb +55 -0
- data/lib/canvas_webex/version.rb +1 -1
- data/lib/canvas_webex/webex_session.rb +78 -0
- data/spec/fixtures/get_training.xml +123 -0
- data/spec/lib/canvas_webex/meeting_spec.rb +0 -6
- data/spec/lib/canvas_webex/service_spec.rb +0 -1
- data/spec/lib/canvas_webex/training_spec.rb +27 -0
- data/spec/lib/canvas_webex/webex_session_spec.rb +12 -0
- data/spec/spec_helper.rb +2 -0
- metadata +10 -2
@@ -20,6 +20,18 @@ class CiscoWebexConference < WebConference
|
|
20
20
|
|
21
21
|
after_save :format_scheduled_date
|
22
22
|
|
23
|
+
user_setting_field :webex_service, {
|
24
|
+
name: -> { t('webex_service_setting', 'Service') },
|
25
|
+
description: -> { t('webex_service_setting_description', 'Service') },
|
26
|
+
type: :select,
|
27
|
+
visible: true,
|
28
|
+
location: 'userSettings',
|
29
|
+
options: [
|
30
|
+
{value: 'meeting', name: -> { t('webex_meeting_center', 'Meeting Center') }},
|
31
|
+
{value: 'training', name: -> { t('webex_training_center', 'Training Center') }}
|
32
|
+
]
|
33
|
+
}
|
34
|
+
|
23
35
|
user_setting_field :scheduled_date, {
|
24
36
|
name: -> { t('scheduled_date_setting', 'Scheduled Date') },
|
25
37
|
description: -> { t('scheduled_date_setting_description', 'Scheduled Date') },
|
@@ -46,11 +58,12 @@ class CiscoWebexConference < WebConference
|
|
46
58
|
options = {
|
47
59
|
duration: self.duration || 0,
|
48
60
|
emails: settings[:external_emails].nil? ? [] : settings[:external_emails].strip.split(';'),
|
49
|
-
time_zone: user.time_zone
|
61
|
+
time_zone: user.time_zone,
|
62
|
+
service: settings[:webex_service]
|
50
63
|
}
|
51
64
|
options[:scheduled_date] = scheduled_date.in_time_zone(user.time_zone) if scheduled_date.present?
|
52
|
-
|
53
|
-
self.conference_key =
|
65
|
+
webex_session = CanvasWebex::WebexSession.create(self.title, options)
|
66
|
+
self.conference_key = webex_session.session_key
|
54
67
|
save
|
55
68
|
end
|
56
69
|
self.conference_key
|
@@ -126,7 +139,7 @@ class CiscoWebexConference < WebConference
|
|
126
139
|
#
|
127
140
|
# Returns an Array of recording hashes, or an empty Array if there are no recordings
|
128
141
|
def recordings
|
129
|
-
CanvasWebex::
|
142
|
+
CanvasWebex::WebexSession.recordings(self.conference_key)
|
130
143
|
end
|
131
144
|
|
132
145
|
def after_find
|
@@ -148,7 +161,14 @@ class CiscoWebexConference < WebConference
|
|
148
161
|
#
|
149
162
|
# Returns the meeting object, or nil if the meeting is ended
|
150
163
|
def meeting
|
151
|
-
|
164
|
+
@meeting ||= if self.conference_key
|
165
|
+
case settings[:webex_service]
|
166
|
+
when 'meeting'
|
167
|
+
CanvasWebex::Meeting.retrieve(self.conference_key)
|
168
|
+
when 'training'
|
169
|
+
CanvasWebex::Training.retrieve(self.conference_key)
|
170
|
+
end
|
171
|
+
end
|
152
172
|
end
|
153
173
|
|
154
174
|
def format_scheduled_date
|
data/lib/canvas_webex.rb
CHANGED
@@ -33,7 +33,9 @@ module CanvasWebex
|
|
33
33
|
require_dependency File.expand_path('../app/models/cisco_webex_conference.rb', File.dirname(__FILE__))
|
34
34
|
require_dependency "canvas/plugins/validators/cisco_webex_validator"
|
35
35
|
require_dependency "canvas/plugins/cisco_webex"
|
36
|
+
require_dependency "canvas_webex/webex_session"
|
36
37
|
require_dependency "canvas_webex/service"
|
38
|
+
require_dependency "canvas_webex/training"
|
37
39
|
require_dependency "canvas_webex/meeting"
|
38
40
|
|
39
41
|
Canvas::Plugins::CiscoWebex.new
|
data/lib/canvas_webex/meeting.rb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
#
|
18
18
|
module CanvasWebex
|
19
|
-
class Meeting
|
19
|
+
class Meeting < CanvasWebex::WebexSession
|
20
20
|
|
21
21
|
ATTRIBUTES = [:meeting_key, :conf_name, :start_date, :host_joined, :status]
|
22
22
|
|
@@ -34,53 +34,6 @@ module CanvasWebex
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def host_url(client = CanvasWebex.client)
|
38
|
-
if response = client.host_meeting_url(meeting_key, nil)
|
39
|
-
response.at_xpath('hostMeetingURL').try(:text)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def join_url(client = CanvasWebex.client)
|
44
|
-
if response = client.join_meeting_url(meeting_key, nil)
|
45
|
-
response.at_xpath('joinMeetingURL').text
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.recordings(meeting_key, client = CanvasWebex.client)
|
50
|
-
if response = meeting_key && client.list_recordings(meeting_key)
|
51
|
-
response.search('recording').map do |rec_xml|
|
52
|
-
created_ts = rec_xml.at_xpath('createTime').try(:text)
|
53
|
-
tz_id = rec_xml.at_xpath('timeZoneID').try(:text)
|
54
|
-
created_at = parse_time_stamp(tz_id, created_ts)
|
55
|
-
recording = {
|
56
|
-
recording_id: rec_xml.at_xpath('recordingID').try(:text),
|
57
|
-
title: rec_xml.at_xpath('name').try(:text),
|
58
|
-
playback_url: rec_xml.at_xpath('streamURL').try(:text),
|
59
|
-
created_at: parse_time_stamp(tz_id, created_ts).to_s
|
60
|
-
}
|
61
|
-
if duration = rec_xml.at_xpath('duration').try(:text)
|
62
|
-
recording[:duration_minutes] = duration.to_i / 60
|
63
|
-
end
|
64
|
-
recording
|
65
|
-
end
|
66
|
-
else
|
67
|
-
[]
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.parse_time_stamp(time_zone, time_stamp, client = CanvasWebex.client)
|
72
|
-
if response = client.list_time_zone(time_zone, time_stamp)
|
73
|
-
if m_offset = response.at_xpath('timeZone/gmtOffset').try(:text).try(:to_i)
|
74
|
-
offset_string = "%+0#3d:00" %[(m_offset / 60)]
|
75
|
-
DateTime.strptime(time_stamp + offset_string, '%m/%d/%Y %H:%M:%S%z')
|
76
|
-
else
|
77
|
-
DateTime.strptime(time_stamp, '%m/%d/%Y %H:%M:%S')
|
78
|
-
end
|
79
|
-
else
|
80
|
-
""
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
37
|
# Public: Create a new Meeting
|
85
38
|
#
|
86
39
|
# meeting_xml - The xml returned for a meeting (must already exist).
|
@@ -89,6 +42,10 @@ module CanvasWebex
|
|
89
42
|
@xml = meeting_xml
|
90
43
|
end
|
91
44
|
|
45
|
+
def session_key
|
46
|
+
meeting_key
|
47
|
+
end
|
48
|
+
|
92
49
|
def method_missing(meth, *args, &block)
|
93
50
|
if ATTRIBUTES.include?(meth)
|
94
51
|
@attr_cache[meth] ||= @xml.at_xpath("//*[contains(translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), '#{meth.to_s.camelcase(:lower).downcase}')]").try(:text)
|
data/lib/canvas_webex/service.rb
CHANGED
@@ -66,6 +66,45 @@ module CanvasWebex
|
|
66
66
|
request(body)
|
67
67
|
end
|
68
68
|
|
69
|
+
def create_training_session(confName, options = {})
|
70
|
+
body = xml_request do |xml|
|
71
|
+
xml.bodyContent('xsi:type' =>'java:com.webex.service.binding.training.CreateTrainingSession'){
|
72
|
+
xml.metaData{
|
73
|
+
xml.confName confName
|
74
|
+
}
|
75
|
+
if meeting_password != nil && meeting_password.strip != ''
|
76
|
+
xml.accessControl{
|
77
|
+
xml.sessionPassword meeting_password
|
78
|
+
}
|
79
|
+
end
|
80
|
+
xml.schedule{
|
81
|
+
if options[:scheduled_date].present?
|
82
|
+
xml.startDate options[:scheduled_date].in_time_zone('America/Los_Angeles').strftime("%m/%d/%Y %T") rescue nil
|
83
|
+
xml.timeZoneID 4
|
84
|
+
else
|
85
|
+
xml.startDate
|
86
|
+
end
|
87
|
+
xml.duration(options[:duration].to_i)
|
88
|
+
}
|
89
|
+
if options[:emails]
|
90
|
+
xml.attendees{
|
91
|
+
xml.participants{
|
92
|
+
options[:emails].each do |email|
|
93
|
+
xml.person {
|
94
|
+
xml.email email
|
95
|
+
}
|
96
|
+
end
|
97
|
+
}
|
98
|
+
}
|
99
|
+
xml.attendeeOptions {
|
100
|
+
xml.emailInvitations true
|
101
|
+
}
|
102
|
+
end
|
103
|
+
}
|
104
|
+
end
|
105
|
+
request(body)
|
106
|
+
end
|
107
|
+
|
69
108
|
def host_meeting_url(meeting_key, email)
|
70
109
|
body = xml_request(email) do |xml|
|
71
110
|
xml.bodyContent('xsi:type' => 'java:com.webex.service.binding.meeting.GethosturlMeeting'){
|
@@ -98,6 +137,19 @@ module CanvasWebex
|
|
98
137
|
|
99
138
|
end
|
100
139
|
|
140
|
+
def get_training_session(session_key)
|
141
|
+
body = xml_request do |xml|
|
142
|
+
xml.bodyContent('xsi:type' => 'java:com.webex.service.binding.training.GetTrainingSession'){
|
143
|
+
xml.sessionKey session_key
|
144
|
+
}
|
145
|
+
end
|
146
|
+
begin
|
147
|
+
request(body)
|
148
|
+
rescue CanvasWebex::ConnectionError
|
149
|
+
nil
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
101
153
|
def list_recordings(meeting_key)
|
102
154
|
body = xml_request do |xml|
|
103
155
|
xml.bodyContent('xsi:type' => 'java:com.webex.service.binding.ep.LstRecording'){
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 Instructure, Inc.
|
3
|
+
#
|
4
|
+
# This file is part of Canvas.
|
5
|
+
#
|
6
|
+
# Canvas is free software: you can redistribute it and/or modify it under
|
7
|
+
# the terms of the GNU Affero General Public License as published by the Free
|
8
|
+
# Software Foundation, version 3 of the License.
|
9
|
+
#
|
10
|
+
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
11
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
12
|
+
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
13
|
+
# details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU Affero General Public License along
|
16
|
+
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
#
|
18
|
+
module CanvasWebex
|
19
|
+
class Training < CanvasWebex::WebexSession
|
20
|
+
|
21
|
+
|
22
|
+
ATTRIBUTES = [:session_key, :conf_name, :start_date, :status]
|
23
|
+
|
24
|
+
def self.retrieve(session_key, client = CanvasWebex.client)
|
25
|
+
if response = client.get_training_session(session_key)
|
26
|
+
Training.new(Nokogiri::XML(response.to_xml))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.create(session_name, options = {}, client = CanvasWebex.client)
|
31
|
+
if response = client.create_training_session(session_name, options)
|
32
|
+
if session_key = response.at_xpath('//sessionkey').try(:text)
|
33
|
+
retrieve(session_key, client)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Public: Create a new Training
|
39
|
+
#
|
40
|
+
# training_xml - The xml returned for a training (must already exist).
|
41
|
+
def initialize(training_xml)
|
42
|
+
@attr_cache = {}
|
43
|
+
@xml = training_xml
|
44
|
+
end
|
45
|
+
|
46
|
+
def method_missing(meth, *args, &block)
|
47
|
+
if ATTRIBUTES.include?(meth)
|
48
|
+
@attr_cache[meth] ||= @xml.at_xpath("//*[contains(translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), '#{meth.to_s.camelcase(:lower).downcase}')]").try(:text)
|
49
|
+
else
|
50
|
+
super
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
data/lib/canvas_webex/version.rb
CHANGED
@@ -0,0 +1,78 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2013 Instructure, Inc.
|
3
|
+
#
|
4
|
+
# This file is part of Canvas.
|
5
|
+
#
|
6
|
+
# Canvas is free software: you can redistribute it and/or modify it under
|
7
|
+
# the terms of the GNU Affero General Public License as published by the Free
|
8
|
+
# Software Foundation, version 3 of the License.
|
9
|
+
#
|
10
|
+
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
11
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
12
|
+
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
13
|
+
# details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU Affero General Public License along
|
16
|
+
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
#
|
18
|
+
module CanvasWebex
|
19
|
+
class WebexSession
|
20
|
+
|
21
|
+
def self.create(meeting_name, options = {}, client = CanvasWebex.client)
|
22
|
+
case options[:service]
|
23
|
+
when 'meeting'
|
24
|
+
CanvasWebex::Meeting.create(meeting_name, options, client)
|
25
|
+
when 'training'
|
26
|
+
CanvasWebex::Training.create(meeting_name, options, client)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def host_url(client = CanvasWebex.client)
|
31
|
+
if response = client.host_meeting_url(session_key, nil)
|
32
|
+
response.at_xpath('hostMeetingURL').try(:text)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def join_url(client = CanvasWebex.client)
|
37
|
+
if response = client.join_meeting_url(session_key, nil)
|
38
|
+
response.at_xpath('joinMeetingURL').text
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.recordings(session_key, client = CanvasWebex.client)
|
43
|
+
if response = session_key && client.list_recordings(session_key)
|
44
|
+
response.search('recording').map do |rec_xml|
|
45
|
+
created_ts = rec_xml.at_xpath('createTime').try(:text)
|
46
|
+
tz_id = rec_xml.at_xpath('timeZoneID').try(:text)
|
47
|
+
created_at = self.parse_time_stamp(tz_id, created_ts)
|
48
|
+
recording = {
|
49
|
+
recording_id: rec_xml.at_xpath('recordingID').try(:text),
|
50
|
+
title: rec_xml.at_xpath('name').try(:text),
|
51
|
+
playback_url: rec_xml.at_xpath('streamURL').try(:text),
|
52
|
+
created_at: self.parse_time_stamp(tz_id, created_ts).to_s
|
53
|
+
}
|
54
|
+
if duration = rec_xml.at_xpath('duration').try(:text)
|
55
|
+
recording[:duration_minutes] = duration.to_i / 60
|
56
|
+
end
|
57
|
+
recording
|
58
|
+
end
|
59
|
+
else
|
60
|
+
[]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.parse_time_stamp(time_zone, time_stamp, client = CanvasWebex.client)
|
65
|
+
if response = client.list_time_zone(time_zone, time_stamp)
|
66
|
+
if m_offset = response.at_xpath('timeZone/gmtOffset').try(:text).try(:to_i)
|
67
|
+
offset_string = "%+0#3d:00" %[(m_offset / 60)]
|
68
|
+
DateTime.strptime(time_stamp + offset_string, '%m/%d/%Y %H:%M:%S%z')
|
69
|
+
else
|
70
|
+
DateTime.strptime(time_stamp, '%m/%d/%Y %H:%M:%S')
|
71
|
+
end
|
72
|
+
else
|
73
|
+
""
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service" xmlns:com="http://www.webex.com/schemas/2002/06/common" xmlns:sess="http://www.webex.com/schemas/2002/06/service/session" xmlns:train="http://www.webex.com/schemas/2002/06/service/trainingsession" xmlns:qti="http://www.webex.com/schemas/2002/06/service/trainingsessionqti" xmlns:qtiasi="http://www.webex.com/schemas/2002/06/service/trainingsessionqtiasi">
|
3
|
+
<serv:header>
|
4
|
+
<serv:response>
|
5
|
+
<serv:result>SUCCESS</serv:result>
|
6
|
+
<serv:gsbStatus>PRIMARY</serv:gsbStatus>
|
7
|
+
</serv:response>
|
8
|
+
</serv:header>
|
9
|
+
<serv:body>
|
10
|
+
<serv:bodyContent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="train:getTrainingSessionResponse">
|
11
|
+
<sess:accessControl>
|
12
|
+
<sess:listing>PUBLIC</sess:listing>
|
13
|
+
<sess:sessionPassword>Test1234567</sess:sessionPassword>
|
14
|
+
</sess:accessControl>
|
15
|
+
<sess:schedule>
|
16
|
+
<sess:startDate>01/14/2014 11:22:55</sess:startDate>
|
17
|
+
<sess:timeZone>GMT-07:00, Mountain (Denver)</sess:timeZone>
|
18
|
+
<sess:duration>60</sess:duration>
|
19
|
+
<sess:timeZoneID>6</sess:timeZoneID>
|
20
|
+
<sess:hostWebExID>NetAcadTest</sess:hostWebExID>
|
21
|
+
<sess:openTime>0</sess:openTime>
|
22
|
+
<sess:extNotifyTime>0</sess:extNotifyTime>
|
23
|
+
<sess:joinTeleconfBeforeHost>false</sess:joinTeleconfBeforeHost>
|
24
|
+
</sess:schedule>
|
25
|
+
<train:metaData>
|
26
|
+
<sess:confName>test</sess:confName>
|
27
|
+
<train:location>https://ciscolearning.webex.com</train:location>
|
28
|
+
<train:invitation/>
|
29
|
+
<train:sessionType>11</train:sessionType>
|
30
|
+
<train:enableGreeting>false</train:enableGreeting>
|
31
|
+
</train:metaData>
|
32
|
+
<train:enableOptions>
|
33
|
+
<sess:attendeeList>true</sess:attendeeList>
|
34
|
+
<sess:javaClient>true</sess:javaClient>
|
35
|
+
<sess:nativeClient>true</sess:nativeClient>
|
36
|
+
<train:chat>true</train:chat>
|
37
|
+
<train:poll>true</train:poll>
|
38
|
+
<train:audioVideo>true</train:audioVideo>
|
39
|
+
<train:fileShare>true</train:fileShare>
|
40
|
+
<train:presentation>true</train:presentation>
|
41
|
+
<train:applicationShare>true</train:applicationShare>
|
42
|
+
<train:desktopShare>true</train:desktopShare>
|
43
|
+
<train:webTour>true</train:webTour>
|
44
|
+
<train:trainingSessionRecord>true</train:trainingSessionRecord>
|
45
|
+
<train:annotation>false</train:annotation>
|
46
|
+
<train:importDocument>false</train:importDocument>
|
47
|
+
<train:saveDocument>false</train:saveDocument>
|
48
|
+
<train:printDocument>false</train:printDocument>
|
49
|
+
<train:pointer>false</train:pointer>
|
50
|
+
<train:switchPage>false</train:switchPage>
|
51
|
+
<train:fullScreen>false</train:fullScreen>
|
52
|
+
<train:thumbnail>false</train:thumbnail>
|
53
|
+
<train:zoom>false</train:zoom>
|
54
|
+
<train:copyPage>false</train:copyPage>
|
55
|
+
<train:rcAppShare>true</train:rcAppShare>
|
56
|
+
<train:rcDesktopShare>true</train:rcDesktopShare>
|
57
|
+
<train:rcWebTour>true</train:rcWebTour>
|
58
|
+
<train:attendeeRecordTrainingSession>true</train:attendeeRecordTrainingSession>
|
59
|
+
<train:voip>true</train:voip>
|
60
|
+
<train:faxIntoTrainingSession>false</train:faxIntoTrainingSession>
|
61
|
+
<train:autoDeleteAfterMeetingEnd>false</train:autoDeleteAfterMeetingEnd>
|
62
|
+
<train:displayQuickStartHost>true</train:displayQuickStartHost>
|
63
|
+
<train:displayQuickStartAttendees>false</train:displayQuickStartAttendees>
|
64
|
+
<train:supportQandA>true</train:supportQandA>
|
65
|
+
<train:supportFeedback>true</train:supportFeedback>
|
66
|
+
<train:supportBreakoutSessions>true</train:supportBreakoutSessions>
|
67
|
+
<train:supportRemoteComputer>true</train:supportRemoteComputer>
|
68
|
+
<train:supportShareWebContent>true</train:supportShareWebContent>
|
69
|
+
<train:supportUCFRichMedia>true</train:supportUCFRichMedia>
|
70
|
+
<train:networkBasedRecord>true</train:networkBasedRecord>
|
71
|
+
<train:presenterBreakoutSession>true</train:presenterBreakoutSession>
|
72
|
+
<train:attendeeBreakoutSession>false</train:attendeeBreakoutSession>
|
73
|
+
<train:supportPanelists>true</train:supportPanelists>
|
74
|
+
<train:muteOnEntry>false</train:muteOnEntry>
|
75
|
+
<train:multiVideo>false</train:multiVideo>
|
76
|
+
<train:veryLargeSess>false</train:veryLargeSess>
|
77
|
+
<train:HQvideo>true</train:HQvideo>
|
78
|
+
</train:enableOptions>
|
79
|
+
<train:telephony>
|
80
|
+
<sess:telephonySupport>NONE</sess:telephonySupport>
|
81
|
+
</train:telephony>
|
82
|
+
<train:tracking/>
|
83
|
+
<train:repeat>
|
84
|
+
<train:repeatType>SINGLE</train:repeatType>
|
85
|
+
<train:expirationDate>01/14/2014 12:22:55</train:expirationDate>
|
86
|
+
<train:occurenceType>NO_REPEAT</train:occurenceType>
|
87
|
+
</train:repeat>
|
88
|
+
<train:remind>
|
89
|
+
<sess:enableReminder>false</sess:enableReminder>
|
90
|
+
<sess:emails/>
|
91
|
+
<sess:sendEmail>false</sess:sendEmail>
|
92
|
+
<sess:sendMobile>false</sess:sendMobile>
|
93
|
+
<sess:daysAhead>0</sess:daysAhead>
|
94
|
+
<sess:hoursAhead>0</sess:hoursAhead>
|
95
|
+
<sess:minutesAhead>0</sess:minutesAhead>
|
96
|
+
<sess:attendees>
|
97
|
+
<sess:send>false</sess:send>
|
98
|
+
</sess:attendees>
|
99
|
+
<sess:presenters>
|
100
|
+
<sess:firstReminder>24HR</sess:firstReminder>
|
101
|
+
</sess:presenters>
|
102
|
+
</train:remind>
|
103
|
+
<train:attendeeOptions>
|
104
|
+
<train:request>false</train:request>
|
105
|
+
<train:registration>false</train:registration>
|
106
|
+
<train:auto>false</train:auto>
|
107
|
+
<train:registrationPWD/>
|
108
|
+
<train:maxRegistrations>0</train:maxRegistrations>
|
109
|
+
<train:participantLimit>0</train:participantLimit>
|
110
|
+
</train:attendeeOptions>
|
111
|
+
<train:handsOnLab>
|
112
|
+
<train:reserveHOL>false</train:reserveHOL>
|
113
|
+
<train:numComputers>0</train:numComputers>
|
114
|
+
</train:handsOnLab>
|
115
|
+
<train:sessionKey>752909833</train:sessionKey>
|
116
|
+
<train:status>NOT_INPROGRESS</train:status>
|
117
|
+
<train:hostKey>274056</train:hostKey>
|
118
|
+
<train:eventID>226053157</train:eventID>
|
119
|
+
<train:guestToken>7e802a5c5964f8d9f857a80beca12e06</train:guestToken>
|
120
|
+
<train:hostType>1019001</train:hostType>
|
121
|
+
</serv:bodyContent>
|
122
|
+
</serv:body>
|
123
|
+
</serv:message>
|
@@ -28,10 +28,4 @@ describe CanvasWebex::Meeting do
|
|
28
28
|
subject.status.should == "NOT_INPROGRESS"
|
29
29
|
end
|
30
30
|
|
31
|
-
it 'parses a cisco timestamp' do
|
32
|
-
stub_call('list_timezones')
|
33
|
-
ts = CanvasWebex::Meeting.parse_time_stamp(4, '01/26/2006 21:00:00', client)
|
34
|
-
ts.to_s.should == '2006-01-26T21:00:00-08:00'
|
35
|
-
end
|
36
|
-
|
37
31
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CanvasWebex::Training do
|
4
|
+
let(:client) {CanvasWebex::Service.new('proserv_instructure', 'foo', '123', 'instructure', nil, 'test')}
|
5
|
+
subject{CanvasWebex::Training.retrieve(123, client)}
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
stub_call('get_training')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'returns the session name' do
|
12
|
+
subject.conf_name.should == "test"
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'returns the session key' do
|
16
|
+
subject.session_key.should == "752909833"
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'returns the start date' do
|
20
|
+
subject.start_date.should == "01/14/2014 11:22:55"
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns the status' do
|
24
|
+
subject.status.should == "NOT_INPROGRESS"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CanvasWebex::WebexSession do
|
4
|
+
let(:client) {CanvasWebex::Service.new('proserv_instructure', 'foo', '123', 'instructure', nil, 'test')}
|
5
|
+
|
6
|
+
it 'parses a cisco timestamp' do
|
7
|
+
stub_call('list_timezones')
|
8
|
+
ts = CanvasWebex::WebexSession.parse_time_stamp(4, '01/26/2006 21:00:00', client)
|
9
|
+
ts.to_s.should == '2006-01-26T21:00:00-08:00'
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: canvas_webex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.12'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-01-
|
12
|
+
date: 2014-01-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -113,9 +113,12 @@ files:
|
|
113
113
|
- lib/canvas_webex.rb
|
114
114
|
- lib/canvas_webex/meeting.rb
|
115
115
|
- lib/canvas_webex/service.rb
|
116
|
+
- lib/canvas_webex/training.rb
|
116
117
|
- lib/canvas_webex/version.rb
|
118
|
+
- lib/canvas_webex/webex_session.rb
|
117
119
|
- spec/fixtures/create_meeting.xml
|
118
120
|
- spec/fixtures/get_meeting.xml
|
121
|
+
- spec/fixtures/get_training.xml
|
119
122
|
- spec/fixtures/host_meeting_url.xml
|
120
123
|
- spec/fixtures/join_meeting_url.xml
|
121
124
|
- spec/fixtures/list_timezones.xml
|
@@ -123,6 +126,8 @@ files:
|
|
123
126
|
- spec/fixtures/recording_list.xml
|
124
127
|
- spec/lib/canvas_webex/meeting_spec.rb
|
125
128
|
- spec/lib/canvas_webex/service_spec.rb
|
129
|
+
- spec/lib/canvas_webex/training_spec.rb
|
130
|
+
- spec/lib/canvas_webex/webex_session_spec.rb
|
126
131
|
- spec/models/cisco_webex_conference_spec.rb
|
127
132
|
- spec/spec_helper.rb
|
128
133
|
homepage: http://instructure.com
|
@@ -153,6 +158,7 @@ summary: Cisco WebEx integration for Instructure Canvas (http://instructure.com)
|
|
153
158
|
test_files:
|
154
159
|
- spec/fixtures/create_meeting.xml
|
155
160
|
- spec/fixtures/get_meeting.xml
|
161
|
+
- spec/fixtures/get_training.xml
|
156
162
|
- spec/fixtures/host_meeting_url.xml
|
157
163
|
- spec/fixtures/join_meeting_url.xml
|
158
164
|
- spec/fixtures/list_timezones.xml
|
@@ -160,6 +166,8 @@ test_files:
|
|
160
166
|
- spec/fixtures/recording_list.xml
|
161
167
|
- spec/lib/canvas_webex/meeting_spec.rb
|
162
168
|
- spec/lib/canvas_webex/service_spec.rb
|
169
|
+
- spec/lib/canvas_webex/training_spec.rb
|
170
|
+
- spec/lib/canvas_webex/webex_session_spec.rb
|
163
171
|
- spec/models/cisco_webex_conference_spec.rb
|
164
172
|
- spec/spec_helper.rb
|
165
173
|
has_rdoc:
|