class Celsius::PrimoUbpb::Adapter::Search::SearchResultTransformation::ProcessRecords

Public Instance Methods

call() click to toggle source
# File lib/celsius/primo_ubpb/adapter/search/search_result_transformation/process_records.rb, line 7
def call
  target["hits"]["hits"].each do |record|
    add_hbz_id_to_identifier!(record)
    add_relation!(record)
    add_signature!(record)
    add_is_part_of!(record)
    remove_toc!(record) # it just bloats the search result
    replace_title_with_short_title!(record)
  end
end

Private Instance Methods

add_hbz_id_to_identifier!(record) click to toggle source
# File lib/celsius/primo_ubpb/adapter/search/search_result_transformation/process_records.rb, line 21
def add_hbz_id_to_identifier!(record)
  if hbz_id = (record["_source"]["search"] || {})["lsr05"]
    Celsius::Hash.smart_store(record, "identifier", hbz_id => "hbzId")
  end
end
add_is_part_of!(record) click to toggle source
# File lib/celsius/primo_ubpb/adapter/search/search_result_transformation/process_records.rb, line 49
def add_is_part_of!(record)
  if json_encoded_superorders = (record["_source"]["display"] || {})["lds01"]
    ensure_array(json_encoded_superorders).each do |json_encoded_superorder|
      parsed_superorder = JSON.parse(json_encoded_superorder)

      Celsius::Hash.smart_store(record, "isPartOf", {}.tap do |superorder|
        superorder["title"] = parsed_superorder["label"]
        
        if ht_number = parsed_superorder["ht_number"]
          superorder["identifier"] = { ht_number => "hbzId" }
        end

        if volume = parsed_superorder["volume_count"]
          superorder["volume"] = volume
        end

        if label_additions = parsed_superorder["label_additions"]
          superorder["title"] << ensure_array(label_additions).first
        end
      end)
    end
  end
end
add_relation!(record) click to toggle source
# File lib/celsius/primo_ubpb/adapter/search/search_result_transformation/process_records.rb, line 27
def add_relation!(record)
  if json_encoded_relations = (record["_source"]["display"] || {})["relation"]
    ensure_array(json_encoded_relations).each do |json_encoded_relation|
      parsed_relation = JSON.parse(json_encoded_relation)

      Celsius::Hash.smart_store(record, "relation", {}.tap do |relation|
        relation["title"] = parsed_relation["label"]

        if ht_number = parsed_relation["ht_number"]
          relation["identifier"] = { ht_number => "hbzId" }
        end
      end)
    end
  end
end
add_signature!(record) click to toggle source
# File lib/celsius/primo_ubpb/adapter/search/search_result_transformation/process_records.rb, line 43
def add_signature!(record)
  if signature = (record["_source"]["display"] || {})["lds10"]
    Celsius::Hash.smart_store(record, "signature", signature)
  end
end
ensure_array(object) click to toggle source
# File lib/celsius/primo_ubpb/adapter/search/search_result_transformation/process_records.rb, line 73
def ensure_array(object)
  object.is_a?(Array) ? object : [object]
end
remove_toc!(record) click to toggle source
# File lib/celsius/primo_ubpb/adapter/search/search_result_transformation/process_records.rb, line 77
def remove_toc!(record)
  (record["_source"]["search"] || {}).delete("toc")
end
replace_title_with_short_title!(record) click to toggle source
# File lib/celsius/primo_ubpb/adapter/search/search_result_transformation/process_records.rb, line 81
def replace_title_with_short_title!(record)
  if short_title = (record["_source"]["display"] || {})["lds02"]
    record["title"] = short_title
  end
end