summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Leitzen <pleitzen@gitlab.com>2019-08-05 14:38:26 +0200
committerPeter Leitzen <pleitzen@gitlab.com>2019-08-05 14:39:11 +0200
commite0e69be7f0bd916fbc7977bb05056a68e5f33cb6 (patch)
treee86112be17312a9030db1a85deae814cbfc39f25
parent7269e7813b4410ca2b0cff89a7c0abaabd411320 (diff)
downloadgitlab-ce-pl-zoom-client.tar.gz
Implement paginated user and meetings listingpl-zoom-client
-rw-r--r--lib/zoom/client.rb58
1 files changed, 56 insertions, 2 deletions
diff --git a/lib/zoom/client.rb b/lib/zoom/client.rb
index 6c22475dd05..3deb8803283 100644
--- a/lib/zoom/client.rb
+++ b/lib/zoom/client.rb
@@ -11,12 +11,66 @@ module Zoom
@api_url = api_url
@api_key = api_key
@api_secret = api_secret
- @token_expire = token_expire
+ @token_expires_in = token_expires_in
@debug_output = debug_output
end
+ def list_users(status: 'active', page: 1, per_page: 30)
+ query = {
+ status: status,
+ page_size: per_page,
+ page_number: page
+ }
+
+ paginated(page: page, item_key: 'users') do |page|
+ request(:get, '/users', query: query.merge(page_number: page))
+ end
+ end
+
+ def list_meetings(user_id:, per_page: 30, page: 1)
+ query = {
+ page_size: per_page
+ }
+
+ paginated(page: page, item_key: 'meetings') do |page|
+ request(:get, "/users/#{user_id}/meetings", query: query.merge(page_number: page))
+ end
+ end
+
+ def create_meeting(user_id:, topic: nil, agenda: nil, password: nil, enforce_login: false, enforce_login_domains: nil)
+ payload = {
+ topic: topic,
+ agenda: agenda,
+ password: password,
+ settings: {
+ enforce_login: enforce_login,
+ }.tap do |hash|
+ hash[:enforce_login_domains] = enforce_login_domains if enforce_login_domains
+ end
+ }
+
+ request(:post, "/users/#{user_id}/meetings", json: payload)
+ end
+
+ def delete_meeting(meeting_id:)
+ request(:delete, "/meetings/#{meeting_id}")
+ end
+
private
+ def paginated(item_key:, page:)
+ Enumerator.new do |y|
+ loop do
+ response = yield(page)
+ response.fetch(item_key).each { |item| y.yield item }
+
+ break if response.fetch('page_number') >= response.fetch('page_count')
+
+ page += 1
+ end
+ end
+ end
+
def request(method, path, **params)
url = @api_url + path
@@ -38,7 +92,7 @@ module Zoom
}.tap do |hash|
hash[:query] = query if query
hash[:body] = json.to_json if json
- hash[:debug_output] = debug_output if debug_output
+ hash[:debug_output] = @debug_output if @debug_output
end
end