adobe_connect 1.0.0 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/adobe_connect.gemspec +1 -1
- data/lib/adobe_connect.rb +5 -0
- data/lib/adobe_connect/acl_field.rb +60 -0
- data/lib/adobe_connect/base.rb +128 -0
- data/lib/adobe_connect/group.rb +91 -0
- data/lib/adobe_connect/meeting.rb +99 -0
- data/lib/adobe_connect/meeting_folder.rb +12 -0
- data/lib/adobe_connect/param_formatter.rb +6 -0
- data/lib/adobe_connect/response.rb +5 -19
- data/lib/adobe_connect/service.rb +1 -1
- data/lib/adobe_connect/telephony_profile.rb +87 -0
- data/lib/adobe_connect/user.rb +21 -55
- data/lib/adobe_connect/version.rb +1 -1
- data/test/fixtures/acl_field_save_error.xml +6 -0
- data/test/fixtures/acl_field_save_success.xml +7 -0
- data/test/fixtures/acl_field_update_success.xml +7 -0
- data/test/fixtures/{log_in_success.xml → generic_success.xml} +0 -0
- data/test/fixtures/group_is_member.xml +13 -0
- data/test/fixtures/group_is_not_member.xml +5 -0
- data/test/fixtures/group_save_error.xml +6 -0
- data/test/fixtures/group_save_success.xml +9 -0
- data/test/fixtures/group_update_success.xml +9 -0
- data/test/fixtures/meeting_find_by_id_error.xml +4 -0
- data/test/fixtures/meeting_find_by_id_success.xml +16 -0
- data/test/fixtures/meeting_save_error.xml +6 -0
- data/test/fixtures/meeting_save_success.xml +11 -0
- data/test/fixtures/meeting_update_success.xml +11 -0
- data/test/fixtures/telephony_profile_info_success.xml +13 -0
- data/test/fixtures/telephony_profile_list_success.xml +16 -0
- data/test/fixtures/telephony_profile_save_error.xml +6 -0
- data/test/fixtures/telephony_profile_save_success.xml +7 -0
- data/test/fixtures/telephony_profile_update_success.xml +7 -0
- data/test/fixtures/user_update_success.xml +4 -0
- data/test/lib/adobe_connect/acl_field_test.rb +39 -0
- data/test/lib/adobe_connect/adobe_connect_base_tests.rb +121 -0
- data/test/lib/adobe_connect/config_test.rb +1 -1
- data/test/lib/adobe_connect/group_test.rb +77 -0
- data/test/lib/adobe_connect/meeting_folder_test.rb +3 -7
- data/test/lib/adobe_connect/meeting_test.rb +117 -0
- data/test/lib/adobe_connect/param_formatter_test.rb +1 -1
- data/test/lib/adobe_connect/response_test.rb +1 -1
- data/test/lib/adobe_connect/service_test.rb +5 -8
- data/test/lib/adobe_connect/telephony_profile_test.rb +41 -0
- data/test/lib/adobe_connect/user_test.rb +29 -84
- data/test/test_helper.rb +16 -0
- metadata +87 -28
@@ -1,7 +1,9 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
1
3
|
module AdobeConnect
|
2
4
|
|
3
5
|
# Public: A response from the Connect API.
|
4
|
-
class Response
|
6
|
+
class Response < SimpleDelegator
|
5
7
|
attr_reader :status, :body
|
6
8
|
|
7
9
|
# Public: Create a new AdobeConnect::Response.
|
@@ -11,6 +13,8 @@ module AdobeConnect
|
|
11
13
|
@response = response
|
12
14
|
@status = response.code.to_i
|
13
15
|
@body = Nokogiri::XML(response.body)
|
16
|
+
|
17
|
+
__setobj__(@body)
|
14
18
|
end
|
15
19
|
|
16
20
|
# Public: Fetch the given header's value.
|
@@ -21,23 +25,5 @@ module AdobeConnect
|
|
21
25
|
def fetch(header)
|
22
26
|
@response.fetch(header)
|
23
27
|
end
|
24
|
-
|
25
|
-
# Public: Execute an xpath call against the response body.
|
26
|
-
#
|
27
|
-
# *args - Arguments to pass to Nokogiri's xpath method.
|
28
|
-
#
|
29
|
-
# Returns a Nokogiri object.
|
30
|
-
def xpath(*args)
|
31
|
-
@body.xpath(*args)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Public: Execute an at_xpath call against the response body.
|
35
|
-
#
|
36
|
-
# *args - Arguments to pass to Nokogiri's xpath method.
|
37
|
-
#
|
38
|
-
# Returns a Nokogiri object.
|
39
|
-
def at_xpath(*args)
|
40
|
-
@body.at_xpath(*args)
|
41
|
-
end
|
42
28
|
end
|
43
29
|
end
|
@@ -79,7 +79,7 @@ module AdobeConnect
|
|
79
79
|
# use_session - If true, require an active session (default: true).
|
80
80
|
#
|
81
81
|
# Returns an AdobeConnect::Response.
|
82
|
-
def request(action, params, use_session = true)
|
82
|
+
def request(action, params={}, use_session = true)
|
83
83
|
if use_session
|
84
84
|
log_in unless authenticated?
|
85
85
|
params[:session] = session
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module AdobeConnect
|
2
|
+
|
3
|
+
# Public: Represents a Group in a Connect environment.
|
4
|
+
class TelephonyProfile < Base
|
5
|
+
attr_accessor :conf_number, :location, :principal_id,
|
6
|
+
:name, :status, :provider_id
|
7
|
+
|
8
|
+
#
|
9
|
+
# telephony_profile_options - A hash with the following keys:
|
10
|
+
# name - The profile's name.
|
11
|
+
# status - Status of the profile (enabled or disabled)
|
12
|
+
# conf_number - Conference number associated with profile
|
13
|
+
# location - Country code for conference number, required
|
14
|
+
# if conf_number present
|
15
|
+
# principal_id- ID of User that the profile should belong
|
16
|
+
# to, defaults to logged in user
|
17
|
+
# provider_id - ID of the telephony provider
|
18
|
+
#
|
19
|
+
|
20
|
+
def attrs
|
21
|
+
atrs = { :profile_name => self.name }
|
22
|
+
|
23
|
+
if !self.id.nil?
|
24
|
+
atrs.merge!(:profile_id => self.id)
|
25
|
+
end
|
26
|
+
|
27
|
+
[:id, :status].each do |atr|
|
28
|
+
if !self.send(atr).nil?
|
29
|
+
atrs.merge!("profile_#{atr}".to_sym => self.send(atr))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
[:principal_id, :provider_id].each do |atr|
|
34
|
+
if !self.send(atr).nil?
|
35
|
+
atrs.merge!(atr => self.send(atr))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
if !self.conf_number.nil? && !self.location.nil?
|
40
|
+
atrs.merge!(:conf_number => self.conf_number, :location => self.location)
|
41
|
+
end
|
42
|
+
|
43
|
+
atrs
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.config
|
47
|
+
super.merge({ :ac_obj_type => 'profile', :delete_method_is_plural => false,
|
48
|
+
:ac_obj_node_name => 'telephony-profile', :ac_method_prefix => 'telephony_profile' })
|
49
|
+
end
|
50
|
+
|
51
|
+
# Public: Find the specified profile on the Connect server.
|
52
|
+
#
|
53
|
+
# name - Profile's name on Connect server
|
54
|
+
# principal_id - ID of user on Connect server that the Telephony
|
55
|
+
# Profile belongs to. Will use API user by default.
|
56
|
+
#
|
57
|
+
# Returns an AdobeConnect::TelephonyProfile or nil.
|
58
|
+
def self.find_by_name(name, principal_id = nil, service = AdobeConnect::Service.new)
|
59
|
+
params = {}
|
60
|
+
params.merge!(:principal_id => principal_id) unless principal_id.nil?
|
61
|
+
|
62
|
+
response = service.telephony_profile_list(params)
|
63
|
+
|
64
|
+
matching_profiles = response.at_xpath('//telephony-profiles').children.select{|c|
|
65
|
+
name_node = c.children.select{|ch| ch.name == 'profile-name' }[0]
|
66
|
+
name_node.text == name
|
67
|
+
}
|
68
|
+
|
69
|
+
if matching_profiles.count == 1
|
70
|
+
prof_id = matching_profiles[0].attr('profile-id')
|
71
|
+
resp = service.telephony_profile_info(:profile_id => prof_id)
|
72
|
+
self.load_from_xml(resp.at_xpath('//telephony-profile'), principal_id)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
def self.load_from_xml(p, principal_id)
|
78
|
+
self.new({
|
79
|
+
:name => p.at_xpath('//profile-name').text,
|
80
|
+
:id => p.attr('profile-id'),
|
81
|
+
:status => p.attr('profile-status'),
|
82
|
+
:principal_id => principal_id,
|
83
|
+
:provider_id => p.attr('provider-id')
|
84
|
+
})
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/lib/adobe_connect/user.rb
CHANGED
@@ -1,26 +1,35 @@
|
|
1
1
|
module AdobeConnect
|
2
2
|
|
3
3
|
# Public: Represents a user in a Connect environment.
|
4
|
-
class User
|
5
|
-
|
6
|
-
attr_reader :id
|
4
|
+
class User < Base
|
5
|
+
attr_accessor :first_name, :last_name, :email, :username, :uuid, :send_email
|
7
6
|
|
8
|
-
attr_reader :service, :errors
|
9
|
-
attr_accessor :first_name, :last_name, :email, :username, :uuid
|
10
|
-
|
11
|
-
# Public: Create a new AdobeConnect User.
|
12
7
|
#
|
13
8
|
# user_options - A hash with the following keys:
|
14
9
|
# first_name - User's first name.
|
15
10
|
# last_name - User's last name.
|
16
11
|
# email - The email address for the user.
|
12
|
+
# username - The login for the connect user.
|
17
13
|
# uuid - A unique identifier for this user (used to
|
18
14
|
# generate a password).
|
19
|
-
#
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
15
|
+
# send_email - The server sends a welcome e-mail with login information
|
16
|
+
# to the user’s e-mail address.
|
17
|
+
#
|
18
|
+
|
19
|
+
def attrs
|
20
|
+
atrs = { :first_name => first_name,
|
21
|
+
:last_name => last_name, :login => username,
|
22
|
+
:email => email, :send_email => send_email,
|
23
|
+
:has_children => 0 }
|
24
|
+
if !self.id.nil?
|
25
|
+
atrs.merge!(:principal_id => self.id)
|
26
|
+
else
|
27
|
+
atrs.merge!(
|
28
|
+
:password => password,
|
29
|
+
:type => 'user'
|
30
|
+
)
|
31
|
+
end
|
32
|
+
atrs
|
24
33
|
end
|
25
34
|
|
26
35
|
# Public: Getter for the Connect user's username. If no username is
|
@@ -38,37 +47,6 @@ module AdobeConnect
|
|
38
47
|
Digest::MD5.hexdigest(uuid)[0..9]
|
39
48
|
end
|
40
49
|
|
41
|
-
# Public: Save this user to the Adobe Connect instance.
|
42
|
-
#
|
43
|
-
# Returns a boolean.
|
44
|
-
def save
|
45
|
-
response = service.principal_update(:first_name => first_name,
|
46
|
-
:last_name => last_name, :login => username,
|
47
|
-
:password => password, :type => 'user', :has_children => 0,
|
48
|
-
:email => email)
|
49
|
-
|
50
|
-
if response.at_xpath('//status').attr('code') == 'ok'
|
51
|
-
self.id = response.at_xpath('//principal').attr('principal-id')
|
52
|
-
true
|
53
|
-
else
|
54
|
-
save_errors(response)
|
55
|
-
false
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
# Public: Create a Connect user from the given app user.
|
60
|
-
#
|
61
|
-
# user_options - Generic user options (see #initialize for required
|
62
|
-
# attributes).
|
63
|
-
#
|
64
|
-
# Returns an AdobeConnect::User.
|
65
|
-
def self.create(user_options)
|
66
|
-
user = AdobeConnect::User.new(user_options)
|
67
|
-
user.save
|
68
|
-
|
69
|
-
user
|
70
|
-
end
|
71
|
-
|
72
50
|
# Public: Find the given app user on the Connect server.
|
73
51
|
#
|
74
52
|
# app_user - Generic user options (see #initialize for required
|
@@ -84,17 +62,5 @@ module AdobeConnect
|
|
84
62
|
user
|
85
63
|
end
|
86
64
|
end
|
87
|
-
|
88
|
-
private
|
89
|
-
attr_writer :id
|
90
|
-
|
91
|
-
# Internal: Store request errors in @errors.
|
92
|
-
#
|
93
|
-
# response - An AdobeConnect::Response.
|
94
|
-
#
|
95
|
-
# Returns nothing.
|
96
|
-
def save_errors(response)
|
97
|
-
@errors = response.xpath('//invalid').map(&:attributes)
|
98
|
-
end
|
99
65
|
end
|
100
66
|
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<field account-id="7" is-primary="true" is-required="false" field-id="26243" object-type="object-type-principal" display-seq="11" field-type="text" permission-id="manage">
|
5
|
+
<name>Phone</name>
|
6
|
+
</field>
|
7
|
+
</results>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<field display-seq="12" account-id="7" is-primary="true" is-required="false" field-id="26243" object-type="object-type-principal" field-type="text" permission-id="manage">
|
5
|
+
<name>Phone 2</name>
|
6
|
+
</field>
|
7
|
+
</results>
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<principal-list>
|
5
|
+
<principal principal-id="26243" account-id="7" type="user" has-children="false" is-primary="false" is-hidden="false" training-group-id="">
|
6
|
+
<name>Testing User</name>
|
7
|
+
<login>testinguser@example.com</login>
|
8
|
+
<email>testinguser@example.com</email>
|
9
|
+
<display-uid>testinguser@example.com</display-uid>
|
10
|
+
<is-member>true</is-member>
|
11
|
+
</principal>
|
12
|
+
</principal-list>
|
13
|
+
</results>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<principal type="group" has-children="1" account-id="7" principal-id="26243">
|
5
|
+
<description>This is for testing</description>
|
6
|
+
<name>Test group name</name>
|
7
|
+
<login>Test group name</login>
|
8
|
+
</principal>
|
9
|
+
</results>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<principal type="group" has-children="1" account-id="7" principal-id="26243">
|
5
|
+
<description>This is for testing updates</description>
|
6
|
+
<name>Test group name</name>
|
7
|
+
<login>Test group name</login>
|
8
|
+
</principal>
|
9
|
+
</results>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok" />
|
4
|
+
<sco account-id="1234" disabled="" display-seq="0" folder-id="1234567" icon="meeting" lang="en" max-retries="" sco-id="98765" source-sco-id="" type="meeting" version="0">
|
5
|
+
<date-begin>2014-03-05T16:00:00.000-08:00</date-begin>
|
6
|
+
<date-created>2014-03-06T08:40:36.757-08:00</date-created>
|
7
|
+
<date-end>2014-03-05T17:00:00.000-08:00</date-end>
|
8
|
+
<date-modified>2014-03-06T09:51:10.407-08:00</date-modified>
|
9
|
+
<name>THE Meeting</name>
|
10
|
+
<url-path>/r3wrt7zkrpg/</url-path>
|
11
|
+
<update-linked-item>true</update-linked-item>
|
12
|
+
</sco>
|
13
|
+
<seminar-session-expiry-info>
|
14
|
+
<seminar-session-expired>false</seminar-session-expired>
|
15
|
+
</seminar-session-expiry-info>
|
16
|
+
</results>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<sco account-id="7" disabled="" display-seq="0" folder-id="12345" icon="meeting" lang="en" max-retries="" sco-id="26243" source-sco-id="" type="meeting" version="0">
|
5
|
+
<date-created>2013-06-22T14:22:14.380-04:00</date-created>
|
6
|
+
<date-modified>2013-06-22T14:22:14.380-04:00</date-modified>
|
7
|
+
<description>This is an important meeting</description>
|
8
|
+
<name>Important Meeting</name>
|
9
|
+
<url-path>/r2zssih0kaq/</url-path>
|
10
|
+
</sco>
|
11
|
+
</results>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<sco account-id="7" disabled="" display-seq="0" folder-id="12345" icon="meeting" lang="en" max-retries="" sco-id="26243" source-sco-id="" type="meeting" version="0">
|
5
|
+
<date-created>2013-06-22T14:22:14.380-04:00</date-created>
|
6
|
+
<date-modified>2013-06-22T14:22:14.380-04:00</date-modified>
|
7
|
+
<description>This is an important meeting</description>
|
8
|
+
<name>Important Meeting</name>
|
9
|
+
<url-path>/r2zssih0kaq/</url-path>
|
10
|
+
</sco>
|
11
|
+
</results>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<telephony-profile profile-id="26243" provider-id="987654321" profile-status="enabled" hide-toll-free="false" provider-type="user-conf">
|
5
|
+
<adaptor-id>987654321-adaptor</adaptor-id>
|
6
|
+
<provider-name>SoundConnect</provider-name>
|
7
|
+
<profile-name>SoundConnect</profile-name>
|
8
|
+
<provider-status>enabled</provider-status>
|
9
|
+
</telephony-profile>
|
10
|
+
<telephony-profile-fields disabled="" hide-toll-free="false" principal-id="123456" profile-id="26243" profile-status="enabled" provider-id="987654321">
|
11
|
+
<profile-name>SoundConnect</profile-name>
|
12
|
+
</telephony-profile-fields>
|
13
|
+
</results>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<telephony-profiles>
|
5
|
+
<profile profile-id="789456" provider-id="987654321" profile-status="enabled">
|
6
|
+
<adaptor-id>987654321-adaptor</adaptor-id>
|
7
|
+
<name>SoundConnect Provider</name>
|
8
|
+
<profile-name>SoundConnect2</profile-name>
|
9
|
+
</profile>
|
10
|
+
<profile profile-id="26243" provider-id="987654321" profile-status="enabled">
|
11
|
+
<adaptor-id>987654321-adaptor</adaptor-id>
|
12
|
+
<name>SoundConnect Provider</name>
|
13
|
+
<profile-name>SoundConnect</profile-name>
|
14
|
+
</profile>
|
15
|
+
</telephony-profiles>
|
16
|
+
</results>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<telephony-profile profile-status="enabled" provider-id="1160437530" principal-id="1144604670" profile-id="26243">
|
5
|
+
<profile-name>SoundConnect</profile-name>
|
6
|
+
</telephony-profile>
|
7
|
+
</results>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<results>
|
3
|
+
<status code="ok"/>
|
4
|
+
<telephony-profile profile-status="enabled" provider-id="1160437530" principal-id="1144604670" profile-id="26243">
|
5
|
+
<profile-name>SoundConnect2</profile-name>
|
6
|
+
</telephony-profile>
|
7
|
+
</results>
|