clickmeetings 0.1.3.1 → 0.1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/README.md +303 -7
- data/clickmeetings.gemspec +5 -3
- data/lib/clickmeetings.rb +6 -8
- data/lib/clickmeetings/client.rb +7 -8
- data/lib/clickmeetings/config.rb +2 -1
- data/lib/clickmeetings/engine.rb +0 -1
- data/lib/clickmeetings/model.rb +29 -19
- data/lib/clickmeetings/models/open/chat.rb +19 -0
- data/lib/clickmeetings/models/open/concerns/with_conference.rb +35 -0
- data/lib/clickmeetings/models/open/concerns/with_locale.rb +20 -0
- data/lib/clickmeetings/models/open/conference.rb +72 -0
- data/lib/clickmeetings/models/open/contact.rb +14 -0
- data/lib/clickmeetings/models/open/file_library.rb +43 -0
- data/lib/clickmeetings/models/open/invitation.rb +30 -0
- data/lib/clickmeetings/models/open/login_hash.rb +50 -0
- data/lib/clickmeetings/models/open/model.rb +38 -0
- data/lib/clickmeetings/models/open/phone_gateway.rb +9 -0
- data/lib/clickmeetings/models/open/recording.rb +22 -0
- data/lib/clickmeetings/models/open/registration.rb +20 -0
- data/lib/clickmeetings/models/open/session.rb +56 -0
- data/lib/clickmeetings/models/open/time_zone.rb +15 -0
- data/lib/clickmeetings/models/open/token.rb +35 -0
- data/lib/clickmeetings/models/privatelabel/account.rb +3 -1
- data/lib/clickmeetings/models/privatelabel/conference.rb +20 -11
- data/lib/clickmeetings/models/privatelabel/model.rb +5 -4
- data/lib/clickmeetings/models/privatelabel/profile.rb +2 -2
- data/lib/clickmeetings/storage.rb +10 -0
- data/lib/clickmeetings/version.rb +1 -1
- data/spec/clickmeetings_spec.rb +46 -0
- data/spec/client_spec.rb +27 -4
- data/spec/fixtures/delete_conferences_1_recordings.json +3 -0
- data/spec/fixtures/get_chats_1.zip +0 -0
- data/spec/fixtures/get_conferences.json +48 -0
- data/spec/fixtures/get_conferences_1.json +45 -0
- data/spec/fixtures/get_conferences_1_recordings.json +10 -0
- data/spec/fixtures/get_conferences_1_registrations.json +42 -0
- data/spec/fixtures/get_conferences_1_sessions.json +16 -0
- data/spec/fixtures/get_conferences_1_sessions_1.json +54 -0
- data/spec/fixtures/get_conferences_1_sessions_1_attendees.json +38 -0
- data/spec/fixtures/get_conferences_1_sessions_1_generate-pdf_en.json +4 -0
- data/spec/fixtures/get_conferences_1_sessions_1_generate-pdf_pl.json +5 -0
- data/spec/fixtures/get_conferences_1_sessions_1_generate-pdf_ru.json +4 -0
- data/spec/fixtures/get_conferences_1_sessions_1_registrations.json +42 -0
- data/spec/fixtures/get_conferences_1_tokens.json +254 -0
- data/spec/fixtures/get_conferences_2.json +45 -0
- data/spec/fixtures/get_conferences_active.json +1 -0
- data/spec/fixtures/get_conferences_inactive.json +1 -0
- data/spec/fixtures/get_conferences_skins.json +57 -0
- data/spec/fixtures/get_file-library_conferences_1.json +13 -0
- data/spec/fixtures/get_time_zone_list.json +422 -0
- data/spec/fixtures/get_time_zone_list_ru.json +26 -0
- data/spec/fixtures/post_conferences_1_invitation_email_en.json +1 -0
- data/spec/fixtures/post_conferences_1_invitation_email_ru.json +1 -0
- data/spec/fixtures/post_conferences_1_registration.json +6 -0
- data/spec/fixtures/post_conferences_1_room_autologin_hash.json +3 -0
- data/spec/fixtures/post_conferences_1_tokens.json +14 -0
- data/spec/fixtures/post_conferences_2_invitation_email_en.json +1 -0
- data/spec/fixtures/post_contacts.json +3 -0
- data/spec/fixtures/post_file-library.json +10 -0
- data/spec/fixtures/presentation.pdf +0 -0
- data/spec/helpers/fixtures_helpers.rb +1 -1
- data/spec/models/open/chat_spec.rb +25 -0
- data/spec/models/open/concerns/with_conference_spec.rb +55 -0
- data/spec/models/open/concerns/with_locale_spec.rb +23 -0
- data/spec/models/open/conference_spec.rb +132 -0
- data/spec/models/open/contact_spec.rb +17 -0
- data/spec/models/open/file_spec.rb +46 -0
- data/spec/models/open/invitation_spec.rb +43 -0
- data/spec/models/open/login_hash_spec.rb +59 -0
- data/spec/models/open/model_spec.rb +55 -0
- data/spec/models/open/recording_spec.rb +21 -0
- data/spec/models/open/registration_spec.rb +25 -0
- data/spec/models/open/session_spec.rb +73 -0
- data/spec/models/open/time_zone_spec.rb +27 -0
- data/spec/models/open/token_spec.rb +54 -0
- data/spec/models/privatelabel/conference_spec.rb +25 -7
- data/spec/shared_examples/tokens_examples.rb +6 -0
- data/spec/spec_helper.rb +7 -0
- metadata +147 -8
- data/lib/clickmeetings/models/open_api/.keep +0 -0
data/lib/clickmeetings/engine.rb
CHANGED
data/lib/clickmeetings/model.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'clickmeetings'
|
2
1
|
require 'active_model'
|
3
2
|
|
4
3
|
module Clickmeetings
|
@@ -13,7 +12,9 @@ module Clickmeetings
|
|
13
12
|
attr_accessor :resource_name
|
14
13
|
attr_reader :client_host, :client_api_key
|
15
14
|
|
16
|
-
delegate :remote_url, :remote_path, :handle_response, :client,
|
15
|
+
delegate :remote_url, :remote_path, :handle_response, :client,
|
16
|
+
:default_params, :default_headers, to: :new
|
17
|
+
delegate :first, :last, to: :all
|
17
18
|
|
18
19
|
def resource_name
|
19
20
|
@resource_name ||= self.name.demodulize.pluralize.downcase
|
@@ -21,21 +22,21 @@ module Clickmeetings
|
|
21
22
|
|
22
23
|
def find(id)
|
23
24
|
response = Clickmeetings.with_client(client_options) do
|
24
|
-
client.get(remote_url(__method__, id: id))
|
25
|
+
client.get(remote_url(__method__, id: id), default_params, default_headers)
|
25
26
|
end
|
26
27
|
handle_response(response)
|
27
28
|
end
|
28
29
|
|
29
30
|
def all
|
30
31
|
response = Clickmeetings.with_client(client_options) do
|
31
|
-
client.get(remote_url(__method__))
|
32
|
+
client.get(remote_url(__method__), default_params, default_headers)
|
32
33
|
end
|
33
34
|
handle_response(response)
|
34
35
|
end
|
35
36
|
|
36
37
|
def create(params = {})
|
37
38
|
response = Clickmeetings.with_client(client_options) do
|
38
|
-
client.post(remote_url(__method__), params)
|
39
|
+
client.post(remote_url(__method__), params.merge(default_params), default_headers)
|
39
40
|
end
|
40
41
|
handle_response(response)
|
41
42
|
end
|
@@ -45,10 +46,7 @@ module Clickmeetings
|
|
45
46
|
end
|
46
47
|
|
47
48
|
def client_options
|
48
|
-
{
|
49
|
-
url: Clickmeetings.config.host,
|
50
|
-
api_key: Clickmeetings.config.api_key
|
51
|
-
}
|
49
|
+
{ url: Clickmeetings.config.host }
|
52
50
|
end
|
53
51
|
end
|
54
52
|
|
@@ -60,28 +58,30 @@ module Clickmeetings
|
|
60
58
|
end
|
61
59
|
|
62
60
|
def remote_url(action = nil, params = {})
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
def persist?
|
67
|
-
!!id
|
61
|
+
remote_path(action, params)
|
68
62
|
end
|
69
63
|
|
70
64
|
def update(params = {})
|
71
65
|
response = Clickmeetings.with_client(client_options) do
|
72
|
-
client.put(remote_url(__method__), params)
|
66
|
+
client.put(remote_url(__method__), params.merge(default_params), default_headers)
|
73
67
|
end
|
74
68
|
handle_response response
|
75
69
|
end
|
76
70
|
|
77
|
-
def destroy(
|
78
|
-
Clickmeetings.with_client(client_options)
|
71
|
+
def destroy()
|
72
|
+
Clickmeetings.with_client(client_options) do
|
73
|
+
client.delete(remote_url(__method__), default_params, default_headers)
|
74
|
+
end
|
79
75
|
self
|
80
76
|
end
|
81
77
|
|
82
78
|
def handle_response(body)
|
83
79
|
return unless [Hash, Array].include? body.class
|
84
|
-
merge_attributes(body)
|
80
|
+
result = merge_attributes(body)
|
81
|
+
if respond_to?("api_key") && result.respond_to?("associations_api_key=")
|
82
|
+
result.associations_api_key = api_key
|
83
|
+
end
|
84
|
+
result
|
85
85
|
end
|
86
86
|
|
87
87
|
def remote_path(action = nil, params = {})
|
@@ -96,11 +96,21 @@ module Clickmeetings
|
|
96
96
|
"#{resource_name}/#{id}"
|
97
97
|
when :destroy
|
98
98
|
"#{resource_name}/#{id}"
|
99
|
+
when :destroy_all
|
100
|
+
resource_name
|
99
101
|
else
|
100
102
|
"#{resource_name}/#{params[:id]}/#{action}"
|
101
103
|
end
|
102
104
|
end
|
103
105
|
|
106
|
+
def default_params
|
107
|
+
Hash.new
|
108
|
+
end
|
109
|
+
|
110
|
+
def default_headers
|
111
|
+
Hash.new
|
112
|
+
end
|
113
|
+
|
104
114
|
private
|
105
115
|
|
106
116
|
def merge_attributes(attrs)
|
@@ -117,7 +127,7 @@ module Clickmeetings
|
|
117
127
|
|
118
128
|
def merge_object(attrs)
|
119
129
|
attrs.each do |attribute, val|
|
120
|
-
if respond_to?(attribute)
|
130
|
+
if respond_to?("#{attribute}=")
|
121
131
|
send("#{attribute}=", val)
|
122
132
|
elsif val.is_a? Hash
|
123
133
|
merge_object val
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Clickmeetings
|
2
|
+
module Open
|
3
|
+
class Chat < Model
|
4
|
+
attr_accessor :name, :time_zone, :date, :time, :download_link
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def find(id)
|
8
|
+
response = Clickmeetings.with_client(client_options) do
|
9
|
+
Clickmeetings.client.connect.get remote_url(__method__, id: id) do |req|
|
10
|
+
req.headers.merge! default_headers
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
response.body
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Clickmeetings
|
2
|
+
module Open
|
3
|
+
module WithConference
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included { attr_accessor :conference_id }
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def by_conference(conference_id: nil)
|
10
|
+
Storage.cm_current_conference = conference_id
|
11
|
+
if block_given?
|
12
|
+
result = yield
|
13
|
+
Storage.cm_current_conference = nil
|
14
|
+
result
|
15
|
+
else
|
16
|
+
self
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def conference_id
|
21
|
+
Storage.cm_current_conference
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(params = {})
|
26
|
+
super
|
27
|
+
@conference_id ||= self.class.conference_id
|
28
|
+
end
|
29
|
+
|
30
|
+
def remote_url(action = nil, params = {})
|
31
|
+
Conference.remote_path(:find, id: conference_id) + '/' + remote_path(action, params)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Clickmeetings
|
2
|
+
module Open
|
3
|
+
module WithLocale
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def locale
|
8
|
+
Storage.cm_current_locale || Clickmeetings.config.locale
|
9
|
+
end
|
10
|
+
|
11
|
+
def with_locale(lang = Clickmeetings.config.locale)
|
12
|
+
Storage.cm_current_locale = lang
|
13
|
+
result = yield if block_given?
|
14
|
+
Storage.cm_current_locale = nil
|
15
|
+
result
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Clickmeetings
|
2
|
+
module Open
|
3
|
+
class Conference < Model
|
4
|
+
set_resource_name "conferences"
|
5
|
+
|
6
|
+
attr_accessor :id, :room_type, :room_pin, :name, :name_url, :description,
|
7
|
+
:access_type, :lobby_description, :status, :created_at,
|
8
|
+
:updated_at, :permanent_room, :ccc, :starts_at, :ends_at,
|
9
|
+
:access_role_hashes, :room_url, :phone_listener_pin,
|
10
|
+
:phone_presenter_pin, :embed_room_url, :recorder_list, :account_id,
|
11
|
+
:password, :settings, :autologin_hashes, :autologin_hash, :skin_id,
|
12
|
+
:registration_enabled, :registration, :associations_api_key
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def all
|
16
|
+
active + inactive
|
17
|
+
end
|
18
|
+
|
19
|
+
%w(active inactive).each do |m|
|
20
|
+
define_method m do
|
21
|
+
response = Clickmeetings.with_client(client_options) do
|
22
|
+
Clickmeetings.client.get remote_url(__method__), default_params, default_headers
|
23
|
+
end
|
24
|
+
handle_response response
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def skins
|
29
|
+
Clickmeetings.with_client(client_options) do
|
30
|
+
Clickmeetings.client.get remote_url(__method__), default_params, default_headers
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_tokens(how_many = 1)
|
36
|
+
Token.by_conference(conference_id: id) do
|
37
|
+
Token.create(how_many: how_many)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_hash(params = {})
|
42
|
+
LoginHash.create params.merge(conference_id: id)
|
43
|
+
end
|
44
|
+
|
45
|
+
def send_invites(params)
|
46
|
+
Invitation.send_emails params.merge(conference_id: id)
|
47
|
+
end
|
48
|
+
|
49
|
+
%w(tokens sessions registrations recordings).each do |m|
|
50
|
+
define_method m do
|
51
|
+
const = "Clickmeetings::Open::#{m.singularize.capitalize}".constantize
|
52
|
+
const.with_account(account_api_key: associations_api_key || api_key) do
|
53
|
+
const.by_conference(conference_id: id) do
|
54
|
+
const.all
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def files
|
61
|
+
FileLibrary.for_conference(conference_id: id)
|
62
|
+
end
|
63
|
+
|
64
|
+
def register(params = {})
|
65
|
+
Clickmeetings.with_client(client_options) do
|
66
|
+
Clickmeetings.client.post remote_url('registration', id: id),
|
67
|
+
params.merge(default_params), default_headers
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Clickmeetings
|
2
|
+
module Open
|
3
|
+
class FileLibrary < Model
|
4
|
+
set_resource_name 'file-library'
|
5
|
+
|
6
|
+
attr_accessor :status, :url, :document_type, :conversion_progress, :status_message,
|
7
|
+
:name, :upload_date
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def create(path: '', conference_id: nil)
|
11
|
+
params = { uploaded: Faraday::UploadIO.new(path, '') }
|
12
|
+
if conference_id.present?
|
13
|
+
response = Clickmeetings.with_client(client_options) do
|
14
|
+
Clickmeetings.client.post remote_url("conferences/#{conference_id}"),
|
15
|
+
params.merge(default_params), default_headers
|
16
|
+
end
|
17
|
+
handle_response response
|
18
|
+
else
|
19
|
+
super(params)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def for_conference(conference_id: nil)
|
24
|
+
response = Clickmeetings.with_client(client_options) do
|
25
|
+
Clickmeetings.client.get remote_url("conferences/#{conference_id}"),
|
26
|
+
default_params, default_headers
|
27
|
+
end
|
28
|
+
handle_response response
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# returns content of file; use File#write to save it
|
33
|
+
def download
|
34
|
+
response = Clickmeetings.with_client(client_options) do
|
35
|
+
Clickmeetings.client.connect.get remote_url(__method__, id: id) do |req|
|
36
|
+
req.headers.merge! default_headers
|
37
|
+
end
|
38
|
+
end
|
39
|
+
response.body
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Clickmeetings
|
2
|
+
module Open
|
3
|
+
class Invitation < Model
|
4
|
+
include WithConference
|
5
|
+
include WithLocale
|
6
|
+
|
7
|
+
set_resource_name 'invitation/email'
|
8
|
+
|
9
|
+
attr_accessor :attendees, :role, :template
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def send_emails(params = {})
|
13
|
+
Storage.cm_current_conference =
|
14
|
+
params.delete(:conference_id) if params[:conference_id].present?
|
15
|
+
with_locale params.delete(:lang) do
|
16
|
+
Clickmeetings.with_client(client_options) do
|
17
|
+
Clickmeetings.client.post remote_url(locale),
|
18
|
+
params.merge(default_params), default_headers
|
19
|
+
end
|
20
|
+
end
|
21
|
+
new(params)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def remote_url(action = nil, params = {})
|
26
|
+
Conference.remote_path(:find, id: conference_id) + '/' + remote_path(action, params)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Clickmeetings
|
2
|
+
module Open
|
3
|
+
class LoginHash < Model
|
4
|
+
class InvalidParamsError < ::Clickmeetings::ClickmeetingError; end
|
5
|
+
|
6
|
+
set_resource_name "room/autologin_hash"
|
7
|
+
|
8
|
+
attr_accessor :conference_id, :nickname, :email, :token, :password, :role, :autologin_hash
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_reader :conference_id
|
12
|
+
|
13
|
+
def create(params = {})
|
14
|
+
validate_params params
|
15
|
+
params[:token] = params[:token].token if params[:token].is_a? Token
|
16
|
+
@conference_id = params.delete(:conference_id)
|
17
|
+
obj = super
|
18
|
+
params.each do |key, value|
|
19
|
+
obj.send("#{key}=", value)
|
20
|
+
end
|
21
|
+
obj
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def validate_params(params)
|
27
|
+
%i(conference_id nickname email role).each do |param|
|
28
|
+
fail InvalidParamsError, "Missing required parameter #{param}" if params[param].nil?
|
29
|
+
end
|
30
|
+
conf = Conference.find(params[:conference_id])
|
31
|
+
if conf.access_type == 2 && params[:password].nil?
|
32
|
+
fail InvalidParamsError, "Missing required parameter password"
|
33
|
+
elsif conf.access_type == 3 && params[:token].nil?
|
34
|
+
fail InvalidParamsError, "Missing required parameter token"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize(params = {})
|
40
|
+
super
|
41
|
+
@conference_id ||= self.class.conference_id
|
42
|
+
end
|
43
|
+
|
44
|
+
def remote_url(action = nil, params = {})
|
45
|
+
Conference.remote_path(:find, id: params[:conference_id] || conference_id) +
|
46
|
+
'/' + remote_path(action, params)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Clickmeetings
|
2
|
+
module Open
|
3
|
+
class Model < ::Clickmeetings::Model
|
4
|
+
class << self
|
5
|
+
def client_options
|
6
|
+
{ url: Clickmeetings.config.host }
|
7
|
+
end
|
8
|
+
|
9
|
+
def with_account(account_api_key: nil)
|
10
|
+
Storage.cm_open_current_account = account_api_key
|
11
|
+
if block_given?
|
12
|
+
result = yield
|
13
|
+
Storage.cm_open_current_account = nil
|
14
|
+
result
|
15
|
+
else
|
16
|
+
self
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def ping
|
21
|
+
Clickmeetings.with_client(client_options) do
|
22
|
+
client.get "ping", default_params, default_headers
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def api_key
|
27
|
+
Storage.cm_open_current_account || Clickmeetings.config.api_key
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
delegate :api_key, to: :class
|
32
|
+
|
33
|
+
def default_headers
|
34
|
+
{ "X-Api-Key" => api_key || Clickmeetings.config.api_key }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|