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