diff options
author | Peter Leitzen <pleitzen@gitlab.com> | 2019-08-05 14:38:26 +0200 |
---|---|---|
committer | Peter Leitzen <pleitzen@gitlab.com> | 2019-08-05 14:39:11 +0200 |
commit | e0e69be7f0bd916fbc7977bb05056a68e5f33cb6 (patch) | |
tree | e86112be17312a9030db1a85deae814cbfc39f25 | |
parent | 7269e7813b4410ca2b0cff89a7c0abaabd411320 (diff) | |
download | gitlab-ce-pl-zoom-client.tar.gz |
Implement paginated user and meetings listingpl-zoom-client
-rw-r--r-- | lib/zoom/client.rb | 58 |
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 |