exlibris-primo 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +35 -1
- data/lib/exlibris-primo.rb +4 -2
- data/lib/exlibris/primo/eshelf.rb +80 -0
- data/lib/exlibris/primo/record.rb +112 -0
- data/lib/exlibris/primo/version.rb +1 -1
- data/lib/exlibris/primo/web_service.rb +65 -5
- data/test/unit/eshelf_test.rb +152 -0
- data/test/unit/record_test.rb +77 -0
- data/test/unit/web_service_test.rb +22 -0
- metadata +16 -10
    
        data/README.rdoc
    CHANGED
    
    | @@ -6,7 +6,7 @@ Exlibris::Primo offers a set of libraries for interacting with the ExLibris Prim | |
| 6 6 | 
             
            The Exlibris::Primo::Searcher class performs a search against Primo for given parameters
         | 
| 7 7 | 
             
            and exposes the set of holdings (availibrary elements), rsrcs, tocs, and related links (addlink elements).
         | 
| 8 8 |  | 
| 9 | 
            -
             | 
| 9 | 
            +
            === Example of Exlibris::Primo::Searcher in action
         | 
| 10 10 | 
             
              setup = {
         | 
| 11 11 | 
             
                :base_url => "http://primo.institution.edu", :vid => "VID", :institution => "INSTITUTION",
         | 
| 12 12 | 
             
                :config => {
         | 
| @@ -29,3 +29,37 @@ and exposes the set of holdings (availibrary elements), rsrcs, tocs, and related | |
| 29 29 | 
             
              rsrcs = searcher.rsrcs
         | 
| 30 30 | 
             
              tocs = searcher.tocs
         | 
| 31 31 | 
             
              related_links = searcher.related_links
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            == Exlibris::Primo::Record
         | 
| 34 | 
            +
            The Exlibris::Primo::Record class creates an object representation of a Primo record for given parameters
         | 
| 35 | 
            +
            and exposes the record's primary attributes (format, title, author, url, openurl) and full record Xml (raw_xml)
         | 
| 36 | 
            +
            as instance variables.
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            === Example of Exlibris::Primo::Record in action
         | 
| 39 | 
            +
              setup = { 
         | 
| 40 | 
            +
                :base_url => "http://primo.institution.edu", 
         | 
| 41 | 
            +
                :resolver_base_url => "http://sfx.institution.edu", 
         | 
| 42 | 
            +
                :vid => "VID", 
         | 
| 43 | 
            +
                :institution => "DEFAULT", 
         | 
| 44 | 
            +
                :record_id => "PrimoRecordId" 
         | 
| 45 | 
            +
              }
         | 
| 46 | 
            +
              record = Exlibris::Primo::Record.new(setup)
         | 
| 47 | 
            +
              raw_xml = record.instance_variable_get(:@raw_xml)
         | 
| 48 | 
            +
              record_hash = record.to_h
         | 
| 49 | 
            +
              openurl = record_hash["openurl"]
         | 
| 50 | 
            +
            	
         | 
| 51 | 
            +
            == Exlibris::Primo::EShelf
         | 
| 52 | 
            +
            The Exlibris::Primo::EShelf class provides methods for reading a given user's Primo eshelf and eshelf structure as well as adding and removing records.
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            === Example of Exlibris::Primo::EShelf in action
         | 
| 55 | 
            +
              setup = { 
         | 
| 56 | 
            +
                :base_url => "http://primo.institution.edu", 
         | 
| 57 | 
            +
                :vid => "VID", 
         | 
| 58 | 
            +
                :resolver_base_url => "http://sfx.institution.edu"
         | 
| 59 | 
            +
              }
         | 
| 60 | 
            +
              eshelf = Exlibris::Primo::EShelf.new(setup, "USER_ID", "PRIMO")
         | 
| 61 | 
            +
              records = eshelf.records
         | 
| 62 | 
            +
              p records.first.class
         | 
| 63 | 
            +
              record_count = eshelf.count
         | 
| 64 | 
            +
              basket_id = eshelf.basket_id
         | 
| 65 | 
            +
              eshelf.add_records(["PrimoRecordId","PrimoRecordId2"], basket_id)
         | 
    
        data/lib/exlibris-primo.rb
    CHANGED
    
    | @@ -1,5 +1,7 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            PRIMO_PATH = File.dirname(__FILE__) + "/exlibris/primo/"
         | 
| 2 2 | 
             
            [ 
         | 
| 3 | 
            +
              'record',
         | 
| 4 | 
            +
              'eshelf',
         | 
| 3 5 | 
             
              'web_service',
         | 
| 4 6 | 
             
              'holding',
         | 
| 5 7 | 
             
              'related_link',
         | 
| @@ -8,5 +10,5 @@ PATH = File.dirname(__FILE__) + "/exlibris/primo/" | |
| 8 10 | 
             
              'searcher',
         | 
| 9 11 | 
             
              'source/aleph'
         | 
| 10 12 | 
             
            ].each do |library|
         | 
| 11 | 
            -
              require  | 
| 13 | 
            +
              require PRIMO_PATH + library
         | 
| 12 14 | 
             
            end
         | 
| @@ -0,0 +1,80 @@ | |
| 1 | 
            +
            module Exlibris
         | 
| 2 | 
            +
              module Primo
         | 
| 3 | 
            +
                # == Overview
         | 
| 4 | 
            +
                # Exlibris::Primo::EShelf provides access to the Primo Eshelf for a given user.
         | 
| 5 | 
            +
                # An instance of Exlibris::Primo::EShelf can be created by passing
         | 
| 6 | 
            +
                # in a hash with setup parameters, a user_id and an institution.
         | 
| 7 | 
            +
                # Valid setup parameters include:
         | 
| 8 | 
            +
                #   :base_url, :resolver_base_url, :vid, :config
         | 
| 9 | 
            +
                #
         | 
| 10 | 
            +
                # == Examples of usage
         | 
| 11 | 
            +
                #   Exlibris::Primo::EShelf.new({ :base_url => "http://primo.institution.edu", :vid => "VID", :resolver_base_url => "http://sfx.institution.edu"} , "USER_ID", "PRIMO").count
         | 
| 12 | 
            +
                #   Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).basket_id
         | 
| 13 | 
            +
                class EShelf
         | 
| 14 | 
            +
                  
         | 
| 15 | 
            +
                  #Namespaces
         | 
| 16 | 
            +
                  SEAR_NS = {'sear' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
         | 
| 17 | 
            +
                  PRIM_NS = {'prim' => 'http://www.exlibris.com/primo/xsd/primoeshelffolder'}
         | 
| 18 | 
            +
                  
         | 
| 19 | 
            +
                  def initialize(setup, user_id, institution)
         | 
| 20 | 
            +
                    @base_url = setup[:base_url]
         | 
| 21 | 
            +
                    raise_required_setup_parameter_error :base_url if @base_url.nil?
         | 
| 22 | 
            +
                    @resolver_base_url = setup[:resolver_base_url]
         | 
| 23 | 
            +
                    @vid = setup.fetch(:vid, "DEFAULT")
         | 
| 24 | 
            +
                    raise_required_setup_parameter_error :vid if @vid.nil?
         | 
| 25 | 
            +
                    @config = setup.fetch(:config, {})
         | 
| 26 | 
            +
                    raise_required_setup_parameter_error :config if @config.nil?
         | 
| 27 | 
            +
                    @user_id = user_id
         | 
| 28 | 
            +
                    raise_required_setup_parameter_error :user_id if @user_id.nil?
         | 
| 29 | 
            +
                    @institution = institution
         | 
| 30 | 
            +
                    raise_required_setup_parameter_error :institution if @institution.nil?
         | 
| 31 | 
            +
                    @records = []
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                
         | 
| 34 | 
            +
                  # Call Web Service to get Eshelf contents and return
         | 
| 35 | 
            +
                  def eshelf
         | 
| 36 | 
            +
                    @eshelf ||= Exlibris::Primo::WebService::GetEShelf.new(@user_id, @institution, @base_url).response
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                  
         | 
| 39 | 
            +
                  # Call Web Service to get Eshelf structure and return
         | 
| 40 | 
            +
                  def eshelfStructure
         | 
| 41 | 
            +
                    @eshelfStructure ||= Exlibris::Primo::WebService::GetEShelfStructure.new(@user_id, @institution, @base_url).response
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
                  
         | 
| 44 | 
            +
                  # Fetch the number of records in user's Eshelf
         | 
| 45 | 
            +
                  def count
         | 
| 46 | 
            +
                    @count ||= Integer(eshelf.at("//sear:DOCSET", SEAR_NS)["TOTALHITS"])
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                
         | 
| 49 | 
            +
                  # Fetch all records from user's Eshelf as an array of Primo Record objects
         | 
| 50 | 
            +
                  def records    
         | 
| 51 | 
            +
                    eshelf.search("//sear:DOC", SEAR_NS).each { |doc|
         | 
| 52 | 
            +
                      @records.push(Record.new({ :base_url => @base_url, :resolver_base_url => @resolver_base_url, :vid => @vid, :record => doc.at("//xmlns:record", doc.namespaces), :institution => @institution }))
         | 
| 53 | 
            +
                    } if @records.empty?
         | 
| 54 | 
            +
                    return @records
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
                  
         | 
| 57 | 
            +
                  # Fetch default basket id from eshelf structure web service call
         | 
| 58 | 
            +
                  def basket_id
         | 
| 59 | 
            +
                    @basket_id ||= eshelfStructure.at(
         | 
| 60 | 
            +
                      "//prim:eshelf_folders//prim:eshelf_folder[./prim:folder_name='Basket']", PRIM_NS).
         | 
| 61 | 
            +
                      get_attribute("folder_id") unless eshelfStructure.at("//prim:eshelf_folders//prim:eshelf_folder[./prim:folder_name='Basket']", PRIM_NS).nil?
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                  
         | 
| 64 | 
            +
                  # Call Web Service to add records to remote Eshelf
         | 
| 65 | 
            +
                  def add_records(doc_ids, folder_id)
         | 
| 66 | 
            +
                    Exlibris::Primo::WebService::AddToEShelf.new(doc_ids, folder_id, @user_id, @institution, @base_url) unless doc_ids.empty?
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  # Call Web Service to remove records from remote EShelf
         | 
| 70 | 
            +
                  def remove_records(doc_ids, folder_id)
         | 
| 71 | 
            +
                    Exlibris::Primo::WebService::RemoveFromEShelf.new(doc_ids, folder_id, @user_id, @institution, @base_url) unless doc_ids.empty?
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
                  
         | 
| 74 | 
            +
                  private
         | 
| 75 | 
            +
                  def raise_required_setup_parameter_error(parameter)
         | 
| 76 | 
            +
                    raise ArgumentError.new("Error in #{self.class}. Missing required setup parameter: #{parameter}.")
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
            end
         | 
| @@ -0,0 +1,112 @@ | |
| 1 | 
            +
            module Exlibris
         | 
| 2 | 
            +
              module Primo
         | 
| 3 | 
            +
                # == Overview
         | 
| 4 | 
            +
                # Exlibris::Primo::Record is an abstract representation of a Primo record.
         | 
| 5 | 
            +
                # An instance of Exlibris::Primo::Record can be created by passing
         | 
| 6 | 
            +
                # in a hash with setup parameters.
         | 
| 7 | 
            +
                # Valid parameters include:
         | 
| 8 | 
            +
                #   :base_url, :resolver_base_url, :vid, :institution, :record_id, :record
         | 
| 9 | 
            +
                # A URL to the native record (dlDisplay.do) and an OpenUrl are generated by default. 
         | 
| 10 | 
            +
                # If no resolver_base_url is provided, an OpenUrl querystring will be returned.
         | 
| 11 | 
            +
                # A raw_xml attribute is generated either by the record XML passed in or by fetching it from the record_id.
         | 
| 12 | 
            +
                # By default the raw_xml is not included in the hash representation, but can be overridden to.
         | 
| 13 | 
            +
                #
         | 
| 14 | 
            +
                # == Tips on Extending
         | 
| 15 | 
            +
                # When extending the class, a few basics guidelines should be observed.
         | 
| 16 | 
            +
                # 1.  A Exlibris::Primo::Record is initialized from a Hash of parameters.
         | 
| 17 | 
            +
                #     These params are used to create instance variables of the record attributes.
         | 
| 18 | 
            +
                #
         | 
| 19 | 
            +
                # 2.  The following methods are available for overriding:
         | 
| 20 | 
            +
                #     to_h -    if a sub class creates more instance variables, these should be added to the hash
         | 
| 21 | 
            +
                #     raw  -    cleans up characters and spaces in raw record and wraps in <record /> tag, implementations may differ
         | 
| 22 | 
            +
                #
         | 
| 23 | 
            +
                # == Examples of usage
         | 
| 24 | 
            +
                #   Record.new({ :base_url => @base_url, :vid => @vid, :record => doc.at("//record") })
         | 
| 25 | 
            +
                class Record
         | 
| 26 | 
            +
                  
         | 
| 27 | 
            +
                  SEAR_NS = {'sear' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
         | 
| 28 | 
            +
                  attr_reader :record_id, :type, :title, :url, :openurl, :creator, :raw_xml
         | 
| 29 | 
            +
                  
         | 
| 30 | 
            +
                  def initialize(parameters={})
         | 
| 31 | 
            +
                      # Get base url of Primo application, required
         | 
| 32 | 
            +
                      base_url = parameters[:base_url]
         | 
| 33 | 
            +
                      raise_required_setup_parameter_error :base_url if base_url.nil?
         | 
| 34 | 
            +
                      # Get base url of link resolver, if blank openurl generates just querystring
         | 
| 35 | 
            +
                      resolver_base_url = parameters[:resolver_base_url]
         | 
| 36 | 
            +
                      # Get vid from parameters, required
         | 
| 37 | 
            +
                      vid = parameters.fetch(:vid, "DEFAULT")
         | 
| 38 | 
            +
                      raise_required_setup_parameter_error :vid if vid.nil?
         | 
| 39 | 
            +
                      # Get institution from parameters, required
         | 
| 40 | 
            +
                      institution = parameters.fetch(:institution, "PRIMO")
         | 
| 41 | 
            +
                      raise_required_setup_parameter_error :institution if institution.nil?
         | 
| 42 | 
            +
                      # Get record: either fetch record from Web Service based on DocId or use passed in record xml, required
         | 
| 43 | 
            +
                      record = (parameters[:record].nil?) ? 
         | 
| 44 | 
            +
                          (parameters[:record_id].nil?) ? 
         | 
| 45 | 
            +
                              nil : record_from_id(parameters.delete(:record_id), base_url, {:institution => institution, :vid => vid}) : parameters.delete(:record)
         | 
| 46 | 
            +
                      raise_required_setup_parameter_error "record or record_id" if record.nil?
         | 
| 47 | 
            +
                      # Set instance variables for record
         | 
| 48 | 
            +
                      @record_id = record.at("control/recordid",record.namespaces).inner_text unless record.at("control/recordid",record.namespaces).nil?
         | 
| 49 | 
            +
                      @type = record.at("display/type",record.namespaces).inner_text unless record.at("display/type",record.namespaces).nil?
         | 
| 50 | 
            +
                      @title = record.at("display/title",record.namespaces).inner_text unless record.at("display/title",record.namespaces).nil?
         | 
| 51 | 
            +
                      @url = construct_url(base_url, @record_id, institution, vid)
         | 
| 52 | 
            +
                      @openurl = construct_openurl(resolver_base_url, record, @record_id)
         | 
| 53 | 
            +
                      @creator = record.at("display/creator",record.namespaces).inner_text unless record.at("display/creator",record.namespaces).nil?
         | 
| 54 | 
            +
                      @raw_xml = raw(record)
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  # Return a hash representation of the primary record attributes
         | 
| 58 | 
            +
                  def to_h
         | 
| 59 | 
            +
                      return {
         | 
| 60 | 
            +
                          "format" => @type.capitalize, 
         | 
| 61 | 
            +
                          "title" => @title, 
         | 
| 62 | 
            +
                          "author" => @creator,
         | 
| 63 | 
            +
                          "url" => @url,
         | 
| 64 | 
            +
                          "openurl" => @openurl
         | 
| 65 | 
            +
                      }
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
                  
         | 
| 68 | 
            +
                  # Method for cleaning up raw xml from record
         | 
| 69 | 
            +
                  def raw(record)
         | 
| 70 | 
            +
                      raw = "<record>"
         | 
| 71 | 
            +
                      # Hack to strip out spacing in record
         | 
| 72 | 
            +
                      record.children.each{|child| raw << child.to_xml.gsub(/\n\s*/, "").gsub(/\s$/, "")}
         | 
| 73 | 
            +
                      raw << "</record>"
         | 
| 74 | 
            +
                      return raw
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  private
         | 
| 78 | 
            +
                  # Method for consturcting openurl from record
         | 
| 79 | 
            +
                  def construct_openurl(resolver_base_url, record, record_id)
         | 
| 80 | 
            +
                      raise_required_setup_parameter_error :record if record.nil?
         | 
| 81 | 
            +
                      raise_required_setup_parameter_error :record_id if record_id.nil?
         | 
| 82 | 
            +
                      openurl = (resolver_base_url.nil?) ? "?" : "#{resolver_base_url}?"
         | 
| 83 | 
            +
                      record.search("addata/*",record.namespaces).each do |addata|
         | 
| 84 | 
            +
                        openurl << "rft.#{addata.name}=#{addata.inner_text}&" unless (addata.inner_text.nil? or addata.inner_text.strip.empty?)
         | 
| 85 | 
            +
                      end
         | 
| 86 | 
            +
                      openurl << "rft.primo=#{record_id}"
         | 
| 87 | 
            +
                      return openurl
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
                
         | 
| 90 | 
            +
                  # Method for constructing deep link url from record
         | 
| 91 | 
            +
                  def construct_url(base_url, record_id, institution, vid)
         | 
| 92 | 
            +
                      raise_required_setup_parameter_error :base_url if base_url.nil?
         | 
| 93 | 
            +
                      raise_required_setup_parameter_error :record_id if record_id.nil?
         | 
| 94 | 
            +
                      raise_required_setup_parameter_error :institution if institution.nil?
         | 
| 95 | 
            +
                      raise_required_setup_parameter_error :vid if vid.nil?
         | 
| 96 | 
            +
                      url = "#{base_url}/primo_library/libweb/action/dlDisplay.do?dym=false&onCampus=false&docId=#{record_id}&institution=#{institution}&vid=#{vid}"
         | 
| 97 | 
            +
                      return url
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  # Fetch record from Primo Web Service
         | 
| 101 | 
            +
                  def record_from_id(record_id, base_url, options={})
         | 
| 102 | 
            +
                      doc = Exlibris::Primo::WebService::GetRecord.new(record_id, base_url, options).response.at("//sear:DOC", SEAR_NS)
         | 
| 103 | 
            +
                      return doc.at("//xmlns:record",doc.namespaces)
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  # Raise error wrapper
         | 
| 107 | 
            +
                  def raise_required_setup_parameter_error(parameter)
         | 
| 108 | 
            +
                      raise ArgumentError.new("Error in #{self.class}. Missing required setup parameter: #{parameter}.")
         | 
| 109 | 
            +
                  end
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
              end
         | 
| 112 | 
            +
            end
         | 
| @@ -27,10 +27,18 @@ module Exlibris | |
| 27 27 | 
             
                      raise "Error making call to Primo web service.  Response from web service is #{@response}." if @response.nil?
         | 
| 28 28 | 
             
                      @error = []
         | 
| 29 29 | 
             
                      response.search("ERROR").each do |e|
         | 
| 30 | 
            -
                         | 
| 30 | 
            +
                        # Primo Web Service calls will return an <ERROR MESSAGE="{MESSAGE}" CODE="{CODE}" />
         | 
| 31 | 
            +
                        # tag even when it succeeds. Key off CODE == 0 which is a successful call.
         | 
| 32 | 
            +
                        #debugger
         | 
| 33 | 
            +
                        @error.push(e.attributes["MESSAGE"]) unless e.nil? or e.attributes["CODE"].value.to_i == 0
         | 
| 31 34 | 
             
                      end
         | 
| 32 35 | 
             
                      raise "Error making call to Primo web service.  #{@error.inspect}" unless @error.empty?
         | 
| 33 36 | 
             
                    end
         | 
| 37 | 
            +
                    
         | 
| 38 | 
            +
                    private
         | 
| 39 | 
            +
                    def tag!(name, value)
         | 
| 40 | 
            +
                      REXML::Element.new(name).add_text(value)
         | 
| 41 | 
            +
                    end
         | 
| 34 42 | 
             
                  end
         | 
| 35 43 |  | 
| 36 44 | 
             
                  # Search is the base class for Search web services
         | 
| @@ -108,10 +116,6 @@ module Exlibris | |
| 108 116 | 
             
                    def genre_query_term(genre)
         | 
| 109 117 | 
             
                      return query_term(genre, "any", "exact")
         | 
| 110 118 | 
             
                    end
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                    def tag!(name, value)
         | 
| 113 | 
            -
                      REXML::Element.new(name).add_text(value)
         | 
| 114 | 
            -
                    end
         | 
| 115 119 | 
             
                  end
         | 
| 116 120 |  | 
| 117 121 | 
             
                  # SearchBrief does a brief result search through the Primo APIs
         | 
| @@ -138,6 +142,62 @@ module Exlibris | |
| 138 142 | 
             
                      super("getRecord", "getRecordRequest", "fullViewRequest", primo_search_request, additional_input, base_url, options)
         | 
| 139 143 | 
             
                    end
         | 
| 140 144 | 
             
                  end
         | 
| 145 | 
            +
                  
         | 
| 146 | 
            +
                  # EShelf is the base class for EShelf web services
         | 
| 147 | 
            +
                  # It can be extended but is not intended for use by itself
         | 
| 148 | 
            +
                  # Known implementations are GetEShelf, AddToEShelf, RemoveFromEShelf, GetEShelfStructure
         | 
| 149 | 
            +
                  class EShelf < WebServiceBase
         | 
| 150 | 
            +
                    def initialize(method_name, param_name, input_root, user_id, institution, additional_input, base_url, options, service_name = nil)
         | 
| 151 | 
            +
                      input = REXML::Element.new(input_root)
         | 
| 152 | 
            +
                      input.add_namespace("http://www.exlibris.com/primo/xsd/wsRequest")
         | 
| 153 | 
            +
                      input.add_element(tag!("userId", user_id)) if !user_id.nil?
         | 
| 154 | 
            +
                      input.add_element(tag!("institution", institution)) if !institution.nil?
         | 
| 155 | 
            +
                      additional_input.each do |e|  
         | 
| 156 | 
            +
                        input.add_element(e)
         | 
| 157 | 
            +
                      end
         | 
| 158 | 
            +
                      service_name = "eshelf" if service_name.nil?
         | 
| 159 | 
            +
                      make_call(base_url, service_name, method_name, param_name, input)
         | 
| 160 | 
            +
                    end
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                    private
         | 
| 163 | 
            +
                    def docs(doc_ids=[], folder_id=nil, folder_name=nil)
         | 
| 164 | 
            +
                      additional_input = []
         | 
| 165 | 
            +
                      doc_ids.each { |doc_id| additional_input.push(tag!("docId", doc_id)) }
         | 
| 166 | 
            +
                      additional_input.push(tag!("folderId", folder_id)) unless folder_id.nil?
         | 
| 167 | 
            +
                      additional_input.push(tag!("folderName", folder_name)) unless folder_name.nil?
         | 
| 168 | 
            +
                      return additional_input
         | 
| 169 | 
            +
                    end
         | 
| 170 | 
            +
                  end
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                  # Get EShelf based on user_id and institution
         | 
| 173 | 
            +
                  class GetEShelf < EShelf
         | 
| 174 | 
            +
                    def initialize(user_id, institution, base_url, options={})
         | 
| 175 | 
            +
                      super("getEshelf", "getEshelfRequest", "getEshelfRequest", user_id, institution, [], base_url, options)
         | 
| 176 | 
            +
                      raise "Error making call to Primo web service.  #{@error.inspect}" unless @error.empty? or @error.attribe
         | 
| 177 | 
            +
                    end
         | 
| 178 | 
            +
                  end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                  # Get EShelf structure based on user_id and institution
         | 
| 181 | 
            +
                  class GetEShelfStructure < EShelf
         | 
| 182 | 
            +
                    def initialize(user_id, institution, base_url, options={})
         | 
| 183 | 
            +
                      super("getEshelfStructure", "getEshelfStructureRequest", "getEshelfStructureRequest", user_id, institution, [tag!("includeBasketItems","false")], base_url, options, "eshelfstructure")
         | 
| 184 | 
            +
                      raise "Error making call to Primo web service.  #{@error.inspect}" unless @error.empty? or @error.attribe
         | 
| 185 | 
            +
                    end
         | 
| 186 | 
            +
                  end
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                  # Add document to EShelf based on user_id and institution
         | 
| 189 | 
            +
                  class AddToEShelf < EShelf
         | 
| 190 | 
            +
                    def initialize(doc_ids, folder_id, user_id, institution, base_url, options={})
         | 
| 191 | 
            +
                      super("addToEshelf", "addToEshelfRequest", "addToEshelfRequest", user_id, institution, docs(doc_ids, folder_id), base_url, options)
         | 
| 192 | 
            +
                    end
         | 
| 193 | 
            +
                  end
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                  # Remove document from EShelf based on user_id and institution
         | 
| 196 | 
            +
                  class RemoveFromEShelf < EShelf
         | 
| 197 | 
            +
                    def initialize(doc_ids, folder_id, user_id, institution, base_url, options={})
         | 
| 198 | 
            +
                      super("removeFromEshelf", "removeFromEshelfRequest", "removeFromEshelfRequest", user_id, institution, docs(doc_ids, folder_id), base_url, options)
         | 
| 199 | 
            +
                    end
         | 
| 200 | 
            +
                  end
         | 
| 141 201 | 
             
                end
         | 
| 142 202 | 
             
              end
         | 
| 143 203 | 
             
            end
         | 
| @@ -0,0 +1,152 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class EShelfTest < ActiveSupport::TestCase
         | 
| 4 | 
            +
              PNX_NS = {'pnx' => 'http://www.exlibrisgroup.com/xsd/primo/primo_nm_bib'}
         | 
| 5 | 
            +
              SEARCH_NS = {'search' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
         | 
| 6 | 
            +
              SEAR_NS = {'sear' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
         | 
| 7 | 
            +
              PRIM_NS = {'prim' => 'http://www.exlibris.com/primo/xsd/primoeshelffolder'}
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              def setup
         | 
| 10 | 
            +
                  @primo_definition = YAML.load( %{
         | 
| 11 | 
            +
                      type: PrimoService
         | 
| 12 | 
            +
                      priority: 2 # After SFX, to get SFX metadata enhancement
         | 
| 13 | 
            +
                      status: active
         | 
| 14 | 
            +
                      base_url: http://bobcat.library.nyu.edu
         | 
| 15 | 
            +
                      resolver_base_url: https://getit.library.nyu.edu/resolve
         | 
| 16 | 
            +
                      vid: NYU
         | 
| 17 | 
            +
                      institution: NYU
         | 
| 18 | 
            +
                      holding_search_institution: NYU
         | 
| 19 | 
            +
                      holding_search_text: Search for this title in BobCat.
         | 
| 20 | 
            +
                      suppress_holdings: [ !ruby/regexp '/\$\$LBWEB/', !ruby/regexp '/\$\$LNWEB/', !ruby/regexp '/\$\$LTWEB/', !ruby/regexp '/\$\$LWEB/', !ruby/regexp '/\$\$1Restricted Internet Resources/' ]
         | 
| 21 | 
            +
                      ez_proxy: !ruby/regexp '/https\:\/\/ezproxy\.library\.nyu\.edu\/login\?url=/'
         | 
| 22 | 
            +
                      service_types:
         | 
| 23 | 
            +
                        - primo_source
         | 
| 24 | 
            +
                        - holding_search
         | 
| 25 | 
            +
                        - fulltext
         | 
| 26 | 
            +
                        - table_of_contents
         | 
| 27 | 
            +
                        - referent_enhance
         | 
| 28 | 
            +
                        - cover_image
         | 
| 29 | 
            +
                    })
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  @base_url = @primo_definition["base_url"]
         | 
| 32 | 
            +
                  @vid = @primo_definition["vid"]
         | 
| 33 | 
            +
                  @valid_user_id = "N18158418"
         | 
| 34 | 
            +
                  @invalid_user_id = "INVALID_USER"
         | 
| 35 | 
            +
                  @eshelf_setup = {
         | 
| 36 | 
            +
                      :base_url => @base_url,
         | 
| 37 | 
            +
                      :vid => @vid,
         | 
| 38 | 
            +
                      :resolver_base_url => @primo_definition["resolver_base_url"]
         | 
| 39 | 
            +
                  }
         | 
| 40 | 
            +
                  @valid_institute = "NYU"
         | 
| 41 | 
            +
                  @invalid_institute = "INVALID_INST"
         | 
| 42 | 
            +
                  @valid_doc_ids = ["nyu_aleph000062856"]
         | 
| 43 | 
            +
                  @invalid_doc_ids = ["INVALID_DOC_ID"]
         | 
| 44 | 
            +
                  @valid_basket = "298560007"
         | 
| 45 | 
            +
                  #@valid_folder = "344619707"
         | 
| 46 | 
            +
                  @invalid_basket = "INVALID_BASKET"
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              test "new" do
         | 
| 50 | 
            +
                  eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
         | 
| 51 | 
            +
                  assert_not_nil(eshelf, "#{eshelf.class} returned nil when instantiated.")
         | 
| 52 | 
            +
               
         | 
| 53 | 
            +
                  assert_equal(@base_url, eshelf.instance_variable_get(:@base_url))
         | 
| 54 | 
            +
                  assert_equal(@vid, eshelf.instance_variable_get(:@vid))
         | 
| 55 | 
            +
                  assert_equal(@valid_user_id, eshelf.instance_variable_get(:@user_id))
         | 
| 56 | 
            +
                  assert_equal(@valid_institute, eshelf.instance_variable_get(:@institution))
         | 
| 57 | 
            +
                
         | 
| 58 | 
            +
                  assert_nothing_raised{Exlibris::Primo::EShelf.new({:base_url => @base_url}, @valid_user_id, @valid_institute)}
         | 
| 59 | 
            +
                  assert_nothing_raised{Exlibris::Primo::EShelf.new({:base_url => @base_url, :vid => @vid}, @valid_user_id, @valid_institute)}
         | 
| 60 | 
            +
                  
         | 
| 61 | 
            +
                  assert_raise(ArgumentError){Exlibris::Primo::EShelf.new({}, @valid_user_id, @valid_institute)}
         | 
| 62 | 
            +
                  assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, nil, nil)}
         | 
| 63 | 
            +
                  assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, nil, nil)}
         | 
| 64 | 
            +
                  assert_raise(ArgumentError){Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, nil)}
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              test "valid_eshelf" do
         | 
| 69 | 
            +
                  eshelf = nil
         | 
| 70 | 
            +
                  assert_nothing_raised{eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).eshelf}
         | 
