class DwcaHunter::ResourceReptilesChecklist
Public Class Methods
new(opts = {})
click to toggle source
Calls superclass method
DwcaHunter::Resource::new
# File lib/dwca_hunter/resources/reptiles_checklist.rb, line 7 def initialize(opts = {}) @command = "reptile-database" @title = "The Reptile Database" @uuid = "c24e0905-4980-4e1d-aff2-ee0ef54ea1f8" @data = [] @extensions = [] @download_path = File.join(Dir.tmpdir, 'dwca_hunter', 'reptilesdb', 'fake.tar.gz') super end
Public Instance Methods
download()
click to toggle source
# File lib/dwca_hunter/resources/reptiles_checklist.rb, line 22 def download end
make_dwca()
click to toggle source
# File lib/dwca_hunter/resources/reptiles_checklist.rb, line 25 def make_dwca organize_data generate_dwca end
needs_unpack?()
click to toggle source
# File lib/dwca_hunter/resources/reptiles_checklist.rb, line 18 def needs_unpack? false end
Private Instance Methods
generate_dwca()
click to toggle source
Calls superclass method
DwcaHunter::Resource#generate_dwca
# File lib/dwca_hunter/resources/reptiles_checklist.rb, line 68 def generate_dwca DwcaHunter::logger_write(self.object_id, "Creating DarwinCore Archive file") @core = [['http://rs.tdwg.org/dwc/terms/taxonID', 'http://rs.tdwg.org/dwc/terms/parentNameUsageID', 'http://rs.tdwg.org/dwc/terms/scientificName', 'http://rs.tdwg.org/dwc/terms/taxonRank']] @extensions << { data: [['http://rs.tdwg.org/dwc/terms/taxonID', 'http://rs.tdwg.org/dwc/terms/vernacularName', 'http://purl.org/dc/terms/language']], file_name: 'vernacular_names.txt', row_type: 'http://rs.gbif.org/terms/1.0/VernacularName' } families = {} count = 1 class_id = count @core << [count, nil, "Reptilia", "class"] @data.each_with_index do |record| count += 1 family_id = families[record[:family]] unless family_id count += 1 family_id = count families[record[:family]] = family_id @core << [family_id, class_id, record[:family], "family"] end count += 1 species_id = count @core << [species_id, family_id, record[:species], "species"] record[:vernaculars].each do |v| @extensions[0][:data] << [species_id, v[:name], v[:lang]] end record[:subspecies].each do |ssp| count += 1 row = [count, species_id, ssp, "subspecies"] @core << row end end @eml = { id: @uuid, title: @title, authors: [ { first_name: "Peter", last_name: "Uetz", email: "info@reptile-database_org" }, { first_name: "Jiri", last_name: "Hosek", email: "jiri.hosek@reptarium.cz" } ], metadata_providers: [ { first_name: 'Dmitry', last_name: 'Mozzherin', email: 'dmozzherin@gmail.com' } ], abstract: "This database provides a catalogue of all living reptile "\ "species and their classification. The database covers "\ "all living snakes, lizards, turtles, amphisbaenians, "\ "tuataras, and crocodiles. Currently there are about "\ "9,500 species including another 2,800 subspecies "\ "(statistics). The database focuses on taxonomic data, "\ "i.e. names and synonyms, distribution and type data "\ "and literature references.", url: "http://www.reptile-database.org" } super end
organize_data()
click to toggle source
# File lib/dwca_hunter/resources/reptiles_checklist.rb, line 31 def organize_data DwcaHunter::logger_write(self.object_id, "Organizing data") path = File.join(__dir__, "..", "..", "files", "reptile_checklist_2014_12.csv") snp = ScientificNameParser.new @data = CSV.open(path).each_with_object([]) do |row, data| res = {} name = row[0..1].join(" ") res[:species] = snp.parse(name)[:scientificName][:normalized] res[:subspecies] = [] if row[2] row[2].split("\n").each do |ssp| res[:subspecies] << snp.parse(ssp)[:scientificName][:normalized] end end res[:vernaculars] = [] if row[3] row[3].split("\n").each do |v| lang = "en" v.gsub!(/^E: /, '') v.gsub!(/^G: /) do |m| lang = "de" if m "" end v.split(",").each do |name| res[:vernaculars] << { name: name.strip, lang: lang } end end end if row[4] res[:family] = row[4].match(/^[A-Za-z]+/)[0] end data << res end end