class PactBroker::Webhooks::WebhookRequestTemplate

Constants

HEADERS_TO_REDACT

Attributes

body[RW]
headers[R]
http_method[RW]
method[RW]
password[RW]
url[RW]
username[RW]
uuid[RW]

Public Class Methods

new(attributes = {}) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 23
def initialize attributes = {}
  attributes.each do | (name, value) |
    instance_variable_set("@#{name}", value) if respond_to?(name)
  end
  @headers = Rack::Utils::HeaderHash.new(attributes[:headers] || {})
end

Public Instance Methods

body_string() click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 69
def body_string
  String === body ? body : body&.to_json
end
body_template_parameters(scope = nil) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 81
def body_template_parameters(scope = nil)
  body_string.scan(parameter_pattern(scope)).flatten.uniq
end
build(template_params, user_agent: nil, disable_ssl_verification: false, cert_store: nil) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 30
def build(template_params, user_agent: nil, disable_ssl_verification: false, cert_store: nil)
  attributes = {
    method: http_method,
    url: build_url(template_params),
    headers: build_headers(template_params),
    username: build_string(username, template_params),
    password: build_string(password, template_params),
    uuid: uuid,
    body: build_body(template_params),
    user_agent: user_agent,
    disable_ssl_verification: disable_ssl_verification,
    cert_store: cert_store
  }
  PactBroker::Domain::WebhookRequest.new(attributes)
end
credentials_template_parameters(scope = nil) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 94
def credentials_template_parameters(scope = nil)
  pattern = parameter_pattern(scope)
  [username, password].compact.collect do | credential |
    credential.scan(pattern)
  end.flatten.uniq
end
description() click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 46
def description
  "#{http_method.upcase} #{URI(PactBroker::Webhooks::Render.render_with_placeholder(url)).host}"
end
display_password() click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 50
def display_password
  password.nil? ? nil : (PactBroker::Webhooks::Render.includes_parameter?(password) ? password : "**********")
end
header_template_parameters(scope = nil) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 85
def header_template_parameters(scope = nil)
  pattern = parameter_pattern(scope)
  headers.values.collect { |value| value.scan(pattern) }.flatten.uniq
end
headers=(headers) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 61
def headers= headers
  @headers = Rack::Utils::HeaderHash.new(headers)
end
redacted_headers() click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 54
def redacted_headers
  headers.each_with_object({}) do | (name, value), new_headers |
    redact = HEADERS_TO_REDACT.any?{ | pattern | name =~ pattern }  && !PactBroker::Webhooks::Render.includes_parameter?(value)
    new_headers[name] = redact ? "**********" : value
  end
end
template_parameters(scope = nil) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 77
def template_parameters(scope = nil)
  body_template_parameters(scope) + url_template_parameters(scope) + header_template_parameters(scope) + credentials_template_parameters(scope)
end
to_s() click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 73
def to_s
  "#{method.upcase} #{url}, username=#{username}, password=#{display_password}, headers=#{redacted_headers}, body=#{body}"
end
url_template_parameters(scope = nil) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 90
def url_template_parameters(scope = nil)
  url.scan(parameter_pattern(scope)).flatten.uniq
end
uses_parameter?(parameter_name) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 65
def uses_parameter?(parameter_name)
  !!body_string&.include?("${" + parameter_name + "}")
end

Private Instance Methods

build_body(template_params) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 111
def build_body(template_params)
  body_string = String === body ? body : body.to_json
  build_string(body_string, template_params)
end
build_headers(template_params) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 116
def build_headers(template_params)
  headers.each_with_object(Rack::Utils::HeaderHash.new) do | (key, value), new_headers |
    new_headers[key] = build_string(value, template_params)
  end
end
build_string(string, template_params) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 122
def build_string(string, template_params)
  return string if string.nil? || string.blank?
  PactBroker::Webhooks::Render.call(string, template_params)
end
build_url(template_params) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 107
def build_url(template_params)
  URI(PactBroker::Webhooks::Render.call(url, template_params){ | value | CGI::escape(value) if !value.nil? } ).to_s
end
parameter_pattern(scope) click to toggle source
# File lib/pact_broker/webhooks/webhook_request_template.rb, line 103
def parameter_pattern(scope)
  scope ? /\${(#{scope}\.[a-zA-z]+)}/ : /\${([a-zA-z]+\.[a-zA-z]+)}/
end