class Fahrenheit::AlephUbpb::Adapter::Record::GetItems::RestfulApiResultTransformation

Public Instance Methods

apply(*args) click to toggle source
# File lib/fahrenheit/aleph_ubpb/adapter/record/get_items/restful_api_result_transformation.rb, line 4
def apply(*args)
  self.transformation.apply(*args)
end
transformation() click to toggle source
# File lib/fahrenheit/aleph_ubpb/adapter/record/get_items/restful_api_result_transformation.rb, line 8
def transformation
  @transformation ||= Transformator::Transformation.new do
    output_format :hash

    process "hits/hits" do |hits_array_element, target|
      # ubpb specific loan_status
      unless find(hits_array_element, "loan_status")
        find(hits_array_element, "_source/status") do |node|
          loan_status =
          case node.text.gsub(/requested/i, "")                     # Remove requested states
          when /bestellt/i          then "ordered"                 # Exemplar wurde bestellt
          when /storniert/i         then "canceled"                # Exemplar wurde storniert
          when /in bearbeitung/i    then "in_process"             # Exemplar ist in Bearbeitung
          when /vermisst/i          then "missing"                # Exemplar wird vermisst
          end

          hits_array_element << element("loan_status", text: loan_status) if loan_status
        end
      end

      unless find(hits_array_element, "availability")
        find(hits_array_element, "_source/z30-item-status-code") do |node|
          item_status_code = node.text
          loan_status = find(hits_array_element, "loan_status") { |_node| _node.text }

          availability =
          # things such as "expected" can only be not_available, no matter what
          if %w(expected).include?(loan_status)
            "not_available"
          # these are always restricted available, no matter what their loan status is
          elsif [
            "23", # Tischapparat
            "32", # Nicht ausleihbar
            "33", # Seminarapparat
            "37", # Nicht ausleihbar
            "38", # Nicht ausleihbar
            "41", # Nicht ausleihbar
            "42", # Nicht ausleihbar
            "43", # Handapparat
            "44", # Nicht ausleihbar
            "48", # Nicht ausleihbar
            "49", # Nicht ausleihbar
            "50", # Nicht ausleihbar
            "55", # Nicht ausleihbar
            "58", # Nicht ausleihbar
            "60", # Nicht ausleihbar
            "68"  # Magazin-Präsenzausleihe
          ].include?(item_status_code)
            "restricted_available"
          # from here, the loan status comes into play
          elsif %w(on_shelf).include?(loan_status)
            if [
              "20", # "Normalausleihe"
              "21", # "Magazinausleihe
              "24", # "Normalausleihe
              "25", # "Normalausleihe
              "26", # "Normalausleihe
              "27", # "Magazinausleihe
              "53", # "4-Wochen-Ausleihe
              "63", # "6-Monats-Ausleihe
              "73", # "FL Abholung, Keine Verl.
              "74"  # "FL Lesesaal, Keine Verl.
            ].include?(item_status_code)
              "available"
            elsif [
              "30", # Kurzausleihe
              "31", # Magazin-Kurzausleihe
              "34", # Kurzausleihe
              "35", # Kurzausleihe
              "36", # Kurzausleihe
              "40", # Kurzausleihe
              "47", # Magazin-Kurzausleihe
              "53", # 4-Wochen-Ausleihe
              "61"  # Magazin-5-Tage-Ausleihe
            ].include?(item_status_code)
              "restricted_available"
            else
              raise "Unknown item status code!"
            end
          else
            "not_available"
          end

          hits_array_element << element("availability", text: availability) if availability
        end 
      end
    end
  end
end