zoom_rb 0.11.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +55 -0
  3. data/Gemfile.lock +6 -6
  4. data/README.md +0 -4
  5. data/lib/zoom/actions/account.rb +18 -51
  6. data/lib/zoom/actions/billing.rb +30 -27
  7. data/lib/zoom/actions/dashboard.rb +11 -22
  8. data/lib/zoom/actions/groups.rb +11 -9
  9. data/lib/zoom/actions/im/chat.rb +11 -24
  10. data/lib/zoom/actions/meeting.rb +34 -67
  11. data/lib/zoom/actions/phone.rb +5 -17
  12. data/lib/zoom/actions/recording.rb +8 -26
  13. data/lib/zoom/actions/report.rb +10 -20
  14. data/lib/zoom/actions/roles.rb +11 -28
  15. data/lib/zoom/actions/sip_audio.rb +16 -57
  16. data/lib/zoom/actions/token.rb +21 -24
  17. data/lib/zoom/actions/user.rb +65 -123
  18. data/lib/zoom/actions/webinar.rb +37 -77
  19. data/lib/zoom/actions.rb +68 -0
  20. data/lib/zoom/client.rb +10 -4
  21. data/lib/zoom/clients/oauth.rb +9 -3
  22. data/lib/zoom/utils.rb +10 -7
  23. data/lib/zoom/version.rb +1 -1
  24. data/lib/zoom_rb.rb +1 -0
  25. data/spec/fixtures/error/admin_cannot_activated.json +4 -0
  26. data/spec/fixtures/error/group_not_exist.json +4 -0
  27. data/spec/fixtures/error/not_found_administrator.json +4 -0
  28. data/spec/fixtures/groups/create.json +5 -0
  29. data/spec/fixtures/groups/update.json +0 -0
  30. data/spec/fixtures/token/revoke_token.json +3 -0
  31. data/spec/fixtures/user/update_email.json +0 -0
  32. data/spec/fixtures/user/update_status.json +0 -0
  33. data/spec/lib/zoom/actions/groups/create_spec.rb +96 -1
  34. data/spec/lib/zoom/actions/groups/update_spec.rb +59 -0
  35. data/spec/lib/zoom/actions/meeting/create_spec.rb +1 -1
  36. data/spec/lib/zoom/actions/token/access_token_spec.rb +34 -8
  37. data/spec/lib/zoom/actions/token/data_compliance_spec.rb +6 -1
  38. data/spec/lib/zoom/actions/token/refresh_token_spec.rb +33 -8
  39. data/spec/lib/zoom/actions/token/revoke_token_spec.rb +52 -0
  40. data/spec/lib/zoom/actions/user/create_spec.rb +18 -46
  41. data/spec/lib/zoom/actions/user/update_email_spec.rb +59 -0
  42. data/spec/lib/zoom/actions/user/update_status_spec.rb +59 -0
  43. data/spec/lib/zoom/actions_spec.rb +117 -0
  44. data/spec/lib/zoom/utils_spec.rb +1 -1
  45. metadata +33 -6
@@ -3,28 +3,18 @@
3
3
  module Zoom
4
4
  module Actions
5
5
  module Report
6
- def daily_report(*args)
7
- params = Zoom::Params.new(Utils.extract_options!(args))
8
- params.permit(%i[year month])
9
- Utils.parse_response self.class.get('/report/daily', query: params, headers: request_headers)
10
- end
11
- def meeting_details_report(*args)
12
- params = Zoom::Params.new(Utils.extract_options!(args))
13
- params.require(:id)
14
- Utils.parse_response self.class.get("/report/meetings/#{params[:id]}", query: params.except(:id), headers: request_headers)
15
- end
6
+ extend Zoom::Actions
16
7
 
17
- def meeting_participants_report(*args)
18
- params = Zoom::Params.new(Utils.extract_options!(args))
19
- params.require(:id).permit(%i[page_size next_page_token])
20
- Utils.parse_response self.class.get("/report/meetings/#{params[:id]}/participants", query: params.except(:id), headers: request_headers)
21
- end
8
+ get 'daily_report', '/report/daily',
9
+ permit: %i[year month]
22
10
 
