Ruby метод извлечения из блока if - PullRequest
0 голосов
/ 21 апреля 2020

Я использую jira- ruby gem , чтобы создать проблему jira с помощью моего приложения. Билет на доске Jira должен быть создан на одной или двух досках, в зависимости от того, какое действие было инициировано ранее. Например, когда новый участник был добавлен в репо, он должен создать два тикета на двух отдельных досках (поддержка и безопасность). Я должен использовать client.Issue.build дважды (это метод gem), поэтому мне нужно сделать что-то вроде:

  def call
    if SUPPORTBOARD_WEBHOOKS_CLASSES.include?(webhook.action_type_class)
      issue = client.Issue.build
      issue.save(support_ticket_class.new(webhook))
    end

    if SECURIY_WEBHOOKS_CLASSES.include?(webhook.action_type_class)
      issue = client.Issue.build
      issue.save(security_ticket_class.new(webhook))
    end
  end

Из-за RSpe c проблемы с заглушкой client.Issue.build ( здесь имеет отношение topi c) Я хочу извлечь, чтобы отделить метод ниже части от if blo c:

issue = client.Issue.build
issue.save(...)

Как передать support_ticket_class.new(webhook) или security_ticket_class.new(webhook) в issue.save() зависит от блока if выше и извлеките его другим методом.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

создайте метод, принимающий класс заявки и webhook

def create_issue(ticket_class, webhook)
  issue = client.Issue.build
  issue.save(ticket_class.new(webhook))
end

, а затем вызовите этот метод, передав класс заявки и webhook

if SUPPORTBOARD_WEBHOOKS_CLASSES.include?(webhook.action_type_class)
  create_issue(support_ticket_class, webhook)
end

if SECURIY_WEBHOOKS_CLASSES.include?(webhook.action_type_class)
  create_issue(security_ticket_class, webhook)
end
1 голос
/ 21 апреля 2020

Похоже, у вас есть дублирование в вашем коде.

Почему бы не создать ха sh, который отображает action_type_class в соответствующий класс (ы) заявок? Примерно так должно работать: (замените MAPPING более описательным именем)

MAPPING = {
  foo_action: [support_ticket_class, security_ticket_class],
  bar_action: [support_ticket_class],
  baz_action: [security_ticket_class]
}

Затем вы можете выбрать классы заявок для типа действия и создать соответствующие заявки в al oop:

def call
  MAPPING.fetch(webhook.action_type_class, []).each do |ticket_class|
    issue = client.Issue.build
    issue.save(ticket_class.new(webhook))
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...