| 71 | 
            +
                  assert_not_nil(eshelf)
         | 
| 72 | 
            +
                  assert_instance_of(Nokogiri::XML::Document, eshelf)
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              test "valid_eshelf_structure" do
         | 
| 76 | 
            +
                  eshelfStructure = nil
         | 
| 77 | 
            +
                  assert_nothing_raised{eshelfStructure = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).eshelfStructure}
         | 
| 78 | 
            +
                  assert_not_nil(eshelfStructure)
         | 
| 79 | 
            +
                  assert(eshelfStructure.is_a? Nokogiri::XML::Document)
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
              
         | 
| 82 | 
            +
              test "basket_id" do
         | 
| 83 | 
            +
                  assert_equal(@valid_basket, Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).basket_id)
         | 
| 84 | 
            +
              end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
              test "invalid_user_eshelf" do
         | 
| 87 | 
            +
                  ws = nil
         | 
| 88 | 
            +
                  assert_nothing_raised(){ws = Exlibris::Primo::EShelf.new(@eshelf_setup, @invalid_user_id, @valid_institute)}
         | 
| 89 | 
            +
                  assert_not_nil(ws)
         | 
| 90 | 
            +
                  eshelf = nil
         | 
| 91 | 
            +
                  assert_nothing_raised(){eshelf = ws.eshelf}
         | 