23
- def webinar_participants_report(*args)
24
- params = Zoom::Params.new(Utils.extract_options!(args))
25
- params.require(:id).permit(%i[page_size next_page_token])
26
- Utils.parse_response self.class.get("/report/webinars/#{params[:id]}/participants", query: params.except(:id), headers: request_headers)
27
- end
11
+ get 'meeting_details_report', '/report/meetings/:id'
12
+
13
+ get 'meeting_participants_report', '/report/meetings/:id/participants',
14
+ permit: %i[page_size next_page_token]
15
+
16
+ get 'webinar_participants_report', '/report/webinars/:id/participants',
17
+ permit: %i[page_size next_page_token]
28
18
  end
29
19
  end
30
20
  end
@@ -3,39 +3,22 @@
3
3
  module Zoom
4
4
  module Actions
5
5
  module Roles
6
- def roles_list(*_args)
7
- Utils.parse_response self.class.get("/roles", headers: request_headers)
8
- end
6
+ extend Zoom::Actions
9
7
 
10
- def roles_create(*args)
11
- params = Zoom::Params.new(Utils.extract_options!(args))
12
- params.require(:name).permit(%i[description privileges])
13
- Utils.parse_response self.class.post("/roles", body: params.to_json, headers: request_headers)
14
- end
8
+ get 'roles_list', '/roles'
15
9
 
16
- def roles_members(*args)
17
- params = Zoom::Params.new(Utils.extract_options!(args))
18
- params.require(:role_id)
19
- Utils.parse_response self.class.get("/roles/#{params[:role_id]}/members", headers: request_headers)
20
- end
10
+ post 'roles_create', '/roles',
11
+ require: :name,
12
+ permit: %i[description privileges]
21
13
 
22
- def roles_assign(*args)
23
- params = Zoom::Params.new(Utils.extract_options!(args))
24
- params.require(%i[role_id members])
25
- Utils.parse_response self.class.post("/roles/#{params[:role_id]}/members", body: params.except(:role_id).to_json, headers: request_headers)
26
- end
14
+ get 'roles_members', '/roles/:role_id/members'
27
15
 
28
- def roles_unassign(*args)
29
- params = Zoom::Params.new(Utils.extract_options!(args))
30
- params.require(%i[role_id member_id])
31
- Utils.parse_response self.class.delete("/roles/#{params[:role_id]}/members/#{params[:member_id]}", headers: request_headers)
32
- end
16
+ post 'roles_assign', '/roles/:role_id/members',
17
+ require: :members
33
18
 
34
- def roles_get(*args)
35
- params = Zoom::Params.new(Utils.extract_options!(args))
36
- params.require(:role_id)
37
- Utils.parse_response self.class.get("/roles/#{params[:role_id]}", headers: request_headers)
38
- end
19
+ delete 'roles_unassign', '/roles/:role_id/members/:member_id'
20
+
21
+ get 'roles_get', '/roles/:role_id'
39
22
  end
40
23
  end
41
24
  end
@@ -3,73 +3,32 @@
3
3
  module Zoom
4
4
  module Actions
5
5
  module SipAudio
6
- def sip_trunks_get(*args)
7
- params = Zoom::Params.new(Utils.extract_options!(args))
8
- params.require(:account_id)
9
- Utils.parse_response self.class.get("/accounts/#{params[:account_id]}/sip_trunk/trunks", headers: request_headers)
10
- end
6
+ extend Zoom::Actions
11
7
 
12
- def sip_trunks_delete(*args)
13
- params = Zoom::Params.new(Utils.extract_options!(args))
14
- params.require(:account_id, :trunk_id)
15
- Utils.parse_response self.class.delete("/accounts/#{params[:account_id]}/sip_trunk/trunks/#{params[:trunk_id]}", headers: request_headers)
16
- end
8
+ get 'sip_trunks_get', '/accounts/:account_id/sip_trunk/trunks'
17
9
 
18
- def sip_trunk_numbers_delete(*args)
19
- params = Zoom::Params.new(Utils.extract_options!(args))
20
- params.require(:account_id)
21
- Utils.parse_response self.class.delete("/accounts/#{params[:account_id]}/sip_trunk/numbers", headers: request_headers)
22
- end
10
+ delete 'sip_trunks_delete', '/accounts/:account_id/sip_trunk/trunks/:trunk_id'
23
11
 
24
- def sip_trunks_internal_numbers_delete(*args)
25
- params = Zoom::Params.new(Utils.extract_options!(args))
26
- params.require(%i[account_id number_id])
27
- Utils.parse_response self.class.delete("/accounts/#{params[:account_id]}/sip_trunk/internal_numbers/#{params[:number_id]}", headers: request_headers)
28
- end
12
+ delete 'sip_trunk_numbers_delete', '/accounts/:account_id/sip_trunk/numbers'
29
13
 
