class PactBroker::Api::Resources::PublishContracts
Public Instance Methods
allowed_methods()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 17 def allowed_methods ["POST", "OPTIONS"] end
content_types_provided()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 13 def content_types_provided [["application/hal+json"]] end
malformed_request?()
click to toggle source
Calls superclass method
PactBroker::Api::Resources::BaseResource#malformed_request?
# File lib/pact_broker/api/resources/publish_contracts.rb, line 21 def malformed_request? super || (request.post? && content_type_json? && validation_errors_for_schema?) end
policy_name()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 39 def policy_name :'contracts::contracts' end
policy_record()
click to toggle source
for pactflow
# File lib/pact_broker/api/resources/publish_contracts.rb, line 44 def policy_record @policy_record ||= pacticipant_service.find_pacticipant_by_name(parsed_contracts.pacticipant_name) end
policy_record_context()
click to toggle source
for pactflow
# File lib/pact_broker/api/resources/publish_contracts.rb, line 49 def policy_record_context { pacticipant: policy_record } end
process_post()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 25 def process_post if content_type_json? if conflict_notices.any? set_conflict_response 409 else publish_contracts true end else 415 end end
Private Instance Methods
base64_decode(content)
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 107 def base64_decode(content) Base64.strict_decode64(content) rescue nil end
conflict_notices()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 103 def conflict_notices @conflict_notices ||= contract_service.conflict_notices(parsed_contracts, base_url: base_url) end
decode_and_parse_content(contract)
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 75 def decode_and_parse_content(contract) contract["decodedContent"] = base64_decode(contract["content"]) if contract["decodedContent"] if contract["contentType"]&.include?("json") contract["decodedParsedContent"] = parse_json(contract["decodedContent"]) elsif contract["contentType"]&.include?("yml") contract["decodedParsedContent"] = parse_yaml(contract["decodedContent"]) end end end
params()
click to toggle source
Calls superclass method
PactBroker::Api::Resources::BaseResource#params
# File lib/pact_broker/api/resources/publish_contracts.rb, line 59 def params p = super(default: {}, symbolize_names: false) if p["contracts"].is_a?(Array) p["contracts"].each do | contract | if contract.is_a?(Hash) decode_and_parse_content(contract) end end end p end
parse_json(content)
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 116 def parse_json(content) PactBroker::Pacts::Parse.call(content) rescue nil end
parse_yaml(content)
click to toggle source
TODO put this somewhere shareable
# File lib/pact_broker/api/resources/publish_contracts.rb, line 112 def parse_yaml(content) YAML.safe_load(content, permitted_classes: [Time, Date, DateTime]) rescue nil end
parsed_contracts()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 55 def parsed_contracts @parsed_contracts ||= decorator_class(:publish_contracts_decorator).new(PactBroker::Contracts::ContractsToPublish.new).from_hash(params, { user_options: { sha_generator: PactBroker.configuration.sha_generator } } ) end
publish_contracts()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 86 def publish_contracts handle_webhook_events(consumer_version_branch: parsed_contracts.branch, build_url: parsed_contracts.build_url) do results = contract_service.publish(parsed_contracts, base_url: base_url) response.body = decorator_class(:publish_contracts_results_decorator).new(results).to_json(**decorator_options) end end
schema()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 71 def schema api_contract_class(:publish_contracts_schema) end
set_conflict_response()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 93 def set_conflict_response response.body = { notices: conflict_notices.collect(&:to_h), errors: { contracts: conflict_notices.select(&:error?).collect(&:text) } }.to_json response.headers["Content-Type"] = "application/json;charset=utf-8" end