class ActionMessenger::Base

Constants

DeliveryLog

Attributes

caller_method_name[R]
deliveries[R]

Public Class Methods

logger() click to toggle source
# File lib/action_messenger/base.rb, line 15
def logger
  ActionMessenger.config.logger || (defined?(Rails) ? Rails.logger : nil)
end
new() click to toggle source
# File lib/action_messenger/base.rb, line 39
def initialize
  @deliveries = []
end

Private Class Methods

method_missing(method_name, *args) click to toggle source
Calls superclass method
# File lib/action_messenger/base.rb, line 21
def method_missing(method_name, *args)
  if action_methods.include?(method_name.to_s)
    ActionMessenger::MessageDelivery.new(self, method_name, *args)
  else
    super
  end
end
respond_to_missing?(method, include_all = false) click to toggle source
Calls superclass method
# File lib/action_messenger/base.rb, line 29
def respond_to_missing?(method, include_all = false)
  action_methods.include?(method.to_s) || super
end

Public Instance Methods

message_to_slack(channel:, options: {}) click to toggle source

message to slack

@param [String] channel slack channel.

ex. #general

@param [Hash] options Slack API Request Options

ex. https://api.slack.com/methods/chat.postMessage

ex. message_to_slack(channel: '#general', options: {text: 'sample'})

# File lib/action_messenger/base.rb, line 51
def message_to_slack(channel:, options: {})
  @caller_method_name = caller[0][/`([^']*)'/, 1]
  options = apply_defaults(options)
  message = nil
  ActiveSupport::Notifications.instrument('message_to_slack.action_messenger', channel: channel, body: options[:text]) do
    message = slack_client.message(channel, options)
  end
  message
ensure
 self.deliveries << DeliveryLog.new(__method__, channel, message)
end
upload_file_to_slack(channels: ,file: ,options: {}) click to toggle source

upload file to slack

@param [String] channels slack channel

ex. #general, #hoge

@param [Faraday::UploadIO] file upload file

ex. Faraday::UploadIO.new('/path/to/sample.jpg', 'image/jpg')

@param [Hash] options

# File lib/action_messenger/base.rb, line 70
def upload_file_to_slack(channels: ,file: ,options: {})
  upload_file = nil
  ActiveSupport::Notifications.instrument('upload_file_to_slack.action_messenger', channels: channels) do
    upload_file = slack_client.upload_file(channels, file, options)
  end
  upload_file
ensure
  self.deliveries << DeliveryLog.new(__method__, channels, upload_file)
end

Private Instance Methods

apply_defaults(options) click to toggle source
# File lib/action_messenger/base.rb, line 83
def apply_defaults(options)
  options[:text] = render_template_text if options[:text].blank?
  options
end
render_template_text() click to toggle source
# File lib/action_messenger/base.rb, line 88
def render_template_text
  return '' if views_path.blank?

  lookup_context = ActionView::LookupContext.new(views_path)
  lookup_context.cache = false

  view_context = ActionView::Base.new(lookup_context)
  instance_variables.each {|name| view_context.assign(name.to_s.gsub('@', '').to_sym => instance_variable_get(name))}

  view_context.render(template: caller_method_name.to_s, prefixes: self.class.name.underscore.pluralize)
end
slack_client() click to toggle source
# File lib/action_messenger/base.rb, line 104
def slack_client
  ActionMessenger::Providers::Slack.new
end
views_path() click to toggle source
# File lib/action_messenger/base.rb, line 100
def views_path
  ActionMessenger.config.views_path || (defined?(Rails) ? Rails.root.join('app', 'views') : nil)
end