30
- def sip_trunks_internal_callout_country_delete(*args)
31
- params = Zoom::Params.new(Utils.extract_options!(args))
32
- params.require(%i[account_id country_id])
33
- Utils.parse_response self.class.delete("/accounts/#{params[:account_id]}/sip_trunk/callout_countries/#{params[:country_id]}", headers: request_headers)
34
- end
14
+ delete 'sip_trunks_internal_numbers_delete',
15
+ '/accounts/:account_id/sip_trunk/internal_numbers/:number_id'
35
16
 
36
- def sip_trunks_internal_numbers_list(*args)
37
- params = Zoom::Params.new(Utils.extract_options!(args))
38
- params.require(:account_id).permit(%i[page_size next_page_token])
39
- response = self.class.get("/accounts/#{params[:account_id]}/sip_trunk/internal_numbers", query: params, headers: request_headers)
40
- Utils.parse_response(response)
41
- end
17
+ delete 'sip_trunks_internal_callout_country_delete',
18
+ '/accounts/:account_id/sip_trunk/callout_countries/:country_id'
42
19
 
43
- def sip_trunks_internal_callout_country_list(*args)
44
- params = Zoom::Params.new(Utils.extract_options!(args))
45
- params.require(:account_id)
46
- response = self.class.get("/accounts/#{params[:account_id]}/sip_trunk/callout_countries", headers: request_headers)
47
- Utils.parse_response(response)
48
- end
20
+ get 'sip_trunks_internal_numbers_list', '/accounts/:account_id/sip_trunk/internal_numbers',
21
+ permit: %i[page_size next_page_token]
49
22
 
50
- def sip_trunks_numbers_list(*args)
51
- params = Zoom::Params.new(Utils.extract_options!(args))
52
- response = self.class.get("/sip_trunk/numbers", headers: request_headers)
53
- Utils.parse_response(response)
54
- end
23
+ get 'sip_trunks_internal_callout_country_list', '/accounts/:account_id/sip_trunk/callout_countries'
55
24
 
56
- def sip_trunks_internal_numbers_add(*args)
57
- params = Zoom::Params.new(Utils.extract_options!(args))
58
- params.require(:account_id)
59
- Utils.parse_response self.class.post("/accounts/#{params[:account_id]}/sip_trunk/internal_numbers", headers: request_headers)
60
- end
25
+ get 'sip_trunks_numbers_list', '/sip_trunk/numbers'
61
26
 
62
- def sip_trunks_internal_callout_countries_add(*args)
63
- params = Zoom::Params.new(Utils.extract_options!(args))
64
- params.require(:account_id)
65
- Utils.parse_response self.class.post("/accounts/#{params[:account_id]}/sip_trunk/callout_countries", headers: request_headers)
66
- end
27
+ post 'sip_trunks_internal_numbers_add', '/accounts/:account_id/sip_trunk/internal_numbers'
67
28
 
68
- def sip_trunks_numbers_assign(*args)
69
- params = Zoom::Params.new(Utils.extract_options!(args))
70
- params.require(:account_id)
71
- Utils.parse_response self.class.post("/accounts/#{params[:account_id]}/sip_trunk/numbers", headers: request_headers)
72
- end
29
+ post 'sip_trunks_internal_callout_countries_add', '/accounts/:account_id/sip_trunk/callout_countries'
30
+
31
+ post 'sip_trunks_numbers_assign', '/accounts/:account_id/sip_trunk/numbers'
73
32
  end
74
33
  end
75
34
  end
@@ -3,33 +3,30 @@
3
3
  module Zoom
4
4
  module Actions
5
5
  module Token
6
- def access_tokens(*args)
7
- options = Zoom::Params.new(Utils.extract_options!(args))
8
- options.require(%i[auth_code redirect_uri])
9
- response = self.class.post("/oauth/token?grant_type=authorization_code&code=#{options[:auth_code]}&redirect_uri=#{options[:redirect_uri]}", headers: oauth_request_headers, base_uri: 'https://zoom.us/')
10
- Utils.parse_response(response)
11
- end
6
+ extend Zoom::Actions
12
7
 
