class Celsius::Primo::SoapApi::Searcher::SearchBrief::SearchRequestTransformation::ProcessIdsQueries

Public Instance Methods

call() click to toggle source
# File lib/celsius/primo/soap_api/searcher/search_brief/search_request_transformation/process_ids_queries.rb, line 7
  def call
    if ids_queries = Celsius::Hash.deep_find_key(source, :ids)
      # memoize the QueryTerms node
      query_terms_node = transformation.inner_search_request.locate("PrimoSearchRequest/QueryTerms").first

      # for an ids search, "OR" is the appropriate operator
      query_terms_node.locate("BoolOpeator").first << "OR"

      # for each id, add a seperate QueryTerm
      ids_queries.first.each do |id|
        query_terms_node << Ox.parse(
          <<-xml
            <QueryTerm>
              <IndexField>rid</IndexField>
              <PrecisionOperator>exact</PrecisionOperator>
              <Value>#{id}</Value>
            </QueryTerm>
          xml
        )
      end
    end
  end