gitlab-org--gitlab-foss/lib/gitlab/hook_data/project_member_builder.rb

66 lines
2 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module HookData
class ProjectMemberBuilder < BaseBuilder
alias_method :project_member, :object
# Sample data
# {
# :created_at=>"2021-03-02T10:43:17Z",
# :updated_at=>"2021-03-02T10:43:17Z",
# :project_name=>"gitlab",
# :project_path=>"gitlab",
# :project_path_with_namespace=>"namespace1/gitlab",
# :project_id=>1,
# :user_username=>"johndoe",
# :user_name=>"John Doe",
# :user_email=>"john@example.com",
# :user_id=>2,
# :access_level=>"Developer",
# :project_visibility=>"internal",
# :event_name=>"user_update_for_team"
# }
def build(event)
[
timestamps_data,
project_member_data,
event_data(event)
].reduce(:merge)
end
private
def project_member_data
project = project_member.project || Project.unscoped.find(project_member.source_id)
{
project_name: project.name,
project_path: project.path,
project_path_with_namespace: project.full_path,
project_id: project.id,
user_username: project_member.user.username,
user_name: project_member.user.name,
user_email: project_member.user.email,
user_id: project_member.user.id,
access_level: project_member.human_access,
project_visibility: project.visibility
}
end
def event_data(event)
event_name = case event
when :create
'user_add_to_team'
when :destroy
'user_remove_from_team'
when :update
'user_update_for_team'
end
{ event_name: event_name }
end
end
end
end