13
- def refresh_tokens(*args)
14
- options = Zoom::Params.new(Utils.extract_options!(args))
15
- options.require(:refresh_token)
16
- response = self.class.post("/oauth/token?grant_type=refresh_token&refresh_token=#{options[:refresh_token]}", headers: oauth_request_headers, base_uri: 'https://zoom.us/')
17
- Utils.parse_response(response)
18
- end
8
+ post 'access_tokens',
9
+ '/oauth/token',
10
+ oauth: true,
11
+ require: %i[grant_type code redirect_uri],
12
+ permit: :code_verifier,
13
+ args_to_params: { auth_code: :code }
19
14
 
20
- def data_compliance(*args)
21
- options = Zoom::Params.new(Utils.extract_options!(args))
22
- options.require(%i[client_id user_id account_id deauthorization_event_received compliance_completed])
23
- response = self.class.post("/oauth/data/compliance", body: options.to_json, headers: oauth_request_headers, base_uri: 'https://zoom.us/')
24
- Utils.parse_response response
25
- end
15
+ post 'refresh_tokens',
16
+ '/oauth/token',
17
+ oauth: true,
18
+ require: %i[grant_type refresh_token]
26
19
 
27
- def revoke_tokens(*args)
28
- options = Zoom::Params.new(Utils.extract_options!(args))
29
- options.require(%i[access_token])
30
- response = self.class.post("/oauth/revoke?token=#{options[:access_token]}", headers: oauth_request_headers, base_uri: 'https://zoom.us/')
31
- Utils.parse_response(response)
32
- end
20
+ post 'data_compliance', '/oauth/data/compliance',
21
+ oauth: true,
22
+ require: %i[
23
+ client_id user_id account_id deauthorization_event_received compliance_completed
24
+ ]
25
+
26
+ post 'revoke_tokens', '/oauth/revoke',
27
+ oauth: true,
28
+ require: :token,
29
+ args_to_params: { access_token: :token }
33
30
  end
34
31
  end
35
32
  end
@@ -3,130 +3,72 @@
3
3
  module Zoom
4
4
  module Actions
5
5
  module User
