canvas_webex 0.11 → 0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: