lib/socrates/adapters/slack.rb in socrates-0.1.16 vs lib/socrates/adapters/slack.rb in socrates-0.1.17
- old
+ new
@@ -1,10 +1,13 @@
require "active_support/core_ext/object"
+require "socrates/adapters/adapter"
module Socrates
module Adapters
class Slack
+ include Socrates::Adapters::Adapter
+
def initialize(real_time_client)
@real_time_client = real_time_client
end
def client_id_from(context: nil, user: nil)
@@ -27,51 +30,28 @@
return lookup_im_channel(user) unless user.nil?
raise ArgumentError, "Must provide one of context or user"
end
- def user_from(context:)
- raise ArgumentError, "context cannot be nil" if context.nil?
- raise ArgumentError, "Expected context to respond to :user" unless context.respond_to?(:user)
-
- client = @real_time_client.web_client
- info = client.users_info(user: context.user)
- info.present? ? info.user : nil
- end
-
- def send_message(session, message, send_now: false)
- raise ArgumentError, "session is required" unless session.present?
- raise ArgumentError, "session.channel is required" unless session.channel.present?
-
- session.messages[session.channel] << message
- flush_session(session, channel: session.channel) if send_now
- end
-
- def send_direct_message(session, message, recipient)
- raise ArgumentError, "Expected recipient to respond to :id" unless recipient.respond_to?(:id)
-
- im_channel = lookup_im_channel(recipient)
-
- session.messages[im_channel] << message
- end
-
- def flush_session(session, channel: nil) # TODO: Dry this up? Session? Included module?
- session.messages.select { |c, _| channel.nil? || channel == c }.each do |c, messages|
- _send_message(c, messages.join("\n\n"))
- messages.clear
- end
- end
-
def users_list(include_deleted: false, include_bots: false)
client = @real_time_client.web_client
client.users_list.tap do |response|
response.members.reject!(&:deleted?) unless include_deleted
response.members.reject!(&:is_bot?) unless include_bots
end
end
+ def user_from(context:)
+ raise ArgumentError, "context cannot be nil" if context.nil?
+ raise ArgumentError, "Expected context to respond to :user" unless context.respond_to?(:user)
+
+ client = @real_time_client.web_client
+ info = client.users_info(user: context.user)
+ info.present? ? info.user : nil
+ end
+
# Note: this triggers a call to the Slack API which makes it ill-suited for use within a loop.
def lookup_user(email:)
users_list.members.find { |user| email == user.profile&.email }
end
@@ -83,10 +63,10 @@
info.present? ? info.user.profile.email.presence : nil
end
private
- def _send_message(channel, message) # TODO: Underscored name?
+ def send_message(channel, message)
@real_time_client.message(text: message, channel: channel)
end
def lookup_im_channel(user)
im = @real_time_client.ims.values.find { |i| i.user == user }