scotdalton/exlibris-primo

View on GitHub
lib/exlibris/primo/web_service/request/base.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Exlibris
  module Primo
    module WebService
      module Request
        # 
        # Abstract base class for Primo interactions
        # 
        class Base
          include Abstract
          include BaseElements
          include Client
          include Call
          include Config::Attributes
          include Namespaces
          include SoapAction
          include WriteAttributes
          include XmlUtil
          self.abstract = true
          self.add_base_elements :institution, :ip, :group, 
            :on_campus, :is_logged_in, :pds_handle

          DEFAULT_WRAPPER = :request
          attr_reader :root, :wrapper
          protected :root, :wrapper
          attr_writer :base_url, :institution

          def initialize *args
            super
            @root = "#{self.class.name.demodulize}Request".camelize(:lower).to_sym
            @wrapper = DEFAULT_WRAPPER.id2name.camelize(:lower).to_sym
          end

          def to_xml &block
            namespaces = request_namespaces
            build_xml { |xml|
              xml.send(wrapper) {
                xml.cdata build_xml { |xml|
                  xml.send(root, namespaces) {
                    yield xml if block
                    xml << base_elements_xml
                  }
                }
              }
            }
          end
        end

        # 
        # Abstract class for Primo user interactions
        # 
        class UserBase < Base
          # Add user_id to the base elements
          self.add_base_elements :user_id
          self.abstract = true
        end

        # 
        # Abstract class for Primo record interactions
        # 
        class Record < Base
          # Add doc_id to the base elements
          self.add_base_elements :doc_id
          self.abstract = true
        end

        # 
        # Abstract class for Primo user/record interactions
        # 
        class UserRecord < Record
          # Add user_id to the base elements
          self.add_base_elements :user_id
          self.abstract = true
        end
      end
    end
  end
end