Class: Ruboty::SlackEvents::Resolvers::UserResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/ruboty/slack_events/resolvers/user_resolver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(slack_client:) ⇒ UserResolver

Returns a new instance of UserResolver.



10
11
12
13
14
# File 'lib/ruboty/slack_events/resolvers/user_resolver.rb', line 10

def initialize(slack_client:)
  @slack_client = slack_client

  @user_caches = {}
end

Instance Attribute Details

#slack_clientObject (readonly)

: Slack::Web::Client



7
8
9
# File 'lib/ruboty/slack_events/resolvers/user_resolver.rb', line 7

def slack_client
  @slack_client
end

Instance Method Details

#forgetObject

Clears all user caches.



55
56
57
# File 'lib/ruboty/slack_events/resolvers/user_resolver.rb', line 55

def forget #: void
  @user_caches.clear
end

#user_info_by_id(user_id) ⇒ Object

Calls user_info API with cache.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ruboty/slack_events/resolvers/user_resolver.rb', line 28

def (user_id) #: userInfo?
  return nil if user_id.nil?

  ensure_users

  @user_caches[user_id] ||= begin
    Logger.debug { "Slack API: users.info(#{user_id})" }
    res = slack_client.users_info(user: user_id)
    res.user
  rescue Slack::Web::Api::Errors::UserNotFound => e
    Logger.debug { "Slack API Error: users.info(#{user_id}) => #{e.message}" }
    nil
  end
end

#user_info_by_name(user_name) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/ruboty/slack_events/resolvers/user_resolver.rb', line 44

def (user_name) #: userInfo?
  return nil if user_name.nil?

  ensure_users

  @user_caches.find do |_, user|
    user.name == user_name
  end&.last
end