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