6
- def user_list(*args)
7
- params = Zoom::Params.new(Utils.extract_options!(args))
8
- params.permit(%i[status page_size role_id page_number include_fields next_page_token])
9
- response = self.class.get('/users', query: params, headers: request_headers)
10
- Utils.parse_response(response)
11
- end
12
-
13
- def user_create(*args)
14
- params = Zoom::Params.new(Utils.extract_options!(args))
15
- require_param_keys = %i[action email type]
16
- require_param_keys.append(:password) if params[:action] == 'autoCreate'
17
- params.require(require_param_keys)
18
- params.permit_value(:action, Zoom::Constants::User::CREATE_TYPES.keys)
19
- Utils.parse_response self.class.post('/users', body: { action: params[:action], user_info: params.except(:action) }.to_json, headers: request_headers)
20
- end
21
-
22
- def user_get(*args)
23
- params = Zoom::Params.new(Utils.extract_options!(args))
24
- params.require(:id).permit(:login_type)
25
- Utils.parse_response self.class.get("/users/#{params[:id]}", query: params.except(:id), headers: request_headers)
26
- end
27
-
28
- def user_update(*args)
29
- params = Zoom::Params.new(Utils.extract_options!(args))
30
- params.require(:id).permit(%i[first_name last_name type pmi timezone dept vanity_name host_key cms_user_id])
31
- Utils.parse_response self.class.patch("/users/#{params[:id]}", body: params.except(:id), headers: request_headers)
32
- end
33
-
34
- def user_delete(*args)
35
- params = Zoom::Params.new(Utils.extract_options!(args))
36
- params.require(:id).permit(%i[action transfer_email transfer_meeting transfer_webinar transfer_recording])
37
- Utils.parse_response self.class.delete("/users/#{params[:id]}", query: params.except(:id), headers: request_headers)
38
- end
39
-
40
- def user_assistants_list(*args)
41
- params = Zoom::Params.new(Utils.extract_options!(args))
42
- params.require(:user_id)
43
- Utils.parse_response(self.class.get("/users/#{params[:user_id]}/assistants", query: params.except(:user_id), headers: request_headers))
44
- end
45
-
46
- def user_assistants_create(*args)
47
- params = Zoom::Params.new(Utils.extract_options!(args))
48
- params.require(:user_id).permit(:assistants)
49
- Utils.parse_response self.class.post("/users/#{params[:user_id]}/assistants", body: params.except(:user_id).to_json, headers: request_headers)
50
- end
51
-
52
- def user_assistants_delete_all(*args)
53
- params = Zoom::Params.new(Utils.extract_options!(args))
54
- params.require(:user_id)
55
- Utils.parse_response(self.class.delete("/users/#{params[:user_id]}/assistants", query: params.except(:user_id), headers: request_headers))
56
- end
57
-
58
- def user_assistants_delete(*args)
59
- params = Zoom::Params.new(Utils.extract_options!(args))
60
- params.require(%i[user_id assistant_id])
61
- Utils.parse_response(self.class.delete("/users/#{params[:user_id]}/assistants/#{params[:assistant_id]}", query: params.except(:user_id, :assistant_id), headers: request_headers))
62
- end
63
-
64
- def user_schedulers_list(*args)
65
- params = Zoom::Params.new(Utils.extract_options!(args))
66
- params.require(:user_id)
67
- Utils.parse_response(self.class.get("/users/#{params[:user_id]}/schedulers", query: params.except(:user_id), headers: request_headers))
68
- end
69
-
70
- def user_schedulers_delete_all(*args)
71
- params = Zoom::Params.new(Utils.extract_options!(args))
72
- params.require(:user_id)
73
- Utils.parse_response(self.class.delete("/users/#{params[:user_id]}/schedulers", query: params.except(:user_id), headers: request_headers))
74
- end
75
-
76
- def user_schedulers_delete(*args)
77
- params = Zoom::Params.new(Utils.extract_options!(args))
78
- params.require(%i[user_id scheduler_id])
79
- Utils.parse_response(self.class.delete("/users/#{params[:user_id]}/schedulers/#{params[:scheduler_id]}", query: params.except(:user_id, :scheduler_id), headers: request_headers))
80
- end
81
-
82
- def user_settings_get(*args)
83
- params = Zoom::Params.new(Utils.extract_options!(args))
84
- params.require(:id).permit(:login_type)
85
- Utils.parse_response self.class.get("/users/#{params[:id]}/settings", query: params.except(:id), headers: request_headers)
86
- end
87
-
88
- def user_settings_update(*args)
89
- params = Zoom::Params.new(Utils.extract_options!(args))
90
- params.require(:id).permit(%i[schedule_meeting in_meeting email_notification recording telephony feature tsp])
91
- Utils.parse_response self.class.patch("/users/#{params[:id]}/settings", body: params.except(:id).to_json, headers: request_headers)
92
- end
93
-
94
- def user_email_check(*args)
95
- params = Zoom::Params.new(Utils.extract_options!(args))
96
- params.require(:email)
97
- Utils.parse_response(self.class.get('/users/email', query: params.slice(:email), headers: request_headers))
98
- end
99
-
100
- def user_recordings_list(*args)
101
- params = Zoom::Params.new(Utils.extract_options!(args))
102
- params.require(:id).permit(%i[page_size next_page_token mc trash from to trash_type])
103
- Utils.parse_response self.class.get("/users/#{params[:id]}/recordings", query: params.except(:id), headers: request_headers)
104
- end
105
-
106
- def user_token(*args)
107
- params = Zoom::Params.new(Utils.extract_options!(args))
108
- params.require(:user_id).permit(%i[type ttl])
109
- Utils.parse_response self.class.get("/users/#{params[:user_id]}/token", query: params.except(:user_id), headers: request_headers)
110
- end
111
-
112
- def user_permissions(*args)
113
- params = Zoom::Params.new(Utils.extract_options!(args))
114
- params.require(:user_id)
115
- Utils.parse_response self.class.get("/users/#{params[:user_id]}/permissions", headers: request_headers)
116
- end
117
-
118
- def user_vanity_name(*args)
119
- params = Zoom::Params.new(Utils.extract_options!(args))
120
- params.require(:vanity_name)
121
- Utils.parse_response self.class.get("/users/vanity_name", query: params.slice(:vanity_name), headers: request_headers)
122
- end
123
-
124
- def user_password_update(*args)
125
- params = Zoom::Params.new(Utils.extract_options!(args))
126
- params.require(:id).permit(%i[password])
127
- Utils.parse_response self.class.patch("/users/#{params[:id]}/password", body: params.except(:id), headers: request_headers)
128
- end
6
+ extend Zoom::Actions
129
7
 
