module Patentscope class Webservice PATENTSCOPE_WEBSERVICE_LOCATION = "http://www.wipo.int/patentscope-webservice/servicesPatentScope" def wsdl send_wsdl_request end def get_available_documents(args = {}) ia_number = PctAppNumber.new(args[:ia_number]).to_ia_number perform_operation(:getAvailableDocuments, { iaNumber: ia_number }) end def get_document_content(args = {}) doc_id = args[:doc_id] perform_operation(:getDocumentContent, { docId: doc_id }) end def get_document_ocr_content(args = {}) doc_id = args[:doc_id] perform_operation(:getDocumentOcrContent, { docId: doc_id }) end def get_iasr(args = {}) ia_number = PctAppNumber.new(args[:ia_number]).to_ia_number perform_operation(:getIASR, { iaNumber: ia_number }) end def get_document_table_of_contents(args = {}) doc_id = args[:doc_id] perform_operation(:getDocumentTableOfContents, { docId: doc_id }) end def get_document_content_page(args = {}) doc_id = args[:doc_id] page_id = args[:page_id] perform_operation(:getDocumentContentPage, { docId: doc_id, pageId: page_id }) end private def perform_operation(operation, options_hash) soap_envelope = soapbuilder.build_envelope(operation, options_hash) response = send_soap_request(soap_envelope) if response.include?('This request requires HTTP authentication') raise WrongCredentialsError elsif response.include?('Business error during the execution of service') raise BusinessError else soapbuilder.strip_envelope(response, operation) end end def send_soap_request(soap_envelope_xml) client.post_url(PATENTSCOPE_WEBSERVICE_LOCATION, "text/xml", soap_envelope_xml) end def send_wsdl_request client.get_url(PATENTSCOPE_WEBSERVICE_LOCATION + '?wsdl') end def client raise NoCredentialsError unless Patentscope.configured? Client.new(username: Patentscope.configuration.username, password: Patentscope.configuration.password) end def soapbuilder WebserviceSoapBuilder.new end end end