require'pact/matchers'modulePactmoduleRequestclassNullExpectationdefto_s"<No expectation>"enddef==(other_object)other_object.is_a?NullExpectationenddef===(other_object)other_object.is_a?NullExpectationenddefeql?(other_object)self==other_objectenddefhash2934820948209428748274238642672enddefempty?trueenddefnil?trueendendclassBaseincludePact::MatchersextendPact::MatchersNULL_EXPECTATION=NullExpectation.newattr_reader:method,:path,:headers,:body,:query,:optionsdefself.from_hash(hash)sym_hash=symbolize_keyshashmethod=sym_hash.fetch(:method)path=sym_hash.fetch(:path)query=sym_hash.fetch(:query,NULL_EXPECTATION)headers=sym_hash.fetch(:headers,NULL_EXPECTATION)body=sym_hash.fetch(:body,NULL_EXPECTATION)new(method,path,headers,body,query)enddefself.symbolize_keyshashhash.inject({}){|memo,(k,v)|memo[k.to_sym]=v;memo}enddefinitialize(method,path,headers,body,query)@method=method.to_s@path=path.chomp('/')@headers=headers@body=body@query=queryenddefto_json(options={})as_json.to_json(options)enddefas_jsonbase_json={method: method,path: path,}base_json.merge!(body: body)unlessbody.is_a?NullExpectationbase_json.merge!(headers: headers)unlessheaders.is_a?NullExpectationbase_json.merge!(query: query)unlessquery.is_a?NullExpectationbase_jsonenddefas_json_without_bodykeep_keys=[:method,:path,:headers,:query]as_json.reject{|key,value|!keep_keys.include?key}enddefshort_description"#{method}#{full_path}"enddeffull_pathfp=''ifpath.empty?fp<<"/"elsefp<<pathendifquery&&!query.empty?fp<<("?"+query)endfpendendclassExpected<BaseDEFAULT_OPTIONS={:allow_unexpected_keys=>false}.freezeattr_accessor:descriptionattr_accessor:optionsdefself.from_hash(hash)request=superrequest.description=hash.fetch(:description,nil)request.options=symbolize_keys(hash).fetch(:options,{})requestenddefinitialize(method,path,headers,body,query,options={})super(method,path,headers,body,query)@options=optionsenddefmatch(actual_request)difference(actual_request).empty?enddefmatches_route?actual_requestdiff({:method=>method,:path=>path},{:method=>actual_request.method,:path=>actual_request.path}).empty?enddefdifference(actual_request)request_diff=diff(as_json_without_body,actual_request.as_json_without_body)unlessbody.is_a?NullExpectationrequest_diff.merge(body_difference(actual_request.body))elserequest_diffendenddefbody_difference(actual_body)diff({:body=>body},{body: actual_body},allow_unexpected_keys: runtime_options[:allow_unexpected_keys_in_body])enddefas_json_with_optionsas_json.merge(options.empty??{}:{options: options})enddefgenerated_bodyPact::Reification.from_term(body)end# Don't want to put the default options in the pact json just yet, so calculating these at run time, rather than assigning# the result to @optionsdefruntime_optionsDEFAULT_OPTIONS.merge(self.class.symbolize_keys(options))endendclassActual<Baseendendend