Class: IsbmAdaptor::ProviderRequest

Inherits:
Client
  • Object
show all
Defined in:
lib/isbm_adaptor/provider_request.rb

Instance Method Summary collapse

Methods inherited from Client

#extract_message, #validate_inclusion_in, #validate_presence_of, #validate_xml

Constructor Details

#initialize(endpoint, options = {}) ⇒ ProviderRequest

Creates a new ISBM ProviderRequest client.

Parameters:

  • endpoint (String)

    the SOAP endpoint URI

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :wsse_auth (Array<String>)

    username and password, i.e. [username, password]

  • :logger (Object) — default: Rails.logger or $stdout

    location where log should be output

  • :log (Boolean) — default: true

    specify whether requests are logged

  • :pretty_print_xml (Boolean) — default: false

    specify whether request and response XML are formatted



13
14
15
# File 'lib/isbm_adaptor/provider_request.rb', line 13

def initialize(endpoint, options = {})
  super('ProviderRequestService.wsdl', endpoint, options)
end

Instance Method Details

#close_session(session_id) ⇒ void

This method returns an undefined value.

Closes a provider request session.

Parameters:

  • session_id (String)

    the session id

Raises:

  • (ArgumentError)

    if session_id is blank



117
118
119
120
121
122
123
# File 'lib/isbm_adaptor/provider_request.rb', line 117

def close_session(session_id)
  validate_presence_of session_id, 'Session Id'

  @client.call(:close_provider_request_session, message: { 'SessionID' => session_id })

  return true
end

#open_session(uri, topics, listener_url = nil, xpath_expression = nil, xpath_namespaces = []) ⇒ String

Opens a provider request session for a channel for reading requests and posting responses.

Parameters:

  • uri (String)

    the channel URI

  • topics (Array<String>, String)

    a collection of topics or single topic

  • listener_url (String) (defaults to: nil)

    the URL for notification callbacks

  • xpath_expression (String) (defaults to: nil)

    the XPath filter expression

  • xpath_namespaces (Array<Hash>) (defaults to: [])

    the prefixes and namespaces used by the XPath expression. The hash key represents the namespace prefix while the value represents the namespace name. For example,

    “xs” => “www.w3.org/2001/XMLSchema”, “isbm” => “www.openoandm.org/xml/ISBM/”

Returns:

  • (String)

    the session id

Raises:

  • (ArgumentError)

    if uri or topics are blank



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/isbm_adaptor/provider_request.rb', line 29

def open_session(uri, topics, listener_url = nil, xpath_expression = nil, xpath_namespaces = [])
  validate_presence_of uri, 'Channel URI'
  validate_presence_of topics, 'Topics'
  validate_presence_of xpath_expression, 'XPath Expression' if xpath_namespaces.present?

  topics = [topics].flatten

  # Use Builder to generate XML body as we may have multiple Topic elements
  xml = Builder::XmlMarkup.new
  xml.isbm :ChannelURI, uri
  topics.each do |topic|
    xml.isbm :Topic, topic
  end
  xml.isbm :ListenerURL, listener_url unless listener_url.nil?
  xml.isbm :XPathExpression, xpath_expression unless xpath_expression.nil?
  xpath_namespaces.each do |prefix, name|
    xml.isbm :XPathNamespace do
      xml.isbm :NamespacePrefix, prefix
      xml.isbm :NamespaceName, name
    end
  end

  response = @client.call(:open_provider_request_session, message: xml.target!)

  response.to_hash[:open_provider_request_session_response][:session_id].to_s
end

#post_response(session_id, request_message_id, content) ⇒ String

Posts a response message on a channel.

Parameters:

  • session_id (String)

    the session id

  • request_message_id (String)

    the id of the original request message

  • content (String)

    a valid XML string as message contents

Returns:

  • (String)

    the response message id

Raises:

  • (ArgumentError)

    if session_id, request_message_id or content are blank, or content is not valid XML



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/isbm_adaptor/provider_request.rb', line 93

def post_response(session_id, request_message_id, content)
  validate_presence_of session_id, 'Session Id'
  validate_presence_of request_message_id, 'Request Message Id'
  validate_presence_of content, 'Content'
  validate_xml content

  # Use Builder to generate XML body as we need to concatenate XML message content
  xml = Builder::XmlMarkup.new
  xml.isbm :SessionID, session_id
  xml.isbm :RequestMessageID, request_message_id
  xml.isbm :MessageContent do
    xml << content
  end

  response = @client.call(:post_response, message: xml.target!)

  response.to_hash[:post_response_response][:message_id].to_s
end

#read_request(session_id) ⇒ Message

Returns the first request message in the message queue for the session. Note: this service does not remove the message from the message queue.

Parameters:

  • session_id (String)

    the session id

Returns:

  • (Message)

    the first message in the queue for the session. nil if no message.

Raises:

  • (ArgumentError)

    if session_id is blank



63
64
65
66
67
68
69
70
# File 'lib/isbm_adaptor/provider_request.rb', line 63

def read_request(session_id)
  validate_presence_of session_id, 'Session Id'

  message = { 'SessionID' => session_id }
  response = @client.call(:read_request, message: message)

  extract_message(response)
end

#remove_request(session_id) ⇒ void

This method returns an undefined value.

Deletes the first request message, if any, in the message queue for the session.

Parameters:

  • session_id (String)

    the session id

Raises:

  • (ArgumentError)

    if session_id is blank



77
78
79
80
81
82
83
# File 'lib/isbm_adaptor/provider_request.rb', line 77

def remove_request(session_id)
  validate_presence_of session_id, 'Session Id'

  @client.call(:remove_request, message: { 'SessionID' => session_id })

  return true
end