class Ruboty::Handlers::Trello

Public Instance Methods

find_member(members, sender) click to toggle source
# File lib/ruboty/trello.rb, line 47
def find_member(members, sender)
  # SlackのDisplay NameとTrelloのUsernameのマッピング
  senders_to_members = {}
  if ENV['TRELLO_MEMBER_FROM_SENDER']
    senders_to_members = JSON.parse(ENV['TRELLO_MEMBER_FROM_SENDER'])
  end
  members.find do |member|
    # sender: SlackのDisplay Name
    # member.username: TrelloのUsername
    # member.full_name: AtlassianのPublic Name
    member.username.downcase == senders_to_members[sender] || member.username.downcase == sender || member.full_name.downcase == sender
  end
end
trello(message) click to toggle source
# File lib/ruboty/trello.rb, line 13
def trello(message)
  me = ::Trello::Member.find('me')

  board = me.boards.find { |board| board.name == message[:board_name] }
  if board.nil?
    message.reply "Board '#{message[:board_name]}' not found"
    return
  end

  list = board.lists.find { |list| list.name == message[:list_name] }
  if list.nil?
    message.reply "List '#{message[:list_name]}' not found"
    return
  end

  label = board.labels.find { |label| label.name == message[:label_name] }
  label_id = label&.id

  member_id = nil
  if ENV['TRELLO_AUTO_ASSIGN'] && message.from_name
    sender = message.from_name.downcase
    member = find_member(board.members, sender)
    member_id = member&.id
  end

  iso8601_time = Time.parse(message[:due_date]).iso8601 rescue nil

  new_card = ::Trello::Card.create(name: message[:name], list_id: list.id, card_labels: label_id, member_ids: member_id, due: iso8601_time)
  if new_card.short_url
    prefix = ENV['TRELLO_RESPONSE_PREFIX'] || 'Created'
    message.reply "#{prefix} #{new_card.short_url}"
  end
end