class BlacklightInternetArchive::SitesEntityProcessor
extract and convert individual results from response
Public Class Methods
new()
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 13 def initialize @metadata_fields = %w[meta_Creator meta_Coverage meta_Subject meta_Language meta_Collector meta_Title] @linkable_fields = { 'meta_Title' => 'allURL', 'url' => 'allURL', 'numCaptures' => 'allURL', 'numVideos' => 'seedVideosUrl' } end
Public Instance Methods
compose_url(url_arrays)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 106 def compose_url(url_arrays) new_url = '' url_arrays[0].each do |param_string| new_url = if new_url == '' "#{param_string}&" else "#{new_url}&#{param_string}&" end end url_arrays[1].each do |fps| new_url = "#{new_url}#{fps}&" end "?#{new_url.chomp('&')}" end
convert_ia_facet_url(ia_facet_url)
click to toggle source
translate ia facet url into blacklight facet syntax
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 87 def convert_ia_facet_url(ia_facet_url) ifu_hash = CGI.parse(ia_facet_url.tr('?', '')) url_arrays = prepare_url_params(ifu_hash, [], []) compose_url(url_arrays) end
convert_ia_facet_url_param(value)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 121 def convert_ia_facet_url_param(value) ifu_arr = value.split(':') "f[#{ifu_arr[0]}][]=#{ifu_arr[1]}" end
facet_link_metadata(entval, ent_clone, facet_info)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 50 def facet_link_metadata(entval, ent_clone, facet_info) @metadata_fields.each do |k| if entval[k] ent_clone[k] = entval[k].map(&:html_safe) ent_clone["linked_#{k}"] = link_faceted_results_data(k, entval[k], facet_info) end end ent_clone end
link_faceted_results_data(meta_field, meta_val, searched_facets)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 71 def link_faceted_results_data(meta_field, meta_val, searched_facets) link_facets = [] meta_val.each do |mv| searched_facets.each do |sf| next unless sf['id'] == meta_field sf['results'].each do |ra| if ra['name'] == mv link_facets << make_link(ra['name'], convert_ia_facet_url(ra['addFacetURL'])) end end end end link_facets.map(&:html_safe) end
make_link(value, url)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 126 def make_link(value, url) "<a href=\"#{url}\">#{value}</a>".html_safe end
prepare_url_params(facet_hash, facet_url_arr, new_url_arr)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 93 def prepare_url_params(facet_hash, facet_url_arr, new_url_arr) facet_hash.each do |k, v| if k == 'fc' v.each do |v_fc| facet_url_arr << convert_ia_facet_url_param(v_fc) end else new_url_arr << "#{k}=#{v[0]}" end end [new_url_arr, facet_url_arr] end
reformat_entity(entity, searched_facets, base_url)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 34 def reformat_entity(entity, searched_facets, base_url) entity_clone = entity.clone entity.each do |entity_key, entity_val| if entity_key == 'metadata' entity_clone = facet_link_metadata(entity_val, entity_clone, searched_facets) end entity_clone = set_linked_fields(entity_clone, base_url) end # these fields are not under the metadata node and not handled by process_entities entity_clone['linked_websiteGroup'] = link_faceted_results_data('websiteGroup', [entity['websiteGroup']], searched_facets) val_url = entity_clone['allURL'] val_url = "#{base_url}#{val_url}" if val_url.start_with?('?') entity_clone['linked_Captures'] = linked_val = make_link('View Site Captures on Wayback.org', val_url) entity_clone end
run(response_json, base_url)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 20 def run(response_json, base_url) raise ArgumentError 'No entities in response.' unless response_json['results']['entities'] raise ArgumentError 'Base url required.' unless base_url entities = response_json['results']['entities'] entities_clone = entities.clone entities.each do |entity| next unless entity['isSeed'] entities_clone[entities.index(entity)] = reformat_entity(entity, response_json['results']['searchedFacets'], base_url) end entities_clone end
set_linked_fields(e_clone, base_url)
click to toggle source
# File lib/blacklight_internet_archive/sites_entity_processor.rb, line 60 def set_linked_fields(e_clone, base_url) @linkable_fields.each do |l, l_url| val = e_clone[l] val_url = e_clone[l_url] val_url = "#{base_url}#{val_url}" if val_url.start_with?('?') linked_val = make_link(val, val_url) e_clone["linked_#{l}"] = linked_val end e_clone end