class Sip2::Messages::Base

Sip2 Base message handler

Public Class Methods

message_class_for_method(method_name) click to toggle source

Class helper to fetch the descendant “message” class based on a method name

@param [String] method_name the underscore case name of the class to fetch @return [Class] the message class fetched based on the method_name,

`nil` if no descendant was found

@example

message_class_for_method('patron_information')
=> Sip2::Messages::PatronInformation
# File lib/sip2/messages/base.rb, line 19
def self.message_class_for_method(method_name) # rubocop:disable Metrics/MethodLength
  return @message_class_lookup[method_name] if @message_class_lookup.key? :method_name

  @message_class_lookup[method_name] =
    begin
      # classify the method name so we can fetch the message class of the same name
      class_name = method_name.to_s.capitalize.gsub(%r{(?:_|(/))([a-z\d]*)}i) do
        "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}"
      end
      message_class = Messages.const_get(class_name)
      message_class if message_class && message_class < self
    rescue NameError
      nil
    end
end
new(connection) click to toggle source
# File lib/sip2/messages/base.rb, line 35
def initialize(connection)
  @connection = connection
end

Public Instance Methods

action_message(*args) click to toggle source

Action the message, passing the dynamic arguments to the specific message implementation

@param [*various] args Arguments to pass to the specific message implementation @return returns `nil` if there was no valid message returned.

Otherwise value will depend on the specific message. See the `handle_response`
method in those classes for more information
# File lib/sip2/messages/base.rb, line 45
def action_message(*args)
  message = build_message(*args)
  response = @connection.send_message message
  return if response.nil?

  handle_response(response)
end

Private Instance Methods

build_message(*) click to toggle source
# File lib/sip2/messages/base.rb, line 55
def build_message(*)
  raise NotImplementedError, "#{self.class} must implement `build_message` method"
end
handle_response(_response) click to toggle source
# File lib/sip2/messages/base.rb, line 59
def handle_response(_response)
  raise NotImplementedError, "#{self.class} must implement `handle_response` method"
end