|
- 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
|