75 lines
2.0 KiB
Ruby
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 |