| 92 | 
            +
                  assert_not_nil(eshelf)
         | 
| 93 | 
            +
                  assert_instance_of(Nokogiri::XML::Document, eshelf)
         | 
| 94 | 
            +
                  assert_equal(0, ws.count)
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
              
         | 
| 97 | 
            +
              test "invalid_institution_eshelf" do
         | 
| 98 | 
            +
                  ws = nil
         | 
| 99 | 
            +
                  assert_nothing_raised(){ws = Exlibris::Primo::EShelf.new(@eshelf_setup, @invalid_user_id, @valid_institute)}
         | 
| 100 | 
            +
                  assert_not_nil(ws)
         | 
| 101 | 
            +
                  eshelf = nil
         | 
| 102 | 
            +
                  assert_nothing_raised(){eshelf = ws.eshelf}
         | 
| 103 | 
            +
                  assert_not_nil(eshelf)
         | 
| 104 | 
            +
                  assert_instance_of(Nokogiri::XML::Document, eshelf)
         | 
| 105 | 
            +
                  assert_equal(0, ws.count)
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
              test "records" do
         | 
| 109 | 
            +
                  records = nil
         | 
| 110 | 
            +
                  assert_nothing_raised(){records = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute).records}
         | 
| 111 | 
            +
                  assert_not_nil(records)
         | 
