Если dev_role['actors']
это:
[
{"id"=>123,
"displayName"=>"John Doe",
"type"=>"atlassian-user-role-actor",
"name"=>"john.doe",
"actorUser"=>{"accountId"=>"some_id"}},
{"id"=>456,
"displayName"=>"Chris Sth",
"type"=>"atlassian-user-role-actor",
"name"=>"chris.sth",
"actorUser"=>{"accountId"=>"some_id"}},
{"id"=>789,
"displayName"=>"Testing Name",
"type"=>"atlassian-user-role-actor",
"name"=>"testing.name",
"actorUser"=>{"accountId"=>"some_id"}},
]
, то наверняка, что user
в each
блоке будет Hash
объект:
{
"id"=>123,
"displayName"=>"John Doe",
"type"=>"atlassian-user-role-actor",
"name"=>"john.doe",
"actorUser"=>{"accountId"=>"some_id"}
}
Так Выполнение user["name"]
должно привести к: "john.doe"
.
Теперь, когда у нас есть список исключений EXCLUDED_NAMES
, мы можем использовать include?
примерно так:
EXCLUDED_NAMES.include?(user["name"])
=> # true if the name is in the EXCLUDED_NAMES
Итак, все, что вам нужно, это небольшое изменение в вашем коде для исправления условия:
def setup_email
dev_role['actors'].map do |user|
if EXCLUDED_NAMES.include?(user["name"])
user.delete
else
"#{user['name']}@example.com"
end
end
end
Однако есть одна проблема, user.delete
не будет работать, так как ожидает аргумент он должен быть ключом к объекту ha sh.
Это можно исправить с помощью reject
или select
(изменяясь на reject
, как читается лучше):
def setup_email
dev_role['actors'].reject do |user|
EXCLUDED_NAMES.include?(user["name"])
end.map{ |user| user["name"] }
end
Природа метода, кажется, возвращает массив / список, поэтому я настаиваю на том, что имя таких методов должно быть во множественном числе: setup_emails
.