【问题标题】:Ruby rubocops error - assignment branch condition size too highRuby rubocops 错误 - 分配分支条件大小太高
【发布时间】:2020-05-22 13:55:16
【问题描述】:

我有一个简单的方法,可以从 Jira 项目中获取数据,并将任务分配给用户,这些任务还有待完成。有没有办法缩小下面的方法以避免 rubocop condition size too high 错误?

def initialize
  @project = Jira::ProjectConnection.new('project_key').call
end

def assigned_task_list
  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'),
      email: issue.fields.dig('assignee', 'emailAddress'),
      status: issue.fields.dig('status', 'name')
    }
  end
end

【问题讨论】:

  • 项目中的每个issue 都是一个对象吗?我认为这是分离关注点的最佳方式。在Issue 类(或者,可能是Jira::Project::Issue)中添加一个带有fields.dig('status', 'name') != 'Done' && !fields.dig('assignee', 'name').nil? 的方法。您还可以摆脱 issue.fields.dig 并添加一个(或多个)方法,以便您可以使用,例如,issue.assignee_name
  • issues 是来自Jira-ruby gem 的方法
  • 那么每个Issue实际上是一个对象,所以你可以将方法添加到类中。但是将代码重构为spickermann recommends 可能会快得多。

标签: ruby rubocop


【解决方案1】:

大概是这样的?

def assigned_task_list
  assigned_tasks.map do |issue|
    fields = issue.fields
    {
      key: issue.key,
      name: fields.dig('assignee', 'name'),
      email: fields.dig('assignee', 'emailAddress'),
      status: fields.dig('status', 'name')
    }
  end
end

private

def assigned_tasks
  project.issues.select do |issue|
    issue.fields.dig('status', 'name') != 'Done' && 
      issue.fields.dig('assignee', 'name')
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2019-10-17
    • 2021-06-16
    • 2023-04-07
    • 2015-09-05
    • 1970-01-01
    • 2022-06-20
    相关资源
    最近更新 更多