class Pechkin::Chanel

Creates object which can send messages to assigned chanels

Attributes

logger[RW]

Public Class Methods

new(connector, channel_list, logger = ::Logger.new(STDOUT)) click to toggle source
# File lib/pechkin/channel.rb, line 6
def initialize(connector, channel_list, logger = ::Logger.new(STDOUT))
  @connector = connector
  @channel_list = channel_list
  @channel_list = [channel_list] unless channel_list.is_a?(Array)
  @logger = logger
end

Public Instance Methods

send_message(message, data, message_desc) click to toggle source
# File lib/pechkin/channel.rb, line 13
def send_message(message, data, message_desc)
  text = message.nil? ? '' : Message.new(data).render(message)

  message_desc = substitute(data, message_desc)

  logger.warn 'Resulting text is empty' if text.empty?
  results = @channel_list.map do |id|
    @connector.send_message(id, text, message_desc)
  end

  process_results(message, results)
end

Private Instance Methods

process_results(message, results) click to toggle source
# File lib/pechkin/channel.rb, line 47
def process_results(message, results)
  success, error = results.partition { |_chat, code, _body| code < 400 }
  error.each do |chat, code, body|
    logger.error "#{message} => #{chat}[HTTP #{code}]: #{body}"
  end

  {
    successful: success.map(&:first),
    errors: error
  }
end
substitute(data, message_desc) click to toggle source
# File lib/pechkin/channel.rb, line 28
def substitute(data, message_desc)
  substitute_recursive(Substitute.new(data), message_desc)
end
substitute_recursive(substitutions, object) click to toggle source
# File lib/pechkin/channel.rb, line 32
def substitute_recursive(substitutions, object)
  case object
  when String
    substitutions.process(object)
  when Array
    object.map { |o| substitute_recursive(substitutions, o) }
  when Hash
    r = {}
    object.each { |k, v| r[k] = substitute_recursive(substitutions, v) }
    r
  else
    object
  end
end