Module: GithubBot::Github::Payload

Included in:
Client
Defined in:
lib/github_bot/github/payload.rb

Overview

The GitHub webhook payload information

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object (private)



206
207
208
# File 'lib/github_bot/github/payload.rb', line 206

def method_missing(method_name, *args)
  payload[method_name] || super
end

Instance Method Details

#base_branchString

Public: Returns the base branch that the head was based on



108
109
110
# File 'lib/github_bot/github/payload.rb', line 108

def base_branch
  pull_request[:base][:ref]
end

#check_run?Boolean

Public: Return <true> if the payload event type is of type ‘check_run’; otherwise, <false>



25
26
27
# File 'lib/github_bot/github/payload.rb', line 25

def check_run?
  payload_type == 'check_run'
end

#head_branchString

Public: Returns the head branch that the changes are on



101
102
103
# File 'lib/github_bot/github/payload.rb', line 101

def head_branch
  pull_request[:head][:ref]
end

#head_shaString

Public: Returns the SHA of the most recent commit for this pull request



90
91
92
93
94
95
96
# File 'lib/github_bot/github/payload.rb', line 90

def head_sha
  if issue_comment?
    'HEAD'
  else
    pull_request[:head][:sha]
  end
end

#installation_idInteger

Public: Returns the installation identifier associated to the event



15
16
17
# File 'lib/github_bot/github/payload.rb', line 15

def installation_id
  payload[:installation][:id]
end

#issue_comment?Boolean

Public: Return <true> if the action type is of type ‘issue_comment’; otherwise, <false> This is used for all other comment triggered issue_comment events



41
42
43
# File 'lib/github_bot/github/payload.rb', line 41

def issue_comment?
  payload_type == 'issue_comment'
end

#labeled?Boolean

Public: Return <true> if the payload event type is of type ‘labeled’; otherwise, <false>



46
47
48
# File 'lib/github_bot/github/payload.rb', line 46

def labeled?
  payload_type == 'labeled'
end

#pull_requestHash

Public: Return the activity related to the pull request



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/github_bot/github/payload.rb', line 58

def pull_request
  if pull_request?
    payload[:pull_request]
  elsif check_run?
    payload[:check_run][:pull_requests].first
  elsif issue_comment?
    payload[:issue]
  else
    payload.key?(:pull_request) ? payload[:pull_request] : {}
  end
end

#pull_request?Boolean

Public: Return <true> if the payload event type is of type ‘pull_request’; otherwise, <false>



20
21
22
# File 'lib/github_bot/github/payload.rb', line 20

def pull_request?
  payload_type == 'pull_request'
end

#pull_request_bodyString

Public: Returns the pull request body content



115
116
117
# File 'lib/github_bot/github/payload.rb', line 115

def pull_request_body
  pull_request[:body]
end

#pull_request_numberInteger

Public: Returns the pull request number from the payload



83
84
85
# File 'lib/github_bot/github/payload.rb', line 83

def pull_request_number
  pull_request[:number]
end

#repository_clone_urlString

Public: Returns the repository URL utilized for performing a ‘git clone’



136
137
138
# File 'lib/github_bot/github/payload.rb', line 136

def repository_clone_url
  repository[:clone_url]
end

#repository_default_branchString

Public: Returns the repository default branch



179
180
181
# File 'lib/github_bot/github/payload.rb', line 179

def repository_default_branch
  repository[:default_branch]
end

#repository_fork_urlsArray

Public: Returns the repository fork URL from the original project with the most recent updated forked instance first

Utilizing API: docs.github.com/en/rest/reference/repos#forks Example: api.github.com/repos/octocat/Hello-World/forks?page=1



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/github_bot/github/payload.rb', line 147

def repository_fork_urls
  return @repository_fork_urls if @repository_fork_urls

  @repository_fork_urls =
    [].tap do |ar|
      # iterate over pages of forks
      page_count = 1
      forks_url = repository[:forks_url]
      loop do
        uri = URI.parse(forks_url)
        new_query_ar = URI.decode_www_form(String(uri.query)) << ['page', page_count]
        uri.query = URI.encode_www_form(new_query_ar)

        Rails.logger.info "#{self.class}##{__method__} retrieving #{uri}"

        json = uri.open.read
        json_response = JSON.parse(json)
        break if json_response.empty?

        # iterate over each fork and capture the clone_url
        json_response.each do |fork|
          ar << fork['clone_url']
        end

        page_count += 1
      end
    end
end

#repository_full_nameString

Public: Returns the organization and repository name



129
130
131
# File 'lib/github_bot/github/payload.rb', line 129

def repository_full_name
  repository[:full_name]
end

#repository_nameString

Public: Returns the name of the repository where the event was triggered



122
123
124
# File 'lib/github_bot/github/payload.rb', line 122

def repository_name
  repository[:name]
end

#repository_pull_request_botsArray<String>

Public: Returns a list of class object names to create for validation



186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/github_bot/github/payload.rb', line 186

def repository_pull_request_bots
  return @repository_pull_request_bots if @repository_pull_request_bots

  file = raw_file_url('.github-bots')
  @repository_pull_request_bots = [].tap do |ar|
    if file
      resp = YAML.safe_load(URI.parse(file).open.read)
      ar << resp['pull_request'] if resp['pull_request']
    end
  end.flatten
rescue SyntaxError => e
  Rails.logger.error message: "Error parsing file '#{file}'", exception: e

  # Allow continuation of process just won't utilize any bot validations until
  # parsing error of file is corrected
  {}
end

#reviewObject

Public: Returns the review information for payloads that are of type pull request review



71
72
73
# File 'lib/github_bot/github/payload.rb', line 71

def review
  payload[:review]
end

#review_request_removed?Boolean

Public: Return <true> if the payload event type is of type ‘review_request_removed’; otherwise, <false>



35
36
37
# File 'lib/github_bot/github/payload.rb', line 35

def review_request_removed?
  payload_type == 'review_request_removed'
end

#review_requested?Boolean

Public: Return <true> if the payload event type is of type ‘review_requested’; otherwise, <false>



30
31
32
# File 'lib/github_bot/github/payload.rb', line 30

def review_requested?
  payload_type == 'review_requested'
end

#sender_type_bot?Boolean

Public: Returns <true> if the sender is of type ‘Bot’; otherwise, <false>



76
77
78
# File 'lib/github_bot/github/payload.rb', line 76

def sender_type_bot?
  payload[:sender][:type].downcase == 'bot' # rubocop:disable Performance/Casecmp
end

#unlabeled?Boolean

Public: Return <true> if the payload event type is of type ‘unlabeled’; otherwise, <false>



51
52
53
# File 'lib/github_bot/github/payload.rb', line 51

def unlabeled?
  payload_type == 'unlabeled'
end