ISBM Adaptor

Build Status Coverage Status Code Climate Dependency Status

The ISBM Adaptor provides a Ruby API for the OpenO&M ws-ISBM specification.

It is based on the Savon SOAP client and provides convenience methods for interaction with an ws-ISBM Service Provider.

Install

Bundler

Add to the isbm_adaptor gem to your Gemfile:

gem 'isbm_adaptor'

This gem uses a three part version, with the first two parts following the OpenO&M ws-ISBM specification and last part specifying a patch number. To use the pessimistic version constraint, you will want to include the three part version in your Gemfile:

gem 'isbm_adaptor', '~> 1.0.0'

Other

The gem can also be installed via the gem install command:

gem install isbm_adaptor

Usage

Create a client object by specifying an endpoint. For example:

client = IsbmAdaptor::ChannelManagement.new('http://example.com/ChannelManagement')

The standard Savon options can also be passed to the client upon creation. For example:

client = IsbmAdaptor::ChannelManagement.new('http://example.com/ChannelManagement', log: true)

Use the client methods to directly send SOAP messages to the server. For example:

client.get_channels

Publish/Subscribe Example

The following shows an example of creating a publication channel, subscribing to the channel and posting a message on the channel.

require 'isbm_adaptor'

channel_management_endpoint = 'http://example.com/ChannelManagement'
consumer_publication_endpoint = 'http://example.com/ConsumerPublication'
provider_publication_endpoint = 'http://example.com/ProviderPublication'

uri = 'unique/publication/uri'
topic = 'unique/topic'
message_content = '<message/>'

channel_client = IsbmAdaptor::ChannelManagement.new(channel_management_endpoint)
channel_client.create_channel(uri, :publication)

subscribe_client = IsbmAdaptor::ConsumerPublication.new(consumer_publication_endpoint)
subscribe_session_id = subscribe_client.open_session(uri, [topic])

publish_client = IsbmAdaptor::ProviderPublication.new(provider_publication_endpoint)
publish_session_id = publish_client.open_session(uri)
publish_client.post_publication(publish_session_id, message_content, topic)

message = subscribe_client.read_publication(subscribe_session_id)
puts message.content.to_s

publish_client.close_session(publish_session_id)
subscribe_client.close_session(subscribe_session_id)
channel_client.delete_channel(uri)

Request/Response Example

The following shows an example of creating a request channel, sending a request and then sending a response.

require 'isbm_adaptor'

channel_management_endpoint = 'http://example.com/ChannelManagement'
provider_request_endpoint = 'http://example.com/ProviderRequest'
consumer_request_endpoint = 'http://example.com/ConsumerRequest'

uri = 'unique/request/uri'
topic = 'unique/topic'
request_content = '<request/>'
response_content = '<response/>'

channel_client = IsbmAdaptor::ChannelManagement.new(channel_management_endpoint)
channel_client.create_channel(uri, :request)

response_client = IsbmAdaptor::ProviderRequest.new(provider_request_endpoint)
response_session_id = response_client.open_session(uri, [topic])

request_client =  IsbmAdaptor::ConsumerRequest.new(consumer_request_endpoint)
request_session_id = request_client.open_session(uri)
request_message_id = request_client.post_request(request_session_id, request_content, topic)

request_message = response_client.read_request(response_session_id)
puts request_message.content.to_s
response_client.remove_request(response_session_id)
response_client.post_response(response_session_id, request_message.id, response_content)

response_message = request_client.read_response(request_session_id, request_message_id)
puts response_message.content.to_s
request_client.remove_response(request_session_id, request_message_id)

request_client.close_session(request_session_id)
response_client.close_session(response_session_id)
channel_client.delete_channel(uri)

License

Copyright 2014 Assetricity, LLC

ISBM Adaptor is released under the MIT License. See LICENSE for details.