canvas_webex 0.7 → 0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,12 +18,23 @@
18
18
 
19
19
  class CiscoWebexConference < WebConference
20
20
 
21
+ after_save :format_scheduled_date
22
+
23
+ user_setting_field :scheduled_date, {
24
+ name: -> { t('scheduled_date_setting', 'Scheduled Date') },
25
+ description: -> { t('scheduled_date_setting_description', 'Scheduled Date') },
26
+ type: :date_picker,
27
+ visible: true,
28
+ default: '',
29
+ location: 'userSettings'
30
+ }
31
+
21
32
  user_setting_field :external_emails, {
22
- name: ->{ t('external_emails_setting', 'External Emails') },
23
- description: ->{ t('external_emails_setting_description', 'External emails') },
33
+ name: -> { t('external_emails_setting', 'External Emails') },
34
+ description: -> { t('external_emails_setting_description', 'External emails') },
24
35
  type: :text,
25
36
  visible: true,
26
- default: "",
37
+ default: '',
27
38
  location: 'members'
28
39
  }
29
40
 
@@ -32,9 +43,12 @@ class CiscoWebexConference < WebConference
32
43
  # Returns a meeting.
33
44
  def initiate_conference
34
45
  unless self.conference_key.present?
35
- options = {}
36
- options[:duration] = self.duration || 999999
37
- options[:emails] = settings[:external_emails].nil? ? [] : settings[:external_emails].strip.split(';')
46
+ options = {
47
+ duration: self.duration || 999999,
48
+ emails: settings[:external_emails].nil? ? [] : settings[:external_emails].strip.split(';'),
49
+ scheduled_date: scheduled_date.in_time_zone(user.time_zone),
50
+ time_zone: user.time_zone
51
+ }
38
52
  webex_meeting = CanvasWebex::Meeting.create(self.title, options)
39
53
  self.conference_key = webex_meeting.meeting_key
40
54
  save
@@ -49,7 +63,13 @@ class CiscoWebexConference < WebConference
49
63
  if self.started_at.nil?
50
64
  :created
51
65
  elsif meeting && self.ended_at.nil?
52
- :active
66
+ if self.end_at && self.end_at > Time.now
67
+ :active
68
+ elsif self.end_at.nil?
69
+ :active
70
+ else
71
+ :closed
72
+ end
53
73
  else
54
74
  unless self.ended_at
55
75
  self.close
@@ -60,6 +80,13 @@ class CiscoWebexConference < WebConference
60
80
  end
61
81
  end
62
82
 
83
+ # Public: The schedule date of the conference
84
+ #
85
+ # Returns the scheduled date of the conference or nil if there isn't a scheduled date
86
+ def scheduled_date
87
+ @scheduled_date ||= user.time_zone.parse(settings[:scheduled_date]).utc unless settings[:scheduled_date].blank?
88
+ end
89
+
63
90
  # Public: Add an admin to the conference and create a meeting URL (required by WebConference).
64
91
  #
65
92
  # admin - The user to add to the conference as an admin.
@@ -101,6 +128,11 @@ class CiscoWebexConference < WebConference
101
128
  conference_status
102
129
  end
103
130
 
131
+ def as_json(options={})
132
+ format_scheduled_date
133
+ super(options)
134
+ end
135
+
104
136
  protected
105
137
 
106
138
  def webex_client
@@ -114,5 +146,13 @@ class CiscoWebexConference < WebConference
114
146
  self.conference_key && CanvasWebex::Meeting.retrieve(self.conference_key)
115
147
  end
116
148
 
149
+ def format_scheduled_date
150
+ if date = user.time_zone &&!user_settings[:scheduled_date].blank? && user_settings[:scheduled_date]
151
+ unless date =~ /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/
152
+ user_settings[:scheduled_date] = user.time_zone.parse(date).utc.iso8601
153
+ save
154
+ end
155
+ end
156
+ end
117
157
 
118
158
  end
@@ -1,5 +1,6 @@
1
1
  module CanvasWebex
2
2
  class Service
3
+
3
4
  attr_reader :webex_id, :password, :site_id, :site_name, :partner_id, :status, :meeting_password
4
5
 
5
6
 
@@ -38,7 +39,12 @@ module CanvasWebex
38
39
  }
39
40
  end
40
41
  xml.schedule{
41
- xml.startDate
42
+ if options[:scheduled_date]
43
+ xml.startDate options[:scheduled_date].in_time_zone('America/Los_Angeles').strftime("%m/%d/%Y %T") rescue nil
44
+ xml.timeZoneID 4
45
+ else
46
+ xml.startDate
47
+ end
42
48
  xml.duration(options[:duration].to_i)
43
49
  }
