arclight 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.all-contributorsrc +450 -0
- data/.babelrc +3 -0
- data/.codeclimate.yml +5 -0
- data/.eslintrc +3 -0
- data/.rubocop.yml +19 -0
- data/.rubocop_todo.yml +15 -135
- data/.travis.yml +2 -2
- data/CONTRIBUTORS.md +79 -0
- data/README.md +21 -24
- data/Rakefile +0 -1
- data/app/assets/images/blacklight/bookmark.svg +1 -0
- data/app/assets/images/blacklight/collection.svg +5 -0
- data/app/assets/images/blacklight/compact.svg +1 -25
- data/app/assets/images/blacklight/container.svg +5 -0
- data/app/assets/images/blacklight/ead.svg +1 -0
- data/app/assets/images/blacklight/file.svg +5 -0
- data/app/assets/images/blacklight/folder.svg +1 -0
- data/app/assets/images/blacklight/list.svg +1 -0
- data/app/assets/images/blacklight/minus.svg +1 -0
- data/app/assets/images/blacklight/online.svg +5 -0
- data/app/assets/images/blacklight/pdf.svg +1 -0
- data/app/assets/images/blacklight/plus.svg +1 -0
- data/app/assets/images/blacklight/repository.svg +1 -0
- data/app/assets/javascripts/arclight/arclight.js +1 -3
- data/app/assets/javascripts/arclight/collection_navigation.js +36 -53
- data/app/assets/javascripts/arclight/collection_scrollspy.js +1 -1
- data/app/assets/javascripts/arclight/context_navigation.js +374 -0
- data/app/assets/javascripts/arclight/truncator.js.erb +8 -2
- data/app/assets/stylesheets/arclight/application.scss +3 -1
- data/app/assets/stylesheets/arclight/bootstrap_overrides.scss +23 -0
- data/app/assets/stylesheets/arclight/modules/context_navigation.scss +75 -0
- data/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss +28 -35
- data/app/assets/stylesheets/arclight/modules/highlights.scss +2 -1
- data/app/assets/stylesheets/arclight/modules/layout.scss +128 -14
- data/app/assets/stylesheets/arclight/modules/mastheads.scss +27 -5
- data/app/assets/stylesheets/arclight/modules/repositories.scss +1 -5
- data/app/assets/stylesheets/arclight/modules/repository_card.scss +6 -7
- data/app/assets/stylesheets/arclight/modules/search_results.scss +145 -24
- data/app/assets/stylesheets/arclight/modules/show_collection.scss +38 -59
- data/app/assets/stylesheets/arclight/responsive.scss +13 -0
- data/app/assets/stylesheets/arclight/variables.scss +21 -1
- data/app/controllers/concerns/arclight/ead_format_helpers.rb +225 -0
- data/app/controllers/concerns/arclight/field_config_helpers.rb +23 -7
- data/app/factories/blacklight_field_configuration_factory.rb +1 -0
- data/app/helpers/arclight_helper.rb +197 -35
- data/app/models/arclight/document_downloads.rb +125 -0
- data/app/models/arclight/parent.rb +4 -2
- data/app/models/arclight/parents.rb +6 -4
- data/app/models/arclight/requests/aeon_external_request.rb +42 -0
- data/app/models/arclight/requests/aeon_web_ead.rb +47 -0
- data/app/models/arclight/requests/google_form.rb +2 -2
- data/app/models/concerns/arclight/catalog.rb +14 -2
- data/app/models/concerns/arclight/search_behavior.rb +27 -12
- data/app/models/concerns/arclight/solr_document.rb +29 -7
- data/app/views/arclight/_requests.html.erb +7 -0
- data/app/views/arclight/repositories/_in_person_repository.html.erb +1 -1
- data/app/views/arclight/repositories/_repository.html.erb +2 -2
- data/app/views/arclight/repositories/_repository_contact.html.erb +9 -0
- data/app/views/arclight/repositories/index.html.erb +3 -0
- data/app/views/arclight/repositories/show.html.erb +5 -4
- data/app/views/arclight/requests/_aeon_external_request_endpoint.html.erb +9 -0
- data/app/views/arclight/requests/_aeon_web_ead.html.erb +7 -0
- data/app/views/arclight/requests/_google_form.html.erb +2 -1
- data/app/views/arclight/viewers/_oembed.html.erb +2 -1
- data/app/views/catalog/_access_contents.html.erb +15 -0
- data/app/views/catalog/_arclight_abstract_or_scope.html.erb +5 -0
- data/app/views/catalog/_arclight_bookmark_control.html.erb +38 -0
- data/app/views/catalog/_arclight_document_header_icon.html.erb +1 -0
- data/app/views/catalog/_arclight_index_compact_default.html.erb +18 -11
- data/app/views/catalog/_arclight_index_default.html.erb +45 -0
- data/app/views/catalog/_arclight_index_group_document_compact_default.html.erb +19 -0
- data/app/views/catalog/_arclight_index_group_document_default.html.erb +18 -0
- data/app/views/catalog/_arclight_online_content_indicator.html.erb +1 -3
- data/app/views/catalog/_collection_contents.html.erb +2 -10
- data/app/views/catalog/_collection_context.html.erb +15 -0
- data/app/views/catalog/_collection_context_nav.html.erb +12 -0
- data/app/views/catalog/_collection_online_contents.html.erb +3 -3
- data/app/views/catalog/_component_context.html.erb +5 -0
- data/app/views/catalog/_containers.html.erb +3 -0
- data/app/views/catalog/_context_sidebar.html.erb +2 -2
- data/app/views/catalog/_document_downloads.html.erb +14 -0
- data/app/views/catalog/_group.html.erb +21 -0
- data/app/views/catalog/_group_header_compact_default.html.erb +15 -0
- data/app/views/catalog/_group_header_default.html.erb +20 -0
- data/app/views/catalog/_group_toggle.html.erb +10 -0
- data/app/views/catalog/_home.html.erb +1 -1
- data/app/views/catalog/_index_breadcrumb_default.html.erb +5 -2
- data/app/views/catalog/_index_collection_context_default.html.erb +53 -0
- data/app/views/catalog/_index_header.html.erb +3 -3
- data/app/views/catalog/_index_online_contents_default.html.erb +1 -1
- data/app/views/catalog/_online_content_label.html.erb +5 -0
- data/app/views/catalog/_search_form.html.erb +34 -0
- data/app/views/catalog/_search_results.html.erb +1 -4
- data/app/views/catalog/_show_actions_box_default.html.erb +27 -0
- data/app/views/catalog/_show_breadcrumbs_default.html.erb +5 -20
- data/app/views/catalog/_show_collection.html.erb +42 -24
- data/app/views/catalog/_show_default.html.erb +63 -35
- data/app/views/catalog/_show_upper_metadata_default.html.erb +1 -1
- data/app/views/catalog/_sort_and_per_page.html.erb +8 -0
- data/app/views/catalog/_within_collection_dropdown.html.erb +26 -0
- data/app/views/shared/_breadcrumbs.html.erb +4 -4
- data/app/views/shared/_context_sidebar.html.erb +2 -2
- data/app/views/shared/_header_navbar.html.erb +13 -17
- data/app/views/shared/_show_breadcrumbs.html.erb +27 -0
- data/arclight.gemspec +5 -6
- data/config/i18n-tasks.yml +2 -1
- data/config/locales/arclight.en.yml +54 -21
- data/config/repositories.yml +0 -0
- data/lib/arclight/engine.rb +22 -12
- data/lib/arclight/hash_absolute_xpath.rb +11 -7
- data/lib/arclight/level_label.rb +46 -0
- data/lib/arclight/normalized_date.rb +2 -2
- data/lib/arclight/normalized_id.rb +1 -0
- data/lib/arclight/normalized_title.rb +1 -0
- data/lib/arclight/repository.rb +58 -5
- data/lib/arclight/traject/ead2_config.rb +178 -159
- data/lib/arclight/traject/nokogiri_namespaceless_reader.rb +22 -0
- data/lib/arclight/version.rb +1 -1
- data/lib/arclight/viewers/oembed.rb +1 -0
- data/lib/arclight/year_range.rb +9 -1
- data/lib/generators/arclight/install_generator.rb +5 -1
- data/lib/generators/arclight/templates/catalog_controller.rb +128 -100
- data/lib/generators/arclight/templates/config/downloads.yml +12 -0
- data/lib/generators/arclight/templates/config/repositories.yml +20 -2
- data/lib/generators/arclight/update_generator.rb +1 -1
- data/lib/tasks/index.rake +18 -20
- data/package.json +8 -1
- data/solr/conf/schema.xml +51 -292
- data/solr/conf/solrconfig.xml +40 -125
- data/tasks/arclight.rake +1 -0
- data/vendor/assets/javascripts/responsiveTruncator.js +2 -2
- metadata +71 -44
- data/app/assets/javascripts/arclight/collection_context.js +0 -18
- data/app/assets/javascripts/arclight/component_ancestors.js +0 -56
- data/app/assets/javascripts/arclight/search_results.js +0 -15
- data/app/assets/stylesheets/arclight/modules/sidebar.scss +0 -21
- data/app/views/catalog/_collection_count.html.erb +0 -7
- data/app/views/catalog/_collection_downloads.html.erb +0 -15
- data/app/views/catalog/_collection_overview.html.erb +0 -7
- data/app/views/catalog/_component_contents.html.erb +0 -16
- data/app/views/catalog/_component_overview.html.erb +0 -40
- data/app/views/catalog/_index_header_hierarchy_default.html.erb +0 -42
- data/app/views/catalog/_index_hierarchy_default.html.erb +0 -28
- data/app/views/catalog/_results_histogram.html.erb +0 -15
- data/app/views/catalog/_show_component_sidebar.html.erb +0 -12
- data/app/views/catalog/_show_sidebar.html.erb +0 -22
- data/lib/arclight/custom_component.rb +0 -99
- data/lib/arclight/custom_document.rb +0 -93
- data/lib/arclight/indexer.rb +0 -9
- data/lib/arclight/shared_indexing_behavior.rb +0 -97
- data/lib/arclight/shared_terminology_behavior.rb +0 -65
- data/lib/arclight/solr_ead_indexer_ext.rb +0 -155
data/lib/arclight/indexer.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Arclight
|
4
|
-
##
|
5
|
-
# A mixin intended to share indexing behavior between
|
6
|
-
# the CustomDocument and CustomComponent classes
|
7
|
-
module SharedIndexingBehavior
|
8
|
-
# @see http://eadiva.com/2/unitdate/
|
9
|
-
# @return [YearRange] all of the years between the given years
|
10
|
-
def unitdate_for_range
|
11
|
-
range = YearRange.new
|
12
|
-
return range if normal_unit_dates.blank?
|
13
|
-
range << range.parse_ranges(normal_unit_dates)
|
14
|
-
range
|
15
|
-
end
|
16
|
-
|
17
|
-
def subjects_array(elements, parent:)
|
18
|
-
xpath_elements = elements.map { |el| "local-name()='#{el}'" }.join(' or ')
|
19
|
-
subjects = search("//#{parent}/controlaccess/*[#{xpath_elements}]").to_a
|
20
|
-
clean_facets_array(subjects.flatten.map(&:text))
|
21
|
-
end
|
22
|
-
|
23
|
-
def names_array(elements, parent:)
|
24
|
-
xpath_elements = elements.map { |el| "local-name()='#{el}'" }.join(' or ')
|
25
|
-
names = search("//#{parent}/controlaccess/*[#{xpath_elements}]").to_a
|
26
|
-
clean_facets_array(names.flatten.map(&:text))
|
27
|
-
end
|
28
|
-
|
29
|
-
# Return a cleaned array of facets without marc subfields
|
30
|
-
#
|
31
|
-
# E.g. clean_facets_array(
|
32
|
-
# ['FacetValue1 |z FacetValue2','FacetValue3']
|
33
|
-
# ) => ['FacetValue1 -- FacetValue2', 'FacetValue3']
|
34
|
-
def clean_facets_array(facets_array)
|
35
|
-
Array(facets_array).map { |text| fix_subfield_demarcators(text) }.compact.uniq
|
36
|
-
end
|
37
|
-
|
38
|
-
# Replace MARC style subfield demarcators
|
39
|
-
#
|
40
|
-
# Usage: fix_subfield_demarcators("Subject 1 |z Sub-Subject 2") => "Subject 1 -- Sub-Subject 2"
|
41
|
-
def fix_subfield_demarcators(value)
|
42
|
-
value.gsub(/\|\w{1}/, '--')
|
43
|
-
end
|
44
|
-
|
45
|
-
# Wrap OM's find_by_xpath for convenience
|
46
|
-
def search(path)
|
47
|
-
find_by_xpath(path) # rubocop:disable DynamicFindBy
|
48
|
-
end
|
49
|
-
|
50
|
-
# If a repository slug is provided via an environment variable `REPOSITORY_ID`,
|
51
|
-
# then use that to lookup the name rather than the parsed out name from the EAD
|
52
|
-
# @param [String] `repository` the default repository name
|
53
|
-
def repository_as_configured(repository)
|
54
|
-
slug = ENV['REPOSITORY_ID']
|
55
|
-
if slug.present?
|
56
|
-
begin
|
57
|
-
Arclight::Repository.find_by(slug: slug).name
|
58
|
-
rescue => e
|
59
|
-
raise "The repository slug '#{slug}' was given but it is not found in the Repository configuration data: #{e}"
|
60
|
-
end
|
61
|
-
else
|
62
|
-
repository
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def add_digital_content(prefix:, solr_doc:)
|
67
|
-
dao = ng_xml.xpath("#{prefix}/dao").to_a
|
68
|
-
return if dao.blank?
|
69
|
-
field_name = Solrizer.solr_name('digital_objects', :displayable)
|
70
|
-
solr_doc[field_name] = digital_objects(dao)
|
71
|
-
end
|
72
|
-
|
73
|
-
def digital_objects(objects)
|
74
|
-
objects.map do |dao|
|
75
|
-
label = dao.attributes['title'].try(:value) || dao.xpath('daodesc/p').try(:text)
|
76
|
-
href = (dao.attributes['href'] || dao.attributes['xlink:href']).try(:value)
|
77
|
-
Arclight::DigitalObject.new(label: label, href: href).to_json
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def add_date_ranges(solr_doc)
|
82
|
-
Solrizer.insert_field(solr_doc, 'date_range', unitdate_for_range.years, :facetable)
|
83
|
-
end
|
84
|
-
|
85
|
-
def add_normalized_title(solr_doc)
|
86
|
-
dates = Arclight::NormalizedDate.new(unitdate_inclusive, unitdate_bulk, unitdate_other).to_s
|
87
|
-
title = Arclight::NormalizedTitle.new(solr_doc['title_ssm'].try(:first), dates).to_s
|
88
|
-
solr_doc['normalized_title_ssm'] = [title]
|
89
|
-
solr_doc['normalized_date_ssm'] = [dates]
|
90
|
-
title
|
91
|
-
end
|
92
|
-
|
93
|
-
def online_content?
|
94
|
-
search('//dao[@href]').present?
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Arclight
|
4
|
-
##
|
5
|
-
# An extendable mixin intended to share terminology behavior between
|
6
|
-
# the CustomDocument and CustomComponent classes
|
7
|
-
module SharedTerminologyBehavior
|
8
|
-
def add_unitid(t, prefix)
|
9
|
-
t.unitid(path: prefix + 'did/unitid', index_as: %i[displayable searchable])
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_extent(t, prefix)
|
13
|
-
t.extent(path: prefix + 'did/physdesc/extent', index_as: %i[displayable searchable])
|
14
|
-
end
|
15
|
-
|
16
|
-
# date indexing
|
17
|
-
def add_dates(t, prefix)
|
18
|
-
t.normal_unit_dates(path: prefix + 'did/unitdate/@normal')
|
19
|
-
t.unitdate_bulk(path: prefix + 'did/unitdate[@type=\'bulk\']', index_as: %i[displayable])
|
20
|
-
t.unitdate_inclusive(path: prefix + 'did/unitdate[@type=\'inclusive\']', index_as: %i[displayable])
|
21
|
-
t.unitdate_other(path: prefix + 'did/unitdate[not(@type)]', index_as: %i[displayable])
|
22
|
-
t.unitdate(path: prefix + 'did/unitdate', index_as: %i[displayable])
|
23
|
-
end
|
24
|
-
|
25
|
-
def add_searchable_notes(t, prefix) # rubocop: disable Metrics/MethodLength
|
26
|
-
# various searchable notes
|
27
|
-
%i[
|
28
|
-
accessrestrict
|
29
|
-
accruals
|
30
|
-
acqinfo
|
31
|
-
altformavail
|
32
|
-
appraisal
|
33
|
-
arrangement
|
34
|
-
bibliography
|
35
|
-
bioghist
|
36
|
-
custodhist
|
37
|
-
fileplan
|
38
|
-
note
|
39
|
-
odd
|
40
|
-
originalsloc
|
41
|
-
otherfindaid
|
42
|
-
phystech
|
43
|
-
prefercite
|
44
|
-
processinfo
|
45
|
-
relatedmaterial
|
46
|
-
scopecontent
|
47
|
-
separatedmaterial
|
48
|
-
userestrict
|
49
|
-
].each do |k|
|
50
|
-
# many of the notes support various markup so we want everything but the heading
|
51
|
-
t.send(k, path: "#{prefix}#{k}/*[local-name()!=\"head\"]", index_as: %i[displayable searchable])
|
52
|
-
end
|
53
|
-
|
54
|
-
# various searchable notes in the did
|
55
|
-
%i[
|
56
|
-
abstract
|
57
|
-
materialspec
|
58
|
-
physloc
|
59
|
-
].each do |k|
|
60
|
-
t.send(k, path: "#{prefix}did/#{k}", index_as: %i[displayable searchable])
|
61
|
-
end
|
62
|
-
t.did_note(path: "#{prefix}did/note", index_as: %i[displayable searchable]) # conflicts with top-level note
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,155 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Arclight
|
4
|
-
##
|
5
|
-
# An module to extend SolrEad::Indexer behaviors to allow us to add
|
6
|
-
# or override behaviors that require knowledge of the entire XML document.
|
7
|
-
module SolrEadIndexerExt
|
8
|
-
def additional_component_fields(node, addl_fields = {})
|
9
|
-
solr_doc = super
|
10
|
-
|
11
|
-
add_count_of_child_compontents(node, solr_doc)
|
12
|
-
add_ancestral_titles(node, solr_doc)
|
13
|
-
add_ancestral_ids(node, solr_doc)
|
14
|
-
|
15
|
-
add_collection_creator_to_component(node, solr_doc)
|
16
|
-
|
17
|
-
add_self_or_parents_restrictions(node, solr_doc)
|
18
|
-
|
19
|
-
add_self_or_parents_terms(node, solr_doc)
|
20
|
-
|
21
|
-
solr_doc
|
22
|
-
end
|
23
|
-
|
24
|
-
def delete_all
|
25
|
-
solr.delete_by_query('*:*')
|
26
|
-
solr.commit
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
# Note that we need to redo what solr_ead does for ids due to our normalization process
|
32
|
-
def add_ancestral_ids(node, solr_doc)
|
33
|
-
@parent_id_name ||= Solrizer.solr_name('parent', :stored_sortable)
|
34
|
-
@parent_ids_field_name ||= Solrizer.solr_name('parent', :displayable)
|
35
|
-
@parent_ids_search_field_name ||= Solrizer.solr_name('parent', :searchable)
|
36
|
-
|
37
|
-
ids = ancestral_ids(node)
|
38
|
-
solr_doc[@parent_ids_field_name] = ids
|
39
|
-
solr_doc[@parent_ids_search_field_name] = ids
|
40
|
-
solr_doc[@parent_id_name] = ids.last
|
41
|
-
end
|
42
|
-
|
43
|
-
# Note that we need to redo what solr_ead does for titles due to our normalization process
|
44
|
-
def add_ancestral_titles(node, solr_doc)
|
45
|
-
@parent_titles_field_name ||= Solrizer.solr_name('parent_unittitles', :displayable)
|
46
|
-
@parent_titles_search_field_name ||= Solrizer.solr_name('parent_unittitles', :searchable)
|
47
|
-
@collection_facet_name ||= Solrizer.solr_name('collection', :facetable)
|
48
|
-
@collection_name ||= Solrizer.solr_name('collection', :displayable)
|
49
|
-
|
50
|
-
titles = ancestral_titles(node)
|
51
|
-
solr_doc[@parent_titles_field_name] = titles
|
52
|
-
solr_doc[@parent_titles_search_field_name] = titles
|
53
|
-
solr_doc[@collection_name] = [titles.first] # collection is always on top
|
54
|
-
solr_doc[@collection_facet_name] = [titles.first]
|
55
|
-
end
|
56
|
-
|
57
|
-
def add_count_of_child_compontents(node, solr_doc)
|
58
|
-
@child_component_count_name ||= Solrizer.solr_name('child_component_count', type: :integer)
|
59
|
-
|
60
|
-
solr_doc[@child_component_count_name] = node.xpath('count(c)').to_i
|
61
|
-
end
|
62
|
-
|
63
|
-
def ancestral_ids(node)
|
64
|
-
ancestral_visit(node, :normalized_component_id, :normalized_collection_id)
|
65
|
-
end
|
66
|
-
|
67
|
-
def ancestral_titles(node)
|
68
|
-
ancestral_visit(node, :normalized_component_title, :normalized_collection_title)
|
69
|
-
end
|
70
|
-
|
71
|
-
# visit each component's parent and finish with a visit on the collection
|
72
|
-
def ancestral_visit(node, component_fn, collection_fn, results = [])
|
73
|
-
while node.parent && node.parent.name == 'c'
|
74
|
-
parent = node.parent
|
75
|
-
results << send(component_fn, parent)
|
76
|
-
node = parent
|
77
|
-
end
|
78
|
-
results << send(collection_fn, node)
|
79
|
-
results.reverse
|
80
|
-
end
|
81
|
-
|
82
|
-
def normalized_component_title(node)
|
83
|
-
data = extract_title_and_dates(node)
|
84
|
-
normalize_title(data)
|
85
|
-
end
|
86
|
-
|
87
|
-
def normalized_collection_title(node)
|
88
|
-
data = extract_title_and_dates(node, '//archdesc/')
|
89
|
-
normalize_title(data)
|
90
|
-
end
|
91
|
-
|
92
|
-
def normalize_title(data)
|
93
|
-
Arclight::NormalizedTitle.new(
|
94
|
-
data[:title],
|
95
|
-
Arclight::NormalizedDate.new(
|
96
|
-
data[:unitdate_inclusive],
|
97
|
-
data[:unitdate_bulk],
|
98
|
-
data[:unitdate_other]
|
99
|
-
).to_s
|
100
|
-
).to_s
|
101
|
-
end
|
102
|
-
|
103
|
-
# TODO: these xpaths should be DRY'd up -- they're in both terminologies
|
104
|
-
def extract_title_and_dates(node, prefix = nil)
|
105
|
-
{
|
106
|
-
title: node.at_xpath("#{prefix}did/unittitle").try(:text),
|
107
|
-
unitdate_inclusive: node.xpath("#{prefix}did/unitdate[@type=\"inclusive\"]").map(&:text),
|
108
|
-
unitdate_bulk: node.xpath("#{prefix}did/unitdate[@type=\"bulk\"]").map(&:text),
|
109
|
-
unitdate_other: node.xpath("#{prefix}did/unitdate[not(@type)]").map(&:text)
|
110
|
-
}
|
111
|
-
end
|
112
|
-
|
113
|
-
def normalized_component_id(node)
|
114
|
-
Arclight::NormalizedId.new(node['id'].to_s).to_s
|
115
|
-
end
|
116
|
-
|
117
|
-
def normalized_collection_id(node)
|
118
|
-
Arclight::NormalizedId.new(node.document.at_xpath('//eadid').text).to_s
|
119
|
-
end
|
120
|
-
|
121
|
-
# This mimics similar behavior in Arclight::CustomDocument
|
122
|
-
def add_collection_creator_to_component(node, solr_doc)
|
123
|
-
field_name = Solrizer.solr_name('collection_creator', :displayable)
|
124
|
-
repository = solr_doc[Solrizer.solr_name('repository', :displayable)]
|
125
|
-
creators = node.xpath('//archdesc/did/origination[@label="creator"]/*/text()').map(&:text)
|
126
|
-
solr_doc[field_name] = creators - [repository]
|
127
|
-
end
|
128
|
-
|
129
|
-
def parent_check_list(node, root_path, element_path, results = [])
|
130
|
-
orginal_node = node
|
131
|
-
results = node.xpath("#{root_path}/#{element_path}").map(&:text)
|
132
|
-
# if current restriction return, else go up to parent and check
|
133
|
-
while node.parent.name == 'c' && results.blank?
|
134
|
-
parent = node.parent
|
135
|
-
results = parent.xpath("#{root_path}/#{element_path}").map(&:text)
|
136
|
-
node = parent
|
137
|
-
end
|
138
|
-
# If no parental results, check the collection
|
139
|
-
results = orginal_node.xpath("//archdesc/#{element_path}").map(&:text) if results.blank?
|
140
|
-
results.flatten # can't use with flatten! because that returns nil
|
141
|
-
end
|
142
|
-
|
143
|
-
def add_self_or_parents_restrictions(node, solr_doc)
|
144
|
-
field_name = Solrizer.solr_name('parent_access_restrict', :displayable)
|
145
|
-
solr_doc[field_name] = parent_check_list(node, './', 'accessrestrict/p/text()')
|
146
|
-
solr_doc[field_name]
|
147
|
-
end
|
148
|
-
|
149
|
-
def add_self_or_parents_terms(node, solr_doc)
|
150
|
-
field_name = Solrizer.solr_name('parent_access_terms', :displayable)
|
151
|
-
solr_doc[field_name] = parent_check_list(node, './', 'userestrict/p/text()')
|
152
|
-
solr_doc[field_name]
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|