8
+ get 'user_list', '/users',
9
+ permit: %i[status page_size role_id page_number include_fields next_page_token]
10
+
11
+ post 'user_create', '/users',
12
+ require: [
13
+ :action,
14
+ user_info: %i[email type]
15
+ ],
16
+ permit: {
17
+ user_info: %i[first_name last_name password]
18
+ }
19
+
20
+ get 'user_get', '/users/:id',
21
+ permit: :login_type
22
+
23
+ patch 'user_update', '/users/:id',
24
+ permit: %i[first_name last_name type pmi timezone dept vanity_name host_key cms_user_id]
25
+
26
+ delete 'user_delete', '/users/:id',
27
+ permit: %i[action transfer_email transfer_meeting transfer_webinar transfer_recording]
28
+
29
+ get 'user_assistants_list', '/users/:user_id/assistants'
30
+
31
+ post 'user_assistants_create', '/users/:user_id/assistants',
32
+ permit: :assistants
33
+
34
+ delete 'user_assistants_delete_all', '/users/:user_id/assistants'
35
+
36
+ delete 'user_assistants_delete', '/users/:user_id/assistants/:assistant_id'
37
+
38
+ get 'user_schedulers_list', '/users/:user_id/schedulers'
39
+
40
+ delete 'user_schedulers_delete_all', '/users/:user_id/schedulers'
41
+
42
+ delete 'user_schedulers_delete', '/users/:user_id/schedulers/:scheduler_id'
43
+
44
+ get 'user_settings_get', '/users/:id/settings',
45
+ permit: [:login_type, :option, :custom_query_fields]
46
+
47
+ patch 'user_settings_update', '/users/:id/settings',
48
+ permit: %i[schedule_meeting in_meeting email_notification recording telephony feature tsp]
49
+
50
+ get 'user_email_check', '/users/email',
51
+ require: :email
52
+
53
+ get 'user_recordings_list', '/users/:id/recordings',
54
+ permit: %i[page_size next_page_token mc trash from to trash_type]
55
+
56
+ get 'user_token', '/users/:user_id/token',
57
+ permit: %i[type ttl]
58
+
59
+ get 'user_permissions', '/users/:user_id/permissions'
60
+
61
+ get 'user_vanity_name', '/users/vanity_name',
62
+ require: :vanity_name
63
+
64
+ patch 'user_password_update', '/users/:id/password',
65
+ permit: :password
66
+
67
+ patch 'user_email_update', '/users/:id/email',
68
+ permit: :email
69
+
70
+ patch 'user_status_update', '/users/:id/status',
71
+ permit: :status
130
72
  end
131
73
  end
132
74
  end
@@ -3,6 +3,8 @@
3
3
  module Zoom
4
4
  module Actions
5
5
  module Webinar
6
+ extend Zoom::Actions
7
+
6
8
  RECURRENCE_KEYS = %i[type repeat_interval weekly_days monthly_day monthly_week
7
9
  monthly_week_day end_times end_date_time].freeze
8
10
  SETTINGS_KEYS = %i[host_video panelists_video practice_session hd_video approval_type
@@ -14,95 +16,53 @@ module Zoom
14
16
  post_webinar_survey survey_url registrants_email_notification
15
17
  meeting_authentication authentication_option
16
18
  authentication_domains registrants_confirmation_email question_answer].freeze
17
- def webinar_list(*args)
18
- params = Zoom::Params.new(Utils.extract_options!(args))
19
- params.require(:host_id).permit(%i[page_size page_number])
20
- Utils.parse_response self.class.get("/users/#{params[:host_id]}/webinars", query: params.except(:host_id), headers: request_headers)
21
- end
22
19
 
23
- def webinar_create(*args)
24
- params = Zoom::Params.new(Utils.extract_options!(args))
25
- params.require(:host_id).permit(:topic, :type, :start_time, :duration,
26
- :timezone, :password, :agenda,
27
- recurrence: RECURRENCE_KEYS,
28
- settings: SETTINGS_KEYS)
29
- # TODO: process recurrence keys based on constants
30
- # TODO: process settings keys based on constants
31
- Utils.parse_response self.class.post("/users/#{params[:host_id]}/webinars", body: params.except(:host_id).to_json, headers: request_headers)
32
- end
20
+ get 'webinar_list', '/users/:host_id/webinars',
21
+ permit: %i[page_size page_number]
22
+
23
+ # TODO: process recurrence keys based on constants
24
+ # TODO: process settings keys based on constants
25
+ post 'webinar_create', '/users/:host_id/webinars',
26
+ permit: [
27
+ :topic, :type, :start_time, :duration, :timezone, :password, :agenda,
28
+ { recurrence: RECURRENCE_KEYS, settings: SETTINGS_KEYS }
29
+ ]
33
30
 
