class PactBroker::Api::Resources::PublishContracts
Public Instance Methods
allowed_methods()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 21 def allowed_methods ["POST", "OPTIONS"] end
content_types_accepted()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 17 def content_types_accepted [["application/json"]] 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", :to_json]] end
malformed_request?()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 25 def malformed_request? if request.post? invalid_json? || validation_errors_for_schema? else false end end
policy_name()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 43 def policy_name :'contracts::contracts' end
policy_record()
click to toggle source
for Pactflow
# File lib/pact_broker/api/resources/publish_contracts.rb, line 48 def policy_record @policy_record ||= pacticipant_service.find_pacticipant_by_name(parsed_contracts.pacticipant_name) end
process_post()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 33 def process_post if conflict_notices.any? set_conflict_response 409 else publish_contracts true end end
Private Instance Methods
base64_decode(content)
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 106 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 102 def conflict_notices @conflict_notices ||= contract_service.conflict_notices(parsed_contracts) end
decode_and_parse_content(contract)
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 74 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
# File lib/pact_broker/api/resources/publish_contracts.rb, line 58 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 115 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 111 def parse_yaml(content) YAML.safe_load(content, [Time, Date, DateTime]) rescue nil end
parsed_contracts()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 54 def parsed_contracts @parsed_contracts ||= decorator_class(:publish_contracts_decorator).new(PactBroker::Contracts::ContractsToPublish.new).from_hash(params) end
publish_contracts()
click to toggle source
# File lib/pact_broker/api/resources/publish_contracts.rb, line 85 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 70 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 92 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