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 {|line| line.strip } : [author_line]
author_entries.each_with_index do |author_entry, idx|
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
if (segments = author_entry.split ' ').size > 3
segments = segments[0..1].push(segments[2..-1].join ' ')
end
elsif (match = AuthorInfoLineRx.match(author_entry))
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.tr_s(' ', ' ')
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