| 112 | 
            +
                  assert_instance_of(Array, records)
         | 
| 113 | 
            +
                  assert(!records.empty?, "Eshelf records returned empty")
         | 
| 114 | 
            +
              end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              test "cant_add_same_record_twice" do
         | 
| 117 | 
            +
                  eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
         | 
| 118 | 
            +
                  assert_not_nil(eshelf)
         | 
| 119 | 
            +
                  # Add record
         | 
| 120 | 
            +
                  assert_nothing_raised(){ eshelf.add_records(@valid_doc_ids, @valid_basket) }
         | 
| 121 | 
            +
                  # Add same record again
         | 
| 122 | 
            +
                  assert_raise(RuntimeError){ eshelf.add_records(@valid_doc_ids, @valid_basket) }
         | 
| 123 | 
            +
                  # Remove record
         | 
| 124 | 
            +
                  assert_nothing_raised(){ eshelf.remove_records(@valid_doc_ids, @valid_basket) }
         | 
| 125 | 
            +
              end
         | 
| 126 | 
            +
              
         | 
| 127 | 
            +
              test "cant_add_invalid_records" do
         | 
| 128 | 
            +
                  eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
         | 
| 129 | 
            +
                  assert_not_nil(eshelf)
         | 
| 130 | 
            +
                  # Attempt to add record
         | 
