Skip to content
This repository has been archived by the owner on May 11, 2022. It is now read-only.

Commit

Permalink
Merge 2c9c0a4 into 602e0a8
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoyne committed Dec 21, 2018
2 parents 602e0a8 + 2c9c0a4 commit 4325569
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 30 deletions.
80 changes: 52 additions & 28 deletions lib/dor/indexers/processable_indexer.rb
Expand Up @@ -11,35 +11,56 @@ def initialize(resource:)

# @return [Hash] the partial solr document for processable concerns
def to_solr
solr_doc = {}
sortable_milestones = {}
current_version = '1'
begin
current_version = resource.versionMetadata.current_version_id
rescue StandardError
{}.tap do |solr_doc|
add_versions(solr_doc)
add_milestones(solr_doc, resource.milestones)
solr_doc['modified_latest_dttsi'] = resource.modified_date.to_datetime.utc.strftime('%FT%TZ')
add_solr_value(solr_doc, 'rights', resource.rights, :string, [:symbol]) if resource.respond_to? :rights
add_status(solr_doc)
end
current_version_num = current_version.to_i
end

if resource.respond_to?('versionMetadata')
# add an entry with version id, tag and description for each version
while current_version_num > 0
new_val = "#{current_version_num};#{resource.versionMetadata.tag_for_version(current_version_num.to_s)};#{resource.versionMetadata.description_for_version(current_version_num.to_s)}"
add_solr_value(solr_doc, 'versions', new_val, :string, [:displayable])
current_version_num -= 1
end
end
private

resource.milestones.each do |milestone|
def current_version
@current_version ||= begin
resource.versionMetadata.current_version_id
rescue StandardError
'1'
end
end

def add_status(solr_doc)
solr_doc['status_ssi'] = resource.status # status is singular (i.e. the current one)
status_info_hash = resource.status_info
status_code = status_info_hash[:status_code]
add_solr_value(solr_doc, 'processing_status_text', simplified_status_code_disp_txt(status_code), :string, [:stored_sortable])
solr_doc['processing_status_code_isi'] = status_code
end

def add_milestones(solr_doc, milestones)
milestones.each do |milestone|
timestamp = milestone[:at].utc.xmlschema
sortable_milestones[milestone[:milestone]] ||= []
sortable_milestones[milestone[:milestone]] << timestamp
milestone[:version] ||= current_version
solr_doc['lifecycle_ssim'] ||= []
solr_doc['lifecycle_ssim'] << milestone[:milestone]
add_solr_value(solr_doc, 'lifecycle', "#{milestone[:milestone]}:#{timestamp};#{milestone[:version]}", :symbol)
end

sortable_milestones.each do |milestone, unordered_dates|
add_sortable_milestones(solr_doc, milestones)
end

def sortable_milestones(milestones)
sortable = {}
milestones.each do |milestone|
sortable[milestone[:milestone]] ||= []
sortable[milestone[:milestone]] << milestone[:at].utc.xmlschema
end
sortable
end

def add_sortable_milestones(solr_doc, milestones)
sortable_milestones(milestones).each do |milestone, unordered_dates|
dates = unordered_dates.sort
# create the published_dttsi and published_day fields and the like
dates.each do |date|
Expand All @@ -50,17 +71,20 @@ def to_solr
solr_doc["#{milestone}_earliest_dttsi"] = dates.first
solr_doc["#{milestone}_latest_dttsi"] = dates.last
end
solr_doc['status_ssi'] = resource.status # status is singular (i.e. the current one)
solr_doc['current_version_isi'] = current_version.to_i
solr_doc['modified_latest_dttsi'] = resource.modified_date.to_datetime.utc.strftime('%FT%TZ')
add_solr_value(solr_doc, 'rights', resource.rights, :string, [:symbol]) if resource.respond_to? :rights
end

status_info_hash = resource.status_info
status_code = status_info_hash[:status_code]
add_solr_value(solr_doc, 'processing_status_text', simplified_status_code_disp_txt(status_code), :string, [:stored_sortable])
solr_doc['processing_status_code_isi'] = status_code # no _isi in Solrizer's default descriptors
def add_versions(solr_doc)
current_version_num = current_version.to_i
solr_doc['current_version_isi'] = current_version_num

return unless resource.respond_to?('versionMetadata')

solr_doc
# add an entry with version id, tag and description for each version
while current_version_num > 0
new_val = "#{current_version_num};#{resource.versionMetadata.tag_for_version(current_version_num.to_s)};#{resource.versionMetadata.description_for_version(current_version_num.to_s)}"
add_solr_value(solr_doc, 'versions', new_val, :string, [:displayable])
current_version_num -= 1
end
end

# @return [String] text translation of the status code, minus any trailing parenthetical explanation
Expand Down
4 changes: 2 additions & 2 deletions spec/indexers/processable_indexer_spec.rb
Expand Up @@ -19,8 +19,8 @@

describe '#simplified_status_code_disp_txt' do
it "trims off parens but doesn't harm the strings otherwise" do
expect(indexer.simplified_status_code_disp_txt(2)).to eq('In accessioning')
expect(indexer.simplified_status_code_disp_txt(3)).to eq('In accessioning')
expect(indexer.send(:simplified_status_code_disp_txt, 2)).to eq('In accessioning')
expect(indexer.send(:simplified_status_code_disp_txt, 3)).to eq('In accessioning')
end
end

Expand Down

0 comments on commit 4325569

Please sign in to comment.