44
50
  if options[:emails]
@@ -17,6 +17,6 @@
17
17
  #
18
18
 
19
19
  module CanvasWebex
20
- VERSION = "0.7"
20
+ VERSION = "0.8"
21
21
  end
22
22
 
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe CiscoWebexConference do
4
+ subject { CiscoWebexConference.new }
5
+
6
+ describe 'conference_status' do
7
+ it 'is created when there is no start date' do
8
+ subject.stub(:started_at) { nil }
9
+ subject.conference_status.should == :created
10
+ end
11
+
12
+ it 'is active when there is a start date, a meeting, and no end date' do
13
+ subject.stub(:started_at) { Time.now }
14
+ subject.stub(:meeting) { [1, 2, 3] }
15
+ subject.conference_status.should == :active
16
+ end
17
+
18
+ it 'is active when the end at is in the future' do
19
+ subject.stub(:started_at) { Time.now }
20
+ subject.stub(:meeting) { [1, 2, 3] }
21
+ subject.stub(:end_at) { Time.now + 1200 }
22
+ subject.conference_status.should == :active
23
+ end
24
+
25
+ it 'is closed when the end at is in the past' do
26
+ subject.stub(:started_at) { Time.now }
27
+ subject.stub(:meeting) { [1, 2, 3] }
28
+ subject.stub(:end_at) { Time.now - 1200 }
29
+ subject.conference_status.should == :closed
30
+ end
31
+
32
+ it 'is closed if there is no meeting' do
33
+ subject.stub(:started_at) { Time.now }
34
+ subject.stub(:meeting) { nil }
35
+ subject.conference_status.should == :closed
36
+ end
37
+
38
+ end
39
+ end
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,33 @@ require 'net/http'
6
6
  require 'webmock/rspec'
7
7
  require 'pry'
8
8
 
9
+ class WebConference
10
+ def self.after_save(*args)
11
+ end
12
+
13
+ def self.user_setting_field(arg, arg2)
14
+ end
15
+
16
+ def started_at
17
+ end
18
+
19
+ def ended_at
20
+ end
21
+
22
+ def end_at
23
+ end
24
+
25
+ def end_at=(arg)
26
+ end
27
+
28
+ def save
29
+ end
30
+
31
+ def close
32
+ end
33
+ end
34
+ require 'models/cisco_webex_conference'
35
+
9
36
  WebMock.disable_net_connect!
10
37
 
11
38
 
@@ -20,7 +47,7 @@ end
20
47
  def stub_call(fixture_name, status = 200, request_body = nil)
21
48
  stub = stub_request(:post, "https://instructure.webex.com/WBXService/XMLService")
22
49
  stub = stub.with(body: request_body) if request_body
23
- stub.to_return(status: status, body:fixture(fixture_name), headers:{
50
+ stub.to_return(status: status, body: fixture(fixture_name), headers: {
24
51
  :content_type => 'application/xml; charset=utf-8'})
25
52
  end
26
53
 
@@ -36,7 +63,7 @@ end
36
63
 
37
64
  class String
38
65
  def camelcase(first_letter = :upper)
39
- return self if self !~ /_/ && self =~ /[A-Z]+.*/
40
- split('_').map{|e| e.capitalize}.join
66
+ return self if self !~ /_/ && self =~ /[A-Z]+.*/
67
+ split('_').map { |e| e.capitalize }.join
41
68
  end
42
69
  end
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.7'
4
+ version: '0.8'
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: 2013-11-21 00:00:00.000000000 Z
12
+ date: 2013-12-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -123,6 +123,7 @@ files:
123
123
  - spec/fixtures/recording_list.xml
124
124
  - spec/lib/canvas_webex/meeting_spec.rb
125
125
  - spec/lib/canvas_webex/service_spec.rb
126
+ - spec/models/cisco_webex_conference_spec.rb
126
127
  - spec/spec_helper.rb
127
128
  homepage: http://instructure.com
128
129
  licenses: []
@@ -159,5 +160,6 @@ test_files:
159
160
  - spec/fixtures/recording_list.xml
160
161
  - spec/lib/canvas_webex/meeting_spec.rb
161
162
  - spec/lib/canvas_webex/service_spec.rb
163
+ - spec/models/cisco_webex_conference_spec.rb
162
164
  - spec/spec_helper.rb
163
165
  has_rdoc: