# -*- encoding: utf-8 -*- module SendGrid4r::REST # # SendGrid Web API v3 Subusers # module Subusers include Request Subuser = Struct.new( :id, :username, :email, :password, :ips, :reputation, :disabled ) Ips = Struct.new(:ips) def self.url(subuser_name = nil) url = "#{BASE_URL}/subusers" url = "#{url}/#{subuser_name}" unless subuser_name.nil? url end def self.url_monitor(username) "#{Subusers.url(username)}/monitor" end def self.create_subusers(resp) return resp if resp.nil? resp.map { |subuser| Subusers.create_subuser(subuser) } end def self.create_subuser(resp) return resp if resp.nil? Subuser.new( resp['id'], resp['username'], resp['email'], resp['password'], resp['ips'], resp['reputation'], resp['disabled'] ) end Monitor = Struct.new(:email, :frequency) def self.create_monitor(resp) return resp if resp.nil? Monitor.new(resp['email'], resp['frequency']) end def get_subusers(limit: nil, offset: nil, username: nil, &block) params = {} params[:limit] = limit unless limit.nil? params[:offset] = offset unless offset.nil? params[:username] = username unless username.nil? resp = get(@auth, Subusers.url, params, &block) finish(resp, @raw_resp) { |r| Subusers.create_subusers(r) } end def post_subuser(username:, email:, password:, ips:, &block) params = { username: username, email: email, password: password, ips: ips } resp = post(@auth, Subusers.url, params, &block) finish(resp, @raw_resp) { |r| Subusers.create_subuser(r) } end def patch_subuser(username:, disabled:, &block) payload = { disabled: disabled } resp = patch(@auth, Subusers.url(username), payload, &block) finish(resp, @raw_resp) { |r| Subusers.create_subuser(r) } end def delete_subuser(username:, &block) delete(@auth, Subusers.url(username), &block) end def get_subuser_monitor(username:, &block) endpoint = Subusers.url_monitor(username) resp = get(@auth, endpoint, nil, &block) finish(resp, @raw_resp) { |r| Subusers.create_monitor(r) } end def post_subuser_monitor(username:, email:, frequency:, &block) endpoint = Subusers.url_monitor(username) payload = { email: email, frequency: frequency } resp = post(@auth, endpoint, payload, &block) finish(resp, @raw_resp) { |r| Subusers.create_monitor(r) } end def put_subuser_monitor(username:, email:, frequency:, &block) endpoint = Subusers.url_monitor(username) payload = { email: email, frequency: frequency } resp = put(@auth, endpoint, payload, &block) finish(resp, @raw_resp) { |r| Subusers.create_monitor(r) } end def delete_subuser_monitor(username:, &block) delete(@auth, Subusers.url_monitor(username), &block) end def get_subuser_reputation(usernames:, &block) params = '' usernames.each { |username| params += "usernames=#{username}&" } endpoint = "#{Subusers.url}/reputations?#{params}" resp = get(@auth, endpoint, usernames, &block) finish(resp, @raw_resp) { |r| Subusers.create_subusers(r) } end def put_subuser_assigned_ips(username:, ips:, &block) resp = put(@auth, "#{Subusers.url(username)}/ips", ips, &block) finish(resp, @raw_resp) { |r| Subusers.create_subuser(r) } end end end