class PactBroker::Api::Resources::Pact

Public Instance Methods

allowed_methods() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 38
def allowed_methods
  ["GET", "PUT", "DELETE", "PATCH", "OPTIONS"]
end
content_types_accepted() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 34
def content_types_accepted
  [["application/json", :from_json]]
end
content_types_provided() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 25
def content_types_provided
  [
    ["application/hal+json", :to_json],
    ["application/json", :to_json],
    ["text/html", :to_html],
    ["application/vnd.pactbrokerextended.v1+json", :to_extended_json]
  ]
end
delete_resource() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 100
def delete_resource
  pact_service.delete(pact_params)
  set_post_deletion_response
  true
end
from_json() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 68
def from_json
  response_code = pact ? 200 : 201

  subscribe(PactBroker::Integrations::EventListener.new) do
    handle_webhook_events do
      if request.patch? && resource_exists?
        @pact = pact_service.merge_pact(pact_params.merge(pact_version_sha: pact_version_sha))
      else
        @pact = pact_service.create_or_update_pact(pact_params.merge(pact_version_sha: pact_version_sha))
      end
    end
  end
  response.body = to_json
  response_code
end
is_conflict?() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 54
def is_conflict?
  merge_conflict = request.patch? && resource_exists? && Pacts::Merger.conflict?(pact.json_content, pact_params.json_content)

  potential_duplicate_pacticipants?(pact_params.pacticipant_names) || merge_conflict || disallowed_modification?
end
malformed_request?() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 60
def malformed_request?
  super || ((request.patch? || request.really_put?) && validation_errors_for_schema?(schema, pact_params.to_hash_for_validation))
end
patch_can_create?() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 50
def patch_can_create?
  true
end
policy_name() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 106
def policy_name
  :'pacts::pact'
end
put_can_create?() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 46
def put_can_create?
  true
end
request_body_required?() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 42
def request_body_required?
  request.put? || request.patch?
end
resource_exists?() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 64
def resource_exists?
  !!pact
end
to_extended_json() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 88
def to_extended_json
  decorator_class(:extended_pact_decorator).new(pact).to_json(**decorator_options(metadata: identifier_from_path[:metadata]))
end
to_html() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 92
def to_html
  PactBroker.configuration.html_pact_renderer.call(
    pact, {
      base_url: ui_base_url,
      badge_url: badge_url_for_latest_pact(pact, ui_base_url)
  })
end
to_json() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 84
def to_json
  decorator_class(:pact_decorator).new(pact).to_json(**decorator_options(metadata: identifier_from_path[:metadata]))
end

Private Instance Methods

disallowed_modification?() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 116
def disallowed_modification?
  if request.really_put? && pact_service.disallowed_modification?(pact, pact_version_sha)
    message_params = { consumer_name: pact_params.consumer_name, consumer_version_number: pact_params.consumer_version_number, provider_name: pact_params.provider_name }
    set_json_error_message(message("errors.validation.pact_content_modification_not_allowed", message_params))
    true
  else
    false
  end
end
pact() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 112
def pact
  @pact ||= pact_service.find_pact(pact_params)
end
pact_version_sha() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 130
def pact_version_sha
  @pact_version_sha ||= pact_service.generate_sha(pact_params.json_content)
end
schema() click to toggle source
# File lib/pact_broker/api/resources/pact.rb, line 126
def schema
  api_contract_class(:put_pact_params_contract)
end