34
- def webinar_get(*args)
35
- params = Zoom::Params.new(Utils.extract_options!(args))
36
- params.require(:id)
37
- Utils.parse_response self.class.get("/webinars/#{params[:id]}", headers: request_headers)
38
- end
31
+ get 'webinar_get', '/webinars/:id'
39
32
 
40
- def webinar_update(*args)
41
- params = Zoom::Params.new(Utils.extract_options!(args))
42
- params.require(:id).permit(:topic, :type, :start_time, :duration,
43
- :timezone, :password, :agenda,
44
- recurrence: RECURRENCE_KEYS,
45
- settings: SETTINGS_KEYS)
46
- Utils.parse_response self.class.patch("/webinars/#{params[:id]}", body: params.except(:id).to_json, headers: request_headers)
47
- end
33
+ patch 'webinar_update', '/webinars/:id',
34
+ permit: [
35
+ :topic, :type, :start_time, :duration, :timezone, :password, :agenda,
36
+ { recurrence: RECURRENCE_KEYS, settings: SETTINGS_KEYS }
37
+ ]
48
38
 
49
- def webinar_delete(*args)
50
- params = Zoom::Params.new(Utils.extract_options!(args))
51
- params.require(:id).permit(:occurrence_id)
52
- Utils.parse_response self.class.delete("/webinars/#{params[:id]}", query: params.except(:id), headers: request_headers)
53
- end
39
+ delete 'webinar_delete', '/webinars/:id',
40
+ permit: :occurrence_id
54
41
 
55
- def webinar_registrants_list(*args)
56
- params = Zoom::Params.new(Utils.extract_options!(args))
57
- params.require(:id).permit(%i[occurrence_id status page_size page_number])
58
- Utils.parse_response self.class.get("/webinars/#{params[:id]}/registrants", query: params.except(:id), headers: request_headers)
59
- end
42
+ get 'webinar_registrants_list', '/webinars/:id/registrants',
43
+ permit: %i[occurrence_id status page_size page_number]
60
44
 
61
- def webinar_registrant_add(*args)
62
- params = Zoom::Params.new(Utils.extract_options!(args))
63
- params.require(%i[id email first_name last_name])
64
- .permit(%i[occurrence_ids address city country zip state phone
65
- industry org job_title purchasing_time_frame role_in_purchase_process
66
- no_of_employees comments custom_questions])
67
- Utils.parse_response self.class.post("/webinars/#{params[:id]}/registrants", body: params.except(:id, :occurrence_ids).to_json, query: params.slice(:occurrence_ids), headers: request_headers)
68
- end
45
+ post 'webinar_registrant_add', '/webinars/:id/registrants',
46
+ require: %i[email first_name last_name],
47
+ permit: %i[
48
+ occurrence_ids address city country zip state phone industry org job_title
49
+ purchasing_time_frame role_in_purchase_process no_of_employees comments custom_questions
50
+ ]
69
51
 
70
- def webinar_registrants_status_update(*args)
71
- params = Zoom::Params.new(Utils.extract_options!(args))
72
- params.require(%i[id action])
73
- .permit(:occurrence_id, registrants: [])
74
- Utils.parse_response self.class.put("/webinars/#{params[:id]}/registrants/status", body: params.except(:id, :occurrence_id).to_json, query: params.slice(:occurrence_id), headers: request_headers)
75
- end
52
+ put 'webinar_registrants_status_update', '/webinars/:id/registrants/status',
53
+ require: :action,
54
+ permit: [ :occurrence_id, registrants: [] ]
76
55
 
77
- def past_webinar_list(*args)
78
- params = Zoom::Params.new(Utils.extract_options!(args))
79
- params.require(:id)
80
- Utils.parse_response self.class.get("/past_webinars/#{params[:id]}/instances", headers: request_headers)
81
- end
56
+ get 'past_webinar_list', '/past_webinars/:id/instances'
82
57
 
