67 lines
2 KiB
Ruby
67 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
|