gitlink-forgeplus/app/services/webhook/issue_client.rb

75 lines
2.0 KiB
Ruby

class Webhook::IssueClient
include Webhook::Client
attr_accessor :webhook, :issue, :sender, :event, :changes
attr_accessor :webhook_task
def initialize(webhook, issue, sender, event, changes={})
@webhook = webhook
@issue = issue
@sender = sender
@event = event
@changes = changes
# 构建client参数
super({
uuid: SecureRandom.uuid,
event: @event,
webhook: @webhook,
payload_content: payload_content
})
end
def payload_content
case @event
when "issues"
issue_payload_content
when "issue_assign"
issue_assign_payload_content
when "issue_label"
issue_label_payload_content
end
end
def issue_payload_content
if @changes.blank?
{
"action": "opened",
"number": @issue.project_issues_index,
"issue": JSON.parse(@issue.to_builder.target!),
"project": JSON.parse(@issue.project.to_builder.target!),
"sender": JSON.parse(@sender.to_builder.target!)
}
else
{
"action": "edited",
"number": @issue.project_issues_index,
"changes": @changes,
"issue": JSON.parse(@issue.to_builder.target!),
"project": JSON.parse(@issue.project.to_builder.target!),
"sender": JSON.parse(@sender.to_builder.target!)
}
end
end
def issue_assign_payload_content
{
"action": @changes["assigner_ids"].blank? ? "unassigned" : "assigned",
"number": @issue.project_issues_index,
"issue": JSON.parse(@issue.to_builder.target!),
"project": JSON.parse(@issue.project.to_builder.target!),
"sender": JSON.parse(@sender.to_builder.target!)
}
end
def issue_label_payload_content
{
"action": @changes["issue_tag_ids"].blank? ? "label_cleared" : "label_updated",
"number": @issue.project_issues_index,
"issue": JSON.parse(@issue.to_builder.target!),
"project": JSON.parse(@issue.project.to_builder.target!),
"sender": JSON.parse(@sender.to_builder.target!)
}
end
end