class Skala::AlephAdapter::GetUserHoldRequests

Public Instance Methods

call(username, options = {}) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 9
def call(username, options = {})
  resolved_user_id = resolve_user(username.upcase)

  raw_aleph_response = adapter.restful_api.patron(resolved_user_id).circulationActions.requests.holds.get(view: :full)

  if raw_aleph_response.include?("<error>")
    return nil
  else
    self.class::Result.new(
      hold_requests: Nokogiri::XML(raw_aleph_response).xpath("//hold-request").map do |_hold_request|
        {
          id: id(_hold_request),
          deleteable: deleteable?(_hold_request),
          place_in_queue: place_in_queue(_hold_request),
          creation_date: creation_date(_hold_request),
          begin_request_date: begin_request_date(_hold_request),
          end_request_date: end_request_date(_hold_request),
          begin_hold_date: begin_hold_date(_hold_request),
          end_hold_date: end_hold_date(_hold_request),
          record: {
            id: record_id(_hold_request)
          },
          status: status(_hold_request)
        }
      end,
      source: raw_aleph_response
    )
  end
end

Private Instance Methods

begin_hold_date(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 79
def begin_hold_date(hold_request)
  if date = hold_request.at_xpath(".//z37-hold-date").try(:content).presence
    Date.strptime(date, "%Y%m%d")
  end
rescue
  nil
end
begin_request_date(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 63
def begin_request_date(hold_request)
  if date = hold_request.at_xpath(".//z37-request-date").try(:content).presence
    Date.strptime(date, "%Y%m%d")
  end
rescue
  nil
end
creation_date(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 45
def creation_date(hold_request)
  if date = hold_request.at_xpath("./z37/z37-open-date").try(:content)
    Date.strptime(date, "%Y%m%d")
  end
end
deleteable?(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 51
def deleteable?(hold_request)
  hold_request.attr("delete") == "Y" && !hold_request.at_xpath(".//status").content.presence.try(:include?, "On hold until")
end
end_hold_date(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 87
def end_hold_date(hold_request)
  if date = hold_request.at_xpath(".//z37-end-hold-date").try(:content).presence
    Date.strptime(date, "%Y%m%d")
  end
rescue
  nil
end
end_request_date(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 71
def end_request_date(hold_request)
  if date = hold_request.at_xpath(".//z37-end-request-date").try(:content).presence
    Date.strptime(date, "%Y%m%d")
  end
rescue
  nil
end
id(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 41
def id(hold_request)
  hold_request.attr("href")[/[^\/]+\Z/][/\A[^?]+/]
end
place_in_queue(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 55
def place_in_queue(hold_request)
  hold_request.at_xpath(".//status").try(:content).presence.try(:[], /Waiting in position \d+/).try(:[], /\d+/).try(:to_i)
end
record_id(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 59
def record_id(hold_request)
  hold_request.at_xpath(".//z13-doc-number").try(:content)
end
status(hold_request) click to toggle source
# File lib/skala/aleph_adapter/get_user_hold_requests.rb, line 95
def status(hold_request)
  case hold_request.at_xpath(".//z37-status").try(:content).presence.try(:upcase)
    when "WAITING IN QUEUE" then :requested
    when "S"                then :on_hold
    when "IN PROCESS"       then :in_process
  end
end