def self.process_authors(author_line, names_only = false, multiple = true)
author_metadata = {}
keys = ['author', 'authorinitials', 'firstname', 'middlename', 'lastname', 'email']
author_entries = multiple ? author_line.split(';').map(&:strip) : [author_line]
author_entries.each_with_index do |author_entry, idx|
author_entry.strip!
next if author_entry.empty?
key_map = {}
if idx.zero?
keys.each do |key|
key_map[key.to_sym] = key
end
else
keys.each do |key|
key_map[key.to_sym] = "#{key}_#{idx + 1}"
end
end
segments = nil
if names_only
segments = author_entry.split(' ', 3)
elsif (match = author_entry.match(REGEXP[:author_info]))
segments = match.to_a
segments.shift
end
unless segments.nil?
author_metadata[key_map[:firstname]] = fname = segments[0].tr('_', ' ')
author_metadata[key_map[:author]] = fname
author_metadata[key_map[:authorinitials]] = fname[0, 1]
if !segments[1].nil? && !segments[2].nil?
author_metadata[key_map[:middlename]] = mname = segments[1].tr('_', ' ')
author_metadata[key_map[:lastname]] = lname = segments[2].tr('_', ' ')
author_metadata[key_map[:author]] = [fname, mname, lname].join ' '
author_metadata[key_map[:authorinitials]] = [fname[0, 1], mname[0, 1], lname[0, 1]].join
elsif !segments[1].nil?
author_metadata[key_map[:lastname]] = lname = segments[1].tr('_', ' ')
author_metadata[key_map[:author]] = [fname, lname].join ' '
author_metadata[key_map[:authorinitials]] = [fname[0, 1], lname[0, 1]].join
end
author_metadata[key_map[:email]] = segments[3] unless names_only || segments[3].nil?
else
author_metadata[key_map[:author]] = author_metadata[key_map[:firstname]] = fname = author_entry.strip.squeeze(' ')
author_metadata[key_map[:authorinitials]] = fname[0, 1]
end
author_metadata['authorcount'] = idx + 1
if idx == 1
keys.each do |key|
author_metadata["#{key}_1"] = author_metadata[key] if author_metadata.has_key? key
end
end
if idx.zero?
author_metadata['authors'] = author_metadata[key_map[:author]]
else
author_metadata['authors'] = "#{author_metadata['authors']}, #{author_metadata[key_map[:author]]}"
end
end
author_metadata
end