Module: Sinatra::Parsers::WebhookParser
- Included in:
- WebhookJsonParser, WebhookWWWFormURLEncodedParser
- Defined in:
- lib/parsers/webhook_parser.rb
Overview
rubocop:disable Style/Documentation
Instance Attribute Summary collapse
-
#data ⇒ Object
Returns the value of attribute data.
-
#env ⇒ Object
Returns the value of attribute env.
Instance Method Summary collapse
- #bitbucket_webhook? ⇒ Boolean
- #branch ⇒ Object
- #call(body) ⇒ Object
- #deleted? ⇒ Boolean
- #detect_vcs ⇒ Object
- #github_webhook? ⇒ Boolean
- #gitlab_webhook? ⇒ Boolean
- #repo_name ⇒ Object
- #repo_user ⇒ Object
-
#stash_webhook? ⇒ Boolean
stash/bitbucket server.
- #tfs_webhook? ⇒ Boolean
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
7 8 9 |
# File 'lib/parsers/webhook_parser.rb', line 7 def data @data end |
#env ⇒ Object
Returns the value of attribute env.
7 8 9 |
# File 'lib/parsers/webhook_parser.rb', line 7 def env @env end |
Instance Method Details
#bitbucket_webhook? ⇒ Boolean
47 48 49 50 |
# File 'lib/parsers/webhook_parser.rb', line 47 def bitbucket_webhook? # https://confluence.atlassian.com/bitbucket/event-payloads-740262817.html env.key?('HTTP_X_EVENT_KEY') && env.key?('HTTP_X_HOOK_UUID') end |
#branch ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/parsers/webhook_parser.rb', line 60 def branch case @vcs when 'github' if @data.key? 'ref' @data['ref'].sub('refs/heads/', '') else @data['repository']['default_branch'] end when 'gitlab' @data['ref'].sub('refs/heads/', '') when 'stash' @data['changes'][0]['refId'].sub('refs/heads/', '') when 'bitbucket' return @data['push']['changes'][0]['new']['name'] unless deleted? @data['push']['changes'][0]['old']['name'] when 'tfs' @data['resource']['refUpdates'][0]['name'].sub('refs/heads/', '') end end |
#call(body) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/parsers/webhook_parser.rb', line 9 def call(body) @data = parse_data(body) @vcs = detect_vcs { branch: branch, deleted: deleted?, module_name: repo_name.sub(%r{^.*-}, ''), repo_name: repo_name, repo_user: repo_user }.delete_if { |_k, v| v.nil? } end |
#deleted? ⇒ Boolean
81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/parsers/webhook_parser.rb', line 81 def deleted? case @vcs when 'github' @data['deleted'] when 'gitlab' @data['after'] == '0000000000000000000000000000000000000000' when 'stash' @data['changes'][0]['type'] == 'DELETE' when 'bitbucket' @data['push']['changes'][0]['closed'] when 'tfs' @data['resource']['refUpdates'][0]['newObjectId'] == '0000000000000000000000000000000000000000' end end |
#detect_vcs ⇒ Object
21 22 23 24 25 26 27 28 29 |
# File 'lib/parsers/webhook_parser.rb', line 21 def detect_vcs return 'github' if github_webhook? return 'gitlab' if gitlab_webhook? return 'stash' if stash_webhook? return 'bitbucket' if bitbucket_webhook? return 'tfs' if tfs_webhook? raise StandardError, 'payload not recognised' end |
#github_webhook? ⇒ Boolean
31 32 33 34 |
# File 'lib/parsers/webhook_parser.rb', line 31 def github_webhook? # https://developer.github.com/v3/activity/events/types/#pushevent env.key?('HTTP_X_GITHUB_EVENT') end |
#gitlab_webhook? ⇒ Boolean
36 37 38 39 |
# File 'lib/parsers/webhook_parser.rb', line 36 def gitlab_webhook? # https://docs.gitlab.com/ce/user/project/integrations/webhooks.html env.key?('HTTP_X_GITLAB_EVENT') end |
#repo_name ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/parsers/webhook_parser.rb', line 96 def repo_name if @vcs == 'gitlab' @data['project']['name'] elsif @vcs == 'tfs' @data['resource']['repository']['name'] else @data['repository']['name'] end end |
#repo_user ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/parsers/webhook_parser.rb', line 106 def repo_user # TODO: Clarify what repo_user actually is. # github is currently using the repo's 'owner', gitlab is using the user who pushed. case @vcs when 'github' @data['repository']['owner']['login'] when 'gitlab' @data['user_username'] end # TODO: Bitbucket, Stash/Bitbucket Server, TFS end |
#stash_webhook? ⇒ Boolean
stash/bitbucket server
42 43 44 45 |
# File 'lib/parsers/webhook_parser.rb', line 42 def stash_webhook? # https://confluence.atlassian.com/bitbucketserver/event-payload-938025882.html env.key?('HTTP_X_EVENT_KEY') && env.key?('HTTP_X_REQUEST_ID') end |
#tfs_webhook? ⇒ Boolean
52 53 54 55 56 57 58 |
# File 'lib/parsers/webhook_parser.rb', line 52 def tfs_webhook? # https://docs.microsoft.com/en-us/vsts/service-hooks/services/webhooks return false unless @data.key? 'resource' return false unless @data.key? 'eventType' true end |