| 131 | 
            +
                  assert_raise(RuntimeError){ eshelf.add_records(@invalid_doc_ids, @valid_basket) }
         | 
| 132 | 
            +
                  # Attempt to remove record which was never added
         | 
| 133 | 
            +
                  assert_raise(RuntimeError){ eshelf.remove_records(@invalid_doc_ids, @valid_basket) }
         | 
| 134 | 
            +
              end
         | 
| 135 | 
            +
              
         | 
| 136 | 
            +
              test "cant_add_to_invalid_basket" do
         | 
| 137 | 
            +
                  eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
         | 
| 138 | 
            +
                  assert_not_nil(eshelf)
         | 
| 139 | 
            +
                  # Attempt to add record to basket with invalid folder name
         | 
| 140 | 
            +
                  assert_raise(RuntimeError){ eshelf.add_records(@valid_doc_ids, @invalid_basket) }
         | 
| 141 | 
            +
              end
         | 
| 142 | 
            +
              
         | 
| 143 | 
            +
              test "can_add_to_empty_folder" do
         | 
| 144 | 
            +
                  eshelf = Exlibris::Primo::EShelf.new(@eshelf_setup, @valid_user_id, @valid_institute)
         | 
| 145 | 
            +
                  assert_not_nil(eshelf)
         | 
