首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据从散列数组传递到Slack消息

将数据从散列数组传递到Slack消息
EN

Stack Overflow用户
提问于 2020-02-05 19:42:56
回答 1查看 154关注 0票数 0

我正在开发一个松懈的机器人,它向Jira项目的用户发送直接信息,并分配给他们需要完成的任务。我使用Jira-Ruby宝石从Jira获取所有数据。

根据gem文档,我已经建立了一个Jira连接:

代码语言:javascript
复制
def project_board(project_key)
  client = JIRA::Client.new(options)
  client.Project.find(project_key)
end

我创建了一个方法,只获取不具有done状态的已分配的票

代码语言:javascript
复制
def fetch_data
  project = project_board
  project.issues.map do |issue|
    next unless issue.fields.dig('status', 'name') != 'Done' && !issue.fields.dig('assignee', 'name').nil?

    {
      key: issue.key,
      name: issue.fields.dig('assignee', 'name'),
      status: issue.fields.dig('status', 'name')
    }
  end.compact
end

这给了我一系列的哈希:

代码语言:javascript
复制
=> [{:key=>"48", :name=>"john.john1", :status=>"Waiting for DevOps"},
 {:key=>"46", :name=>"john.john3", :status=>"In Progress"},
 {:key=>"45", :name=>"eric.forman", :status=>"Waiting for DevOps"},
 {:key=>"42", :name=>"john.john3", :status=>"Waiting for DevOps"},
 {:key=>"40", :name=>"john.john3", :status=>"Waiting for DevOps"},
 {:key=>"39", :name=>"eric.forman", :status=>"Waiting for DevOps"}]

如何将这些数据传递给松弛消息,使其看起来如下所示?

message to john.john1

代码语言:javascript
复制
"Hi john.john1, here is the list of your today tasks:
-------------------------------------------
48 - With status: Waiting for DevOps
link https://company_name.atlassian.net/48
"

message to eric.forman:

代码语言:javascript
复制
"Hi eric.forman, here is the list of your today tasks:
-------------------------------------------
id: 45
status: Waiting for DevOps
link: https://company_name.atlassian.net/45
-------
id: 39
status: Waiting for DevOps
link: https://company_name.atlassian.net/45
"

等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-06 02:51:13

我建议在格式化之前,将fetch_data的返回值更改为如下所示:

代码语言:javascript
复制
def fetch_data
  # Redacted for brevity ...
  end.compact.group_by { |task| task[:name] }
end

这将返回一个哈希,如

代码语言:javascript
复制
{
 "john.john1"=>[
   {:key=>"48", :name=>"john.john1", :status=>"Waiting for DevOps"}
 ], 
 "john.john3"=>[
   {:key=>"46", :name=>"john.john3", :status=>"In Progress"}, 
   {:key=>"42", :name=>"john.john3", :status=>"Waiting for DevOps"}, 
   {:key=>"40", :name=>"john.john3", :status=>"Waiting for DevOps"}
 ], 
 "eric.forman"=>[
   {:key=>"45", :name=>"eric.forman", :status=>"Waiting for DevOps"},
   {:key=>"39", :name=>"eric.forman", :status=>"Waiting for DevOps"}
 ]
}

这将使迭代每个用户变得更简单:

代码语言:javascript
复制
fetch_data.each do |user, task_list|
  messages = []
  messages << "Hi #{user}, here is the list of your tasks:"
  messages << "-------------------------------------------"
  task_list.each do |task|
  # format each task line
  end

  method_to_send_to_slack(messagges.join("\n"))
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60083032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档