class GitHubWebHooksReceiver::Base
Constants
- KEYWORD_TO_HTTP_STATUS_CODE
Public Class Methods
new(options={})
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 18 def initialize(options={}) @options = symbolize_options(options) end
Public Instance Methods
call(env)
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 22 def call(env) request = Rack::Request.new(env) response = Rack::Response.new process(request, response) response.to_a end
Private Instance Methods
parse_payload(request, response)
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 73 def parse_payload(request, response) if request.content_type == "application/json" payload = request.body.read else payload = request["payload"] end if payload.nil? set_error_response(response, :bad_request, "payload is missing") return end begin JSON.parse(payload) rescue JSON::ParserError set_error_response(response, :bad_request, "invalid JSON format: <#{$!.message}>") nil end end
process(request, response)
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 62 def process(request, response) unless request.post? set_error_response(response, :method_not_allowed, "must POST") return end payload = parse_payload(request, response) return if payload.nil? process_payload(request, response, payload) end
process_payload(request, response, payload)
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 93 def process_payload(request, response, payload) raise NotImplementedError, "Define this method in subclass" end
production?()
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 31 def production? ENV["RACK_ENV"] == "production" end
set_error_response(response, status_keyword, message)
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 56 def set_error_response(response, status_keyword, message) response.status = status(status_keyword) response["Content-Type"] = "text/plain" response.write(message) end
status(keyword)
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 48 def status(keyword) code = KEYWORD_TO_HTTP_STATUS_CODE[keyword] if code.nil? raise ArgumentError, "invalid status keyword: #{keyword.inspect}" end code end
symbolize_options(options)
click to toggle source
# File lib/github-web-hooks-receiver/base.rb, line 35 def symbolize_options(options) symbolized_options = {} options.each do |key, value| symbolized_options[key.to_sym] = value end symbolized_options end