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.
@@ -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
- webex_meeting = CanvasWebex::Meeting.create(self.title, options)
53
- self.conference_key = webex_meeting.meeting_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::Meeting.recordings(self.conference_key)
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
- self.conference_key && CanvasWebex::Meeting.retrieve(self.conference_key)
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
@@ -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)
@@ -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
@@ -17,6 +17,6 @@
17
17
  #
18
18
 
19
19
  module CanvasWebex
20
- VERSION = "0.11"
20
+ VERSION = "0.12"
21
21
  end
22
22
 
@@ -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
@@ -47,7 +47,6 @@ describe CanvasWebex::Service do
47
47
  result.name.should == 'bodyContent'
48
48
  end
49
49
 
50
-
51
50
  end
52
51
 
53
52
 
@@ -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
@@ -1,5 +1,7 @@
1
+ require 'canvas_webex/webex_session'
1
2
  require 'canvas_webex/service'
2
3
  require 'canvas_webex/meeting'
4
+ require 'canvas_webex/training'
3
5
  require 'nokogiri'
4
6
  require 'uri'
5
7
  require 'net/http'
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.11'
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-10 00:00:00.000000000 Z
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: