Class: IsbmAdaptor::ConsumerRequest

Inherits:
Client
  • Object
show all
Defined in:
lib/isbm_adaptor/consumer_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 = {}) ⇒ ConsumerRequest

Creates a new ISBM ConsumerRequest 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/consumer_request.rb', line 13

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

Instance Method Details

#close_session(session_id) ⇒ void

This method returns an undefined value.

Closes a consumer request session.

Parameters:

  • session_id (String)

    the session id

Raises:

  • (ArgumentError)

    if session_id is blank



120
121
122
123
124
125
126
# File 'lib/isbm_adaptor/consumer_request.rb', line 120

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

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

  return true
end

#expire_request(session_id, message_id) ⇒ void

This method returns an undefined value.

Expires a posted request message.

Parameters:

  • session_id (String)

    the session id used to post the request

  • message_id (String)

    the message id received after posting the request

Raises:

  • (ArgumentError)

    if session_id or message_id are blank



71
72
73
74
75
76
77
78
# File 'lib/isbm_adaptor/consumer_request.rb', line 71

def expire_request(session_id, message_id)
  validate_presence_of session_id, 'Session Id'
  validate_presence_of message_id, 'Message Id'

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

  return true
end

#open_session(uri, listener_url = nil) ⇒ String

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

Parameters:

  • uri (String)

    the channel URI

  • listener_url (String) (defaults to: nil)

    the URL for notification callbacks

Returns:

  • (String)

    the session id

Raises:

  • (ArgumentError)

    if uri is blank



24
25
26
27
28
29
30
31
32
33
# File 'lib/isbm_adaptor/consumer_request.rb', line 24

def open_session(uri, listener_url = nil)
  validate_presence_of uri, 'Channel URI'

  message = { 'ChannelURI' => uri }
  message['ListenerURL'] = listener_url if listener_url

  response = @client.call(:open_consumer_request_session, message: message)

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

#post_request(session_id, content, topic, expiry = nil) ⇒ String

Posts a request message on a channel.

Parameters:

  • session_id (String)

    the session id

  • content (String)

    a valid XML string as message contents

  • topic (String)

    the topic

  • expiry (Duration) (defaults to: nil)

    when the message should expire

Returns:

  • (String)

    the request message id

Raises:

  • (ArgumentError)

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



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/isbm_adaptor/consumer_request.rb', line 44

def post_request(session_id, content, topic, expiry = nil)
  validate_presence_of session_id, 'Session Id'
  validate_presence_of content, 'Content'
  validate_presence_of topic, 'Topic'
  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 :MessageContent do
    xml << content
  end
  xml.isbm :Topic, topic
  duration = expiry.to_s
  xml.isbm :Expiry, duration unless duration.nil?

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

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

#read_response(session_id, request_message_id) ⇒ Message

Returns the first response message, if any, in the message queue associated with the request.

Parameters:

  • session_id (String)

    the session id

  • request_message_id (String)

    the id of the original request message

Returns:

  • (Message)

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

Raises:

  • (ArgumentError)

    if session_id or request_message_id are blank



88
89
90
91
92
93
94
95
96
# File 'lib/isbm_adaptor/consumer_request.rb', line 88

def read_response(session_id, request_message_id)
  validate_presence_of session_id, 'Session Id'
  validate_presence_of request_message_id, 'Request Message Id'

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

  extract_message(response)
end

#remove_response(session_id, request_message_id) ⇒ void

This method returns an undefined value.

Deletes the first response message, if any, in the message queue associated with the request.

Parameters:

  • session_id (String)

    the session id

  • request_message_id (String)

    the id of the original request message

Raises:

  • (ArgumentError)

    if session_id is blank



105
106
107
108
109
110
111
112
113
# File 'lib/isbm_adaptor/consumer_request.rb', line 105

def remove_response(session_id, request_message_id)
  validate_presence_of session_id, 'Session Id'
  validate_presence_of request_message_id, 'Request Message Id'

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

  return true
end