class GnListResolver::ColumnCollector
Assemble data from CSV reader by checking column fields
Constants
- RANKS
- SPECIES_RANKS
Public Class Methods
new(fields)
click to toggle source
# File lib/gn_list_resolver/column_collector.rb, line 12 def initialize(fields) @fields = fields err = "At least some of these fields must exist in " \ "the CSV header: '#{RANKS.join('\', \'')}'" raise GnListResolverError, err if (RANKS - @fields).size == RANKS.size end
Public Instance Methods
id_name_rank(row)
click to toggle source
# File lib/gn_list_resolver/column_collector.rb, line 19 def id_name_rank(row) @row = row rank = find_rank return nil unless rank name = assemble_name(rank) return nil unless name id = GnListResolver.find_id(@row, name) return nil if id.strip.to_s == "" { id: id, name: name, rank: rank.to_s } end
Private Instance Methods
add_infrarank(name, rank)
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/gn_list_resolver/column_collector.rb, line 67 def add_infrarank(name, rank) case rank when :species name.downcase when :subspecies "subsp. #{name.downcase}" when :variety "var. #{name.downcase}" when :form "f. #{name.downcase}" else name.capitalize end end
assemble_name(name_rank)
click to toggle source
# File lib/gn_list_resolver/column_collector.rb, line 42 def assemble_name(name_rank) name = @row[name_rank] if SPECIES_RANKS[1..-1].include?(name_rank) assemble_species_name(name, name_rank) else name.capitalize end end
assemble_species_name(name, name_rank)
click to toggle source
# File lib/gn_list_resolver/column_collector.rb, line 51 def assemble_species_name(name, name_rank) ending = [add_infrarank(name, name_rank), @row[:scientificnameauthorship]] ranks = SPECIES_RANKS[0...SPECIES_RANKS.index(name_rank)] starting = name_start(ranks) (starting + ending).flatten.join(" ").strip.gsub(/\s+/, " ") end
find_rank()
click to toggle source
# File lib/gn_list_resolver/column_collector.rb, line 32 def find_rank name_rank = nil RANKS.reverse_each do |rank| next if @row[rank].to_s.strip == "" name_rank = rank break end name_rank end
name_start(ranks)
click to toggle source
# File lib/gn_list_resolver/column_collector.rb, line 58 def name_start(ranks) ranks.each_with_object([]) do |rank, ary| next unless @row[rank] ary << add_infrarank(@row[rank], rank) end end