class PactBroker::Api::Resources::ProviderPactsForVerification

Public Instance Methods

allowed_methods() click to toggle source

TODO drop support for GET in next major version. GET was only used by the very first Ruby Pact clients that supported the ‘pacts for verification’ feature, until it became clear that the parameters for the request were going to get nested and complex, at which point the POST was added.

# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 22
def allowed_methods
  ["GET", "POST", "OPTIONS"]
end
content_types_provided() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 14
def content_types_provided
  [["application/hal+json", :to_json]]
end
malformed_request?() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 26
def malformed_request?
  super || ((request.get? || (request.post? && content_type_json?)) && validation_errors_for_schema?(schema, query))
end
process_post() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 30
def process_post
  if content_type_json?
    response.body = to_json
    true
  else
    415
  end
end
read_methods() click to toggle source

For this endoint, the POST is a “read” action (used for Pactflow)

# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 40
def read_methods
  super + %w{POST}
end

Private Instance Methods

log_request() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 96
def log_request
  logger.info "Fetching pacts for verification by #{provider_name}", provider_name: provider_name, params: query
end
nested_query() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 100
def nested_query
  @nested_query ||= Rack::Utils.parse_nested_query(request.uri.query)
end
pacts() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 46
def pacts
  @pacts ||= pact_service.find_for_verification(
    provider_name,
    parsed_query_params.provider_version_branch,
    parsed_query_params.provider_version_tags,
    parsed_query_params.consumer_version_selectors,
    {
      include_wip_pacts_since: parsed_query_params.include_wip_pacts_since,
      include_pending_status: parsed_query_params.include_pending_status
    }
  )
end
parsed_query_params() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 82
def parsed_query_params
  @parsed_query_params ||= decorator_class(:pacts_for_verification_query_decorator).new(OpenStruct.new).from_hash(query)
end
query() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 86
def query
  @query ||= begin
    if request.get?
      nested_query
    elsif request.post?
      params(symbolize_names: false, default: {})
    end
  end
end
resource_title() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 59
def resource_title
  "Pacts to be verified by provider #{provider_name}"
end
schema() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 74
def schema
  if request.get?
    PactBroker::Api::Contracts::PactsForVerificationQueryStringSchema
  elsif request.post?
    PactBroker::Api::Contracts::PactsForVerificationJSONQuerySchema
  end
end
to_json() click to toggle source
# File lib/pact_broker/api/resources/provider_pacts_for_verification.rb, line 63
def to_json
  log_request
  decorator_class(:verifiable_pacts_decorator).new(pacts).to_json(
    **decorator_options(
      include_pending_status: parsed_query_params.include_pending_status,
      title: "Pacts to be verified by provider #{provider_name}",
      deprecated: request.get?
    )
  )
end