summaryrefslogtreecommitdiff
path: root/lib/gitlab/hook_data/project_member_builder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/hook_data/project_member_builder.rb')
-rw-r--r--lib/gitlab/hook_data/project_member_builder.rb66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/gitlab/hook_data/project_member_builder.rb b/lib/gitlab/hook_data/project_member_builder.rb
new file mode 100644
index 00000000000..90fc83fdf21
--- /dev/null
+++ b/lib/gitlab/hook_data/project_member_builder.rb
@@ -0,0 +1,66 @@
+# 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