class Lita::Handlers::DockerHub

Public Instance Methods

receive(request, response) click to toggle source
# File lib/lita/handlers/docker_hub.rb, line 8
def receive(request, response)
  response.headers["Content-Type"] = "application/json"

  body = parse(request.body.read)
  repo_name = body.fetch("repository", {}).fetch("repo_name", nil)
  repo_url = body.fetch("repository", {}).fetch("repo_url", nil)
  tag = body.fetch("push_data", {}).fetch("tag", nil)
  # pusher = body.fetch("push_data", {}).fetch("pusher", nil)
  # pushed_at = body.fetch("push_data", {}).fetch("pushed_at", nil)

  if repo_name.present? && repo_url.present? && tag.present?
    # build_time = time_interval(Time.at(pushed_at), Time.now)

    target = find_room_by_name(config.room)
    message = render_template("build", repo_name: repo_name,
                                       tag: tag)

    case robot.config.robot.adapter
    when :slack
      attachment = ::Lita::Adapters::Slack::Attachment.new(message,
        title: "Docker Hub",
        title_link: repo_url,
        color: "#36a64f")
      robot.chat_service.send_attachment(target, [attachment])
    else
      robot.send_message(target, message)
    end

    response.write("ok")
  else
    response.write("error")
  end
rescue => error
  Lita.logger.error error.message
  Lita.logger.debug error.backtrace.join("\n")

  response.write("error")
end

Private Instance Methods

find_room_by_name(room_name) click to toggle source
# File lib/lita/handlers/docker_hub.rb, line 61
def find_room_by_name(room_name)
  case robot.config.robot.adapter.to_s.to_sym
  when :slack
    if room = ::Lita::Room.find_by_name(room_name)
      return room
    else
      room = ::Lita::Room.find_by_name("general")
      return room
    end
  else
    room_name
  end
end
parse(obj) click to toggle source
# File lib/lita/handlers/docker_hub.rb, line 51
def parse(obj)
  MultiJson.load(obj)
end
time_interval(start_time, end_time) click to toggle source
# File lib/lita/handlers/docker_hub.rb, line 55
def time_interval(start_time, end_time)
  interval = (end_time - start_time).round
  min, sec = interval.divmod(60)
  "#{min} min and #{sec} sec"
end