83
- def webinar_registrant_get(*args)
84
- params = Zoom::Params.new(Utils.extract_options!(args))
85
- params.require(%i[webinar_id id]).permit(:occurrence_id)
86
- Utils.parse_response self.class.get("/webinars/#{params[:webinar_id]}/registrants/#{params[:id]}", query: params.except(:webinar_id, :id), headers: request_headers)
87
- end
58
+ get 'webinar_registrant_get', '/webinars/:webinar_id/registrants/:id',
59
+ permit: :occurrence_id
88
60
 
89
- def webinar_polls_list(*args)
90
- params = Zoom::Params.new(Utils.extract_options!(args))
91
- params.require(:webinar_id)
92
- Utils.parse_response self.class.get("/webinars/#{params[:webinar_id]}/polls", headers: request_headers)
93
- end
61
+ get 'webinar_polls_list', '/webinars/:webinar_id/polls'
94
62
 
95
- def webinar_poll_get(*args)
96
- params = Zoom::Params.new(Utils.extract_options!(args))
97
- params.require(%i[webinar_id poll_id])
98
- Utils.parse_response self.class.get("/webinars/#{params[:webinar_id]}/polls/#{params[:poll_id]}", headers: request_headers)
99
- end
63
+ get 'webinar_poll_get', '/webinars/:webinar_id/polls/:poll_id'
100
64
 
101
- def webinar_panelist_list(*args)
102
- params = Zoom::Params.new(Utils.extract_options!(args))
103
- params.require(:webinar_id)
104
- Utils.parse_response self.class.get("/webinars/#{params[:webinar_id]}/panelists", headers: request_headers)
105
- end
65
+ get 'webinar_panelist_list', '/webinars/:webinar_id/panelists'
106
66
  end
107
67
  end
108
68
  end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zoom
4
+ module Actions
5
+ def self.extract_path_keys(path)
6
+ path.scan(/:\w+/).map { |match| match[1..].to_sym }
7
+ end
8
+
9
+ def self.parse_path(path, path_keys, params)
10
+ parsed_path = path.dup
11
+ path_keys.each do |key|
12
+ value = params[key].to_s
13
+ parsed_path = parsed_path.sub(":#{key}", value)
14
+ end
15
+ parsed_path
16
+ end
17
+
18
+ def self.determine_request_options(client, oauth)
19
+ if oauth
20
+ {
21
+ headers: client.oauth_request_headers,
22
+ base_uri: 'https://zoom.us/'
23
+ }
24
+ else
25
+ { headers: client.request_headers }
26
+ end
27
+ end
28
+
29
+ def self.make_request(args)
30
+ client, method, parsed_path, params, request_options, oauth =
31
+ args.values_at :client, :method, :parsed_path, :params, :request_options, :oauth
32
+ case method
33
+ when :get
34
+ request_options[:query] = params
35
+ when :post, :put, :patch
36
+ request_options[:body] =
37
+ oauth ? URI.encode_www_form(params.to_a) : params.to_json
38
+ end
39
+ client.class.public_send(method, parsed_path, **request_options)
40
+ end
41
+
42
+ [:get, :post, :patch, :put, :delete].each do |method|
43
+ define_method(method) do |name, path, options={}|
44
+ required, permitted, oauth, args_to_params, headers =
45
+ options.values_at :require, :permit, :oauth, :args_to_params, :headers
46
+ required = Array(required) unless required.is_a?(Hash)
47
+ permitted = Array(permitted) unless permitted.is_a?(Hash)
48
+
49
+ define_method(name) do |*args|
50
+ path_keys = Zoom::Actions.extract_path_keys(path)
51
+ params = Utils.extract_options!(args)
52
+ args_to_params&.each { |key, value| params[value] = params.delete key if params[key] }
53
+ params = Zoom::Params.new(params)
54
+ parsed_path = Zoom::Actions.parse_path(path, path_keys, params)
55
+ request_options = Zoom::Actions.determine_request_options(self, oauth)
56
+ params = params.require(path_keys) unless path_keys.empty?
57
+ params_without_required = required.empty? ? params : params.require(required)
58
+ params_without_required.permit(permitted) unless permitted.empty?
59
+ response = Zoom::Actions.make_request({
60
+ client: self, method: method, parsed_path: parsed_path,
61
+ params: params, request_options: request_options, oauth: oauth
62
+ })
63
+ Utils.parse_response(response)
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end