| 146 | 
            +
                  # Add record to basket with no folder id
         | 
| 147 | 
            +
                  assert_nothing_raised(){ eshelf.add_records(@valid_doc_ids, nil) }
         | 
| 148 | 
            +
                  # Remove record from basket with no folder id
         | 
| 149 | 
            +
                  assert_nothing_raised(){ eshelf.remove_records(@valid_doc_ids, @valid_basket) }
         | 
| 150 | 
            +
              end
         | 
| 151 | 
            +
              
         | 
| 152 | 
            +
            end
         | 
| @@ -0,0 +1,77 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class RecordTest < ActiveSupport::TestCase
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              SEAR_NS = {'sear' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              def setup
         | 
| 8 | 
            +
                @record_definition = YAML.load( %{
         | 
| 9 | 
            +
                    base_url: http://bobcat.library.nyu.edu
         | 
| 10 | 
            +
                    resolver_base_url: https://getit.library.nyu.edu/resolve
         | 
| 11 | 
            +
                    vid: NYU
         | 
| 12 | 
            +
                    institution: NYU
         | 
| 13 | 
            +
                    record_id: nyu_aleph000062856
         | 
| 14 | 
            +
                })
         | 
| 15 | 
            +
                  
         | 
| 16 | 
            +
                @base_url = @record_definition["base_url"]
         | 
| 17 | 
            +
                @resolver_base_url = @record_definition["resolver_base_url"]
         | 
| 18 | 
            +
                @vid = @record_definition["vid"]
         | 
| 19 | 
            +
                @institution = @record_definition["institution"]
         | 
| 20 | 
            +
                @valid_record_id = @record_definition["record_id"]
         | 
| 21 | 
            +
                @invalid_record_id = "INVALID_RECORD"
         | 
| 22 | 
            +
                @setup_args = { 
         | 
| 23 | 
            +
                    :base_url => @base_url, 
         | 
| 24 | 
            +
                    :resolver_base_url => @resolver_base_url, 
         | 
| 25 | 
            +
                    :vid => @vid, 
         | 
| 26 | 
            +
                    :institution => @institution, 
         | 
| 27 | 
            +
                    :record_id => @valid_record_id 
         | 
| 28 | 
            +
                  }
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
              
         | 
| 31 | 
            +
              test "new" do
         | 
| 32 | 
            +
                record = nil
         | 
| 33 | 
            +
                assert_nothing_raised(){ record = Exlibris::Primo::Record.new(@setup_args) }
         | 
| 34 | 
            +
                assert_not_nil(record)
         | 
| 35 | 
            +
                assert_not_nil(record.instance_variable_get(:@record_id))
         | 
| 36 | 
            +
                assert_not_nil(record.instance_variable_get(:@type))
         | 
| 37 | 
            +
                assert_not_nil(record.instance_variable_get(:@title))
         | 
| 38 | 
            +
                assert_not_nil(record.instance_variable_get(:@url))
         | 
| 39 | 
            +
                assert_not_nil(record.instance_variable_get(:@openurl))
         | 
| 40 | 
            +
                assert_not_nil(record.instance_variable_get(:@creator))
         | 
| 41 | 
            +
                assert_not_nil(record.instance_variable_get(:@raw_xml))  
         | 
| 42 | 
            +
                assert_raise(ArgumentError){ Exlibris::Primo::Record.new(@setup_args.merge({:base_url => nil})) }
         | 
| 43 | 
            +
                assert_raise(ArgumentError){ Exlibris::Primo::Record.new(@setup_args.merge({:institution => nil})) }
         | 
| 44 | 
            +
                assert_raise(ArgumentError){ Exlibris::Primo::Record.new(@setup_args.merge({:vid => nil})) }
         | 
| 45 | 
            +
                assert_raise(ArgumentError){ Exlibris::Primo::Record.new(@setup_args.merge({:record_id => nil})) }
         | 
| 46 | 
            +
                assert_raise(RuntimeError){ Exlibris::Primo::Record.new(@setup_args.merge({:record_id => @invalid_record_id})) }
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
              
         | 
| 49 | 
            +
              test "to_hash_function" do
         | 
| 50 | 
            +
                record = Exlibris::Primo::Record.new(@setup_args)
         | 
| 51 | 
            +
                assert((record.to_h.is_a? Hash), "#{record.class} was expected to be a Hash, was #{record.to_h.class}")
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
              
         | 
| 54 | 
            +
              test "sub_class" do
         | 
| 55 | 
            +
                class SubRecord < Exlibris::Primo::Record
         | 
| 56 | 
            +
                  def initialize(parameters={})
         | 
| 57 | 
            +
                    super(parameters)
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
                record = nil
         | 
| 61 | 
            +
                assert_nothing_raised(){ record = SubRecord.new(@setup_args) }    
         | 
| 62 | 
            +
                assert_not_nil(record)
         | 
| 63 | 
            +
                assert_raise(ArgumentError){ record = SubRecord.new() }
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
              
         | 
| 66 | 
            +
              test "raw_xml" do
         | 
| 67 | 
            +
                record = Exlibris::Primo::Record.new(@setup_args)
         | 
| 68 | 
            +
                raw_xml = record.instance_variable_get(:@raw_xml)
         | 
| 69 | 
            +
                assert_not_nil(raw_xml)  
         | 
| 70 | 
            +
                assert_instance_of(String, raw_xml)
         | 
| 71 | 
            +
                doc = nil
         | 
| 72 | 
            +
                assert_nothing_raised(){ doc = Nokogiri::XML.parse(raw_xml) }
         | 
| 73 | 
            +
                assert_not_nil(doc)
         | 
| 74 | 
            +
                assert_not_empty(doc.xpath("//record", doc.namespaces))
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
              
         | 
| 77 | 
            +
            end
         | 
| @@ -3,6 +3,8 @@ require 'test_helper' | |
| 3 3 | 
             
            class WebServiceTest < ActiveSupport::TestCase
         | 
| 4 4 | 
             
              PNX_NS = {'pnx' => 'http://www.exlibrisgroup.com/xsd/primo/primo_nm_bib'}
         | 
| 5 5 | 
             
              SEARCH_NS = {'search' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
         | 
| 6 | 
            +
              SEAR_NS = {'sear' => 'http://www.exlibrisgroup.com/xsd/jaguar/search'}
         | 
| 7 | 
            +
              PRIM_NS = {'prim' => 'http://www.exlibris.com/primo/xsd/primoeshelffolder'}
         | 
| 6 8 |  | 
| 7 9 | 
             
              def setup
         | 
| 8 10 | 
             
                @primo_definition = YAML.load( %{
         | 
| @@ -25,6 +27,9 @@ class WebServiceTest < ActiveSupport::TestCase | |
| 25 27 | 
             
                      - cover_image
         | 
| 26 28 | 
             
                  })
         | 
| 27 29 |  | 
| 30 | 
            +
                @valid_user_id = "N18158418"
         | 
| 31 | 
            +
                @invalid_user_id = "INVALID_USER"
         | 
| 32 | 
            +
                @default_institution = "NYU"
         | 
| 28 33 | 
             
                @base_url = @primo_definition["base_url"]
         | 
| 29 34 | 
             
                @bogus_404_url = "http://library.nyu.edu/bogus"
         | 
| 30 35 | 
             
                @bogus_200_url = "http://library.nyu.edu"
         | 
| @@ -121,4 +126,21 @@ class WebServiceTest < ActiveSupport::TestCase | |
| 121 126 | 
             
                assert_instance_of( Nokogiri::XML::Document, ws.response, "#{ws.class} response is an unexpected object: #{ws.response.class}")
         | 
| 122 127 | 
             
                assert_equal([], ws.error, "#{ws.class} encountered errors: #{ws.error}")
         | 
| 123 128 | 
             
              end 
         | 
| 129 | 
            +
              
         | 
| 130 | 
            +
              test "get_new_eshelf" do
         | 
| 131 | 
            +
                ws = Exlibris::Primo::WebService::GetEShelf.new(@valid_user_id, @default_institution, @base_url)
         | 
| 132 | 
            +
                assert_not_nil(ws, "#{ws.class} returned nil when instantiated.")
         | 
| 133 | 
            +
                assert_instance_of( Nokogiri::XML::Document, ws.response, "#{ws.class} response is an unexpected object: #{ws.response.class}")
         | 
| 134 | 
            +
                assert_equal([], ws.error, "#{ws.class} encountered errors: #{ws.error}")
         | 
| 135 | 
            +
                assert_not_nil(ws.response.at("//sear:DOC", SEAR_NS), "#{ws.class} response returned a nil document")
         | 
| 136 | 
            +
              end
         | 
| 137 | 
            +
              
         | 
| 138 | 
            +
              test "get_new_eshelf_structure" do
         | 
| 139 | 
            +
                ws = Exlibris::Primo::WebService::GetEShelfStructure.new(@valid_user_id, @default_institution, @base_url)
         | 
| 140 | 
            +
                assert_not_nil(ws, "#{ws.class} returned nil when instantiated.")
         | 
| 141 | 
            +
                assert_instance_of( Nokogiri::XML::Document, ws.response, "#{ws.class} response is an unexpected object: #{ws.response.class}")
         | 
| 142 | 
            +
                assert_equal([], ws.error, "#{ws.class} encountered errors: #{ws.error}")
         | 
| 143 | 
            +
                assert_not_nil(ws.response.at("//prim:eshelf_folders", PRIM_NS), "#{ws.class} response returned a nil document")
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             | 
| 124 146 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: exlibris-primo
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.1
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012- | 
| 12 | 
            +
            date: 2012-04-11 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rails
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &2152674040 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ~>
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: 3.2.0
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *2152674040
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: nokogiri
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &2152673580 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ! '>='
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: '0'
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *2152673580
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: soap4r-ruby1.9
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &2152672900 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ! '>='
         | 
| @@ -43,10 +43,10 @@ dependencies: | |
| 43 43 | 
             
                    version: '0'
         | 
| 44 44 | 
             
              type: :runtime
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *2152672900
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: sqlite3
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &2152672320 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - ! '>='
         | 
| @@ -54,7 +54,7 @@ dependencies: | |
| 54 54 | 
             
                    version: '0'
         | 
| 55 55 | 
             
              type: :development
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *2152672320
         | 
| 58 58 | 
             
            description: Library to work with Exlibris' Primo discovery system.
         | 
| 59 59 | 
             
            email:
         | 
| 60 60 | 
             
            - scotdalton@gmail.com
         | 
| @@ -62,7 +62,9 @@ executables: [] | |
| 62 62 | 
             
            extensions: []
         | 
| 63 63 | 
             
            extra_rdoc_files: []
         | 
| 64 64 | 
             
            files:
         | 
| 65 | 
            +
            - lib/exlibris/primo/eshelf.rb
         | 
| 65 66 | 
             
            - lib/exlibris/primo/holding.rb
         | 
| 67 | 
            +
            - lib/exlibris/primo/record.rb
         | 
| 66 68 | 
             
            - lib/exlibris/primo/related_link.rb
         | 
| 67 69 | 
             
            - lib/exlibris/primo/rsrc.rb
         | 
| 68 70 | 
             
            - lib/exlibris/primo/searcher.rb
         | 
| @@ -108,6 +110,8 @@ files: | |
| 108 110 | 
             
            - test/dummy/script/rails
         | 
| 109 111 | 
             
            - test/exlibris-primo_test.rb
         | 
| 110 112 | 
             
            - test/test_helper.rb
         | 
| 113 | 
            +
            - test/unit/eshelf_test.rb
         | 
| 114 | 
            +
            - test/unit/record_test.rb
         | 
| 111 115 | 
             
            - test/unit/searcher_benchmarks.rb
         | 
| 112 116 | 
             
            - test/unit/searcher_test.rb
         | 
| 113 117 | 
             
            - test/unit/web_service_benchmarks.rb
         | 
| @@ -170,6 +174,8 @@ test_files: | |
| 170 174 | 
             
            - test/dummy/script/rails
         | 
| 171 175 | 
             
            - test/exlibris-primo_test.rb
         | 
| 172 176 | 
             
            - test/test_helper.rb
         | 
| 177 | 
            +
            - test/unit/eshelf_test.rb
         | 
| 178 | 
            +
            - test/unit/record_test.rb
         | 
| 173 179 | 
             
            - test/unit/searcher_benchmarks.rb
         | 
| 174 180 | 
             
            - test/unit/searcher_test.rb
         | 
| 175 181 | 
             
            - test/unit/web_service_benchmarks.rb
         |