class GnListResolver::SciNameCollector

Assemble data from CSV reader by parsing scientificName field

Public Class Methods

new(fields) click to toggle source
# File lib/gn_list_resolver/sci_name_collector.rb, line 6
def initialize(fields)
  @fields = fields
  @parser = ScientificNameParser.new
end

Public Instance Methods

id_name_rank(row) click to toggle source
# File lib/gn_list_resolver/sci_name_collector.rb, line 11
def id_name_rank(row)
  @row = row
  name = find_name
  id = GnListResolver.find_id(@row, name)
  rank = @row[:taxonrank]
  rank = parse_rank if rank.nil?
  id && name ? { id: id, name: name, rank: rank } : nil
end

Private Instance Methods

find_name() click to toggle source
# File lib/gn_list_resolver/sci_name_collector.rb, line 22
def find_name
  name = @row[:scientificname].to_s.strip
  authorship = @row[:scientificnameauthorship].to_s.strip
  name = "#{name} #{authorship}" if authorship != ""
  name.strip == "" ? nil : name.strip
end
infer_rank(words_in_canonical_form) click to toggle source
# File lib/gn_list_resolver/sci_name_collector.rb, line 39
def infer_rank(words_in_canonical_form)
  case words_in_canonical_form
  when 1
    nil
  when 2
    "species"
  else
    normalize_rank(@parsed_name[:details][0][:infraspecies][-1][:rank])
  end
rescue NoMethodError
  nil
end
normalize_rank(rank) click to toggle source
# File lib/gn_list_resolver/sci_name_collector.rb, line 52
def normalize_rank(rank)
  case rank
  when /^f/
    "form"
  when /^var/
    "variety"
  when /^sub/
    "subspicies"
  else
    "infraspecies"
  end
end
parse_rank() click to toggle source
# File lib/gn_list_resolver/sci_name_collector.rb, line 29
def parse_rank
  @parsed_name = @parser.parse(@row[:scientificname])[:scientificName]
  return nil if !@parsed_name[:canonical] || @parsed_name[:hybrid]
  words_num = @parsed_name[:canonical].split(" ").size
  infer_rank(words_num)
rescue StandardError
  @parser = ScientificNameParser.new
  nil
end