dwca_hunter 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.byebug_history +45 -0
  3. data/.gitignore +5 -0
  4. data/.rubocop.yml +3 -2
  5. data/.ruby-version +1 -1
  6. data/Gemfile.lock +61 -83
  7. data/LICENSE.txt +1 -1
  8. data/README.md +1 -1
  9. data/dwca_hunter.gemspec +9 -9
  10. data/exe/dwcahunter +1 -3
  11. data/lib/dwca_hunter.rb +39 -8
  12. data/lib/dwca_hunter/resource.rb +5 -0
  13. data/lib/dwca_hunter/resources/aos-birds.rb +143 -0
  14. data/lib/dwca_hunter/resources/arctos.rb +121 -145
  15. data/lib/dwca_hunter/resources/clements.rb +151 -0
  16. data/lib/dwca_hunter/resources/eol.rb +85 -0
  17. data/lib/dwca_hunter/resources/freebase.rb +51 -49
  18. data/lib/dwca_hunter/resources/how-moore-birds.rb +168 -0
  19. data/lib/dwca_hunter/resources/ioc_word_bird.rb +200 -0
  20. data/lib/dwca_hunter/resources/ipni.rb +111 -0
  21. data/lib/dwca_hunter/resources/itis.rb +99 -99
  22. data/lib/dwca_hunter/resources/mammal_divdb.rb +155 -0
  23. data/lib/dwca_hunter/resources/mammal_species.rb +9 -6
  24. data/lib/dwca_hunter/resources/mcz.rb +123 -0
  25. data/lib/dwca_hunter/resources/ncbi.rb +22 -23
  26. data/lib/dwca_hunter/resources/opentree.rb +5 -5
  27. data/lib/dwca_hunter/resources/paleobiodb.rb +193 -0
  28. data/lib/dwca_hunter/resources/paleodb_harvester.rb +140 -0
  29. data/lib/dwca_hunter/resources/sherborn.rb +91 -0
  30. data/lib/dwca_hunter/resources/wikispecies.rb +142 -129
  31. data/lib/dwca_hunter/version.rb +1 -1
  32. metadata +46 -40
  33. data/files/birdlife_7.csv +0 -11862
  34. data/files/fishbase_taxon_cache.tsv +0 -81000
  35. data/files/reptile_checklist_2014_12.csv +0 -15158
  36. data/files/species-black.txt +0 -251
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e30e9b34ea1c46b021bd3c2ec66ccad4996d4a921c7ce78791b84940bd239f05
4
- data.tar.gz: 1be0e7119fd38094f94a53d71460a8f97a59f2e46a5e9740b814f5dcc97b42cd
3
+ metadata.gz: 76fb831d8f9d33d8cfa32221ce4a5a0e82ee8090ed427c6d2eebc96e267b8151
4
+ data.tar.gz: 33c8040ec605718963ee46eef4a2a4c27770ce3cfb53baf7486047a3d0528410
5
5
  SHA512:
6
- metadata.gz: df1d9bebe191ebf8ae72d601f05374edeaeffbb627d08d7981da582559439dd9ad173656d78a7c88b3a9765562efa8a7095c4eaa5ed0f1f3ef856be94f990b63
7
- data.tar.gz: 703bbf2d197a55a8d4e8510e940f77562540983bb5eddc7a7496ed77af5e610ce0ce5d95a1faa25878a8f8b12a17613808898453a0bd6b7aa19a87dc7c5f000e
6
+ metadata.gz: 380a22edce284de5f1e836b8b4ae236b8d43fecb7b72032d4e4d3c071d77da05bb87498f6e2f868b071f935983e64861cd8ce549d6b9ed8d672b8ab7d53da32e
7
+ data.tar.gz: 97a397e0fc24f5705e46287178f4dd1560621995a19b85007609eba4819127b0a98c49a9dd9ea2d946ead54bf5c4f17e2d85cea738f3c9fdf7ba3de3a5c92f93
@@ -1,4 +1,49 @@
1
1
  q
2
+ row
3
+ data
4
+ cc
5
+ c
6
+ data
7
+ c
8
+ data
9
+ c
10
+ data
11
+ c
12
+ data
13
+ c
14
+ data
15
+ q
16
+ p n
17
+ n
18
+ q
19
+ @name_id_json[n]
20
+ n = row[:acc_name].to_sym
21
+ row[:acc_name].to_sym
22
+ row[:acc_name]
23
+ acc_id
24
+ vi acc_id
25
+ q
26
+ @name_id
27
+ acc_id
28
+ id
29
+ q
30
+ DwcaHunter.resources
31
+ q
32
+ DwcaHunter.resources
33
+ q
34
+ res.size
35
+ res.len
36
+ res
37
+ trd
38
+ exit
39
+ pp row
40
+ require "pp"
41
+ pp row
42
+ row["id"]
43
+ row.id
44
+ row
45
+ data
46
+ q
2
47
  c
3
48
  q
4
49
  resource.title =>q
data/.gitignore CHANGED
@@ -56,3 +56,8 @@ tags
56
56
 
57
57
  # vscode
58
58
  .vs
59
+
60
+ # misc
61
+ *.json
62
+ *.csv
63
+ *.txt
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.4
2
+ NewCops: disable
3
+ TargetRubyVersion: 2.6.6
3
4
  Exclude:
4
5
  - bin/**/*
5
6
  - db/**/*
@@ -30,4 +31,4 @@ Metrics/MethodLength:
30
31
  Naming/FileName:
31
32
  Exclude:
32
33
  - Gemfile
33
- - Rakefile
34
+ - Rakefile
@@ -1 +1 @@
1
- 2.5.1
1
+ 2.6.6
@@ -1,135 +1,113 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dwca_hunter (0.5.1)
5
- biodiversity (~> 3.5)
6
- dwc-archive (~> 1.0)
4
+ dwca_hunter (0.7.0)
5
+ biodiversity (~> 4)
6
+ dwc-archive (~> 1.1.1)
7
7
  gn_uuid (~> 0.5)
8
8
  htmlentities (~> 4.3)
9
- nokogiri (~> 1.8)
9
+ nokogiri (~> 1.10)
10
10
  rest-client (~> 2.0)
11
+ ruby-xz (~> 1.0)
11
12
  thor (~> 0.19)
12
13
 
13
14
  GEM
14
15
  remote: http://rubygems.org/
15
16
  specs:
16
17
  ast (2.4.0)
17
- biodiversity (3.5.0)
18
- gn_uuid (~> 0.5)
19
- parallel (~> 1.12)
20
- treetop (~> 1.6)
21
- unicode_utils (~> 1.4)
18
+ biodiversity (4.1.0)
19
+ ffi (~> 1.11)
22
20
  byebug (10.0.2)
23
- coderay (1.1.2)
24
- coveralls (0.8.22)
21
+ coveralls (0.8.23)
25
22
  json (>= 1.8, < 3)
26
23
  simplecov (~> 0.16.1)
27
24
  term-ansicolor (~> 1.3)
28
- thor (~> 0.19.4)
25
+ thor (>= 0.19.4, < 2.0)
29
26
  tins (~> 1.6)
30
27
  diff-lcs (1.3)
31
- docile (1.3.1)
32
- domain_name (0.5.20180417)
28
+ docile (1.3.2)
29
+ domain_name (0.5.20190701)
33
30
  unf (>= 0.0.5, < 1.0.0)
34
- dwc-archive (1.0.1)
35
- nokogiri (~> 1.8)
36
- parsley-store (~> 0.3)
37
- eventmachine (1.2.7)
38
- gn_uuid (0.5.0)
31
+ dwc-archive (1.1.1)
32
+ biodiversity (~> 4)
33
+ nokogiri (~> 1.10)
34
+ ffi (1.13.1)
35
+ gn_uuid (0.5.1)
39
36
  htmlentities (4.3.4)
37
+ http-accept (1.7.0)
40
38
  http-cookie (1.0.3)
41
39
  domain_name (~> 0.5)
42
- jaro_winkler (1.5.1)
43
- json (2.1.0)
44
- kramdown (1.17.0)
45
- mime-types (3.1)
40
+ json (2.3.0)
41
+ mime-types (3.3.1)
46
42
  mime-types-data (~> 3.2015)
47
- mime-types-data (3.2016.0521)
48
- mini_portile2 (2.3.0)
43
+ mime-types-data (3.2020.0512)
44
+ mini_portile2 (2.4.0)
49
45
  netrc (0.11.0)
50
- nokogiri (1.8.4)
51
- mini_portile2 (~> 2.3.0)
52
- parallel (1.12.1)
53
- parser (2.5.1.2)
46
+ nokogiri (1.10.9)
47
+ mini_portile2 (~> 2.4.0)
48
+ parallel (1.19.1)
49
+ parser (2.7.1.3)
54
50
  ast (~> 2.4.0)
55
- parsley-store (0.3.6)
56
- biodiversity (~> 3.1)
57
- redis (~> 3.0)
58
- polyglot (0.3.5)
59
- powerpack (0.1.2)
60
51
  rainbow (3.0.0)
61
- rake (12.3.1)
62
- redis (3.3.5)
63
- rest-client (2.0.2)
52
+ rake (13.0.1)
53
+ rest-client (2.1.0)
54
+ http-accept (>= 1.7.0, < 2.0)
64
55
  http-cookie (>= 1.0.2, < 2.0)
65
56
  mime-types (>= 1.16, < 4.0)
66
57
  netrc (~> 0.8)
67
- reverse_markdown (1.1.0)
68
- nokogiri
69
- rspec (3.7.0)
70
- rspec-core (~> 3.7.0)
71
- rspec-expectations (~> 3.7.0)
72
- rspec-mocks (~> 3.7.0)
73
- rspec-core (3.7.1)
74
- rspec-support (~> 3.7.0)
75
- rspec-expectations (3.7.0)
58
+ rexml (3.2.4)
59
+ rspec (3.9.0)
60
+ rspec-core (~> 3.9.0)
61
+ rspec-expectations (~> 3.9.0)
62
+ rspec-mocks (~> 3.9.0)
63
+ rspec-core (3.9.2)
64
+ rspec-support (~> 3.9.3)
65
+ rspec-expectations (3.9.2)
76
66
  diff-lcs (>= 1.2.0, < 2.0)
77
- rspec-support (~> 3.7.0)
78
- rspec-mocks (3.7.0)
67
+ rspec-support (~> 3.9.0)
68
+ rspec-mocks (3.9.1)
79
69
  diff-lcs (>= 1.2.0, < 2.0)
80
- rspec-support (~> 3.7.0)
81
- rspec-support (3.7.1)
82
- rubocop (0.58.1)
83
- jaro_winkler (~> 1.5.1)
70
+ rspec-support (~> 3.9.0)
71
+ rspec-support (3.9.3)
72
+ rubocop (0.84.0)
84
73
  parallel (~> 1.10)
85
- parser (>= 2.5, != 2.5.1.1)
86
- powerpack (~> 0.1)
74
+ parser (>= 2.7.0.1)
87
75
  rainbow (>= 2.2.2, < 4.0)
76
+ rexml
77
+ rubocop-ast (>= 0.0.3)
88
78
  ruby-progressbar (~> 1.7)
89
- unicode-display_width (~> 1.0, >= 1.0.1)
90
- ruby-progressbar (1.9.0)
79
+ unicode-display_width (>= 1.4.0, < 2.0)
80
+ rubocop-ast (0.0.3)
81
+ parser (>= 2.7.0.1)
82
+ ruby-progressbar (1.10.1)
83
+ ruby-xz (1.0.0)
91
84
  simplecov (0.16.1)
92
85
  docile (~> 1.1)
93
86
  json (>= 1.8, < 3)
94
87
  simplecov-html (~> 0.10.0)
95
88
  simplecov-html (0.10.2)
96
- solargraph (0.23.5)
97
- coderay (~> 1.1)
98
- eventmachine (~> 1.2, >= 1.2.5)
99
- htmlentities (~> 4.3, >= 4.3.4)
100
- kramdown (~> 1.16)
101
- parser (~> 2.4)
102
- reverse_markdown (~> 1.0, >= 1.0.5)
103
- rubocop (~> 0.52)
104
- thor (~> 0.19, >= 0.19.4)
105
- tilt (~> 2.0)
106
- yard (~> 0.9)
107
- term-ansicolor (1.6.0)
89
+ sync (0.5.0)
90
+ term-ansicolor (1.7.1)
108
91
  tins (~> 1.0)
109
- thor (0.19.4)
110
- tilt (2.0.8)
111
- tins (1.16.3)
112
- treetop (1.6.10)
113
- polyglot (~> 0.3)
92
+ thor (0.20.3)
93
+ tins (1.25.0)
94
+ sync
114
95
  unf (0.1.4)
115
96
  unf_ext
116
- unf_ext (0.0.7.5)
117
- unicode-display_width (1.4.0)
118
- unicode_utils (1.4.0)
119
- yard (0.9.15)
97
+ unf_ext (0.0.7.7)
98
+ unicode-display_width (1.7.0)
120
99
 
121
100
  PLATFORMS
122
101
  ruby
123
102
 
124
103
  DEPENDENCIES
125
- bundler (~> 1.16)
104
+ bundler (~> 2.0)
126
105
  byebug (~> 10.0)
127
106
  coveralls (~> 0.8)
128
107
  dwca_hunter!
129
- rake (~> 12.3)
130
- rspec (~> 3.7)
131
- rubocop (~> 0.58)
132
- solargraph (~> 0.23)
108
+ rake (~> 13.0)
109
+ rspec (~> 3.9)
110
+ rubocop (~> 0.84)
133
111
 
134
112
  BUNDLED WITH
135
- 1.16.3
113
+ 2.1.4
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Marine Biological Laboratory
1
+ Copyright (c) 2011-2020 Dmitry Mozzherin
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -32,7 +32,7 @@ See dwca_hunter/bin/dwca-hunt.rb as a example how to use the code.
32
32
 
33
33
  ## Copyright
34
34
 
35
- Copyright (c) 2011-2016 Dmitry Mozzherin. See LICENSE.txt for further details.
35
+ Copyright (c) 2011-2020 Dmitry Mozzherin. See LICENSE.txt for further details.
36
36
 
37
37
  [code-climate-img]: https://codeclimate.com/badge.png
38
38
  [code-climate]: https://codeclimate.com/github/GlobalNamesArchitecture/dwca_hunter
@@ -6,7 +6,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
6
  require "dwca_hunter/version"
7
7
 
8
8
  Gem::Specification.new do |gem|
9
- gem.required_ruby_version = ">= 2.4"
9
+ gem.required_ruby_version = ">= 2.6.6"
10
10
  gem.name = "dwca_hunter"
11
11
  gem.version = DwcaHunter.version
12
12
  gem.license = "MIT"
@@ -26,19 +26,19 @@ Gem::Specification.new do |gem|
26
26
  gem.executables = gem.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  gem.require_paths = ["lib"]
28
28
 
29
- gem.add_dependency "biodiversity", "~> 3.5"
30
- gem.add_dependency "dwc-archive", "~> 1.0"
29
+ gem.add_dependency "biodiversity", "~> 4"
30
+ gem.add_dependency "dwc-archive", "~> 1.1.1"
31
31
  gem.add_dependency "gn_uuid", "~> 0.5"
32
32
  gem.add_dependency "htmlentities", "~> 4.3"
33
- gem.add_dependency "nokogiri", "~> 1.8"
33
+ gem.add_dependency "nokogiri", "~> 1.10"
34
34
  gem.add_dependency "rest-client", "~> 2.0"
35
+ gem.add_dependency "ruby-xz", "~> 1.0"
35
36
  gem.add_dependency "thor", "~> 0.19"
36
37
 
37
- gem.add_development_dependency "bundler", "~> 1.16"
38
+ gem.add_development_dependency "bundler", "~> 2.0"
38
39
  gem.add_development_dependency "byebug", "~> 10.0"
39
40
  gem.add_development_dependency "coveralls", "~> 0.8"
40
- gem.add_development_dependency "rake", "~> 12.3"
41
- gem.add_development_dependency "rspec", "~> 3.7"
42
- gem.add_development_dependency "rubocop", "~> 0.58"
43
- gem.add_development_dependency "solargraph", "~> 0.23"
41
+ gem.add_development_dependency "rake", "~> 13.0"
42
+ gem.add_development_dependency "rspec", "~> 3.9"
43
+ gem.add_development_dependency "rubocop", "~> 0.84"
44
44
  end
@@ -37,9 +37,7 @@ class DwcaHunterCLI < Thor
37
37
  res = []
38
38
  DwcaHunter.resources.each do |resource|
39
39
  r = resource.new
40
- if add_resource?(search, r)
41
- res << { n: nil, command: r.command, resource: r.title }
42
- end
40
+ res << { n: nil, command: r.command, resource: r.title } if add_resource?(search, r)
43
41
  end
44
42
  res.sort_by { |r| r[:command] }.each_with_object([]) do |r, a|
45
43
  r[:n] = a.size + 1
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "base64"
3
4
  require "biodiversity"
4
- require "logger"
5
- require "fileutils"
6
- require "uri"
7
- require "tmpdir"
8
- require "net/http"
9
- require "json"
10
- require "htmlentities"
11
5
  require "dwc_archive"
12
6
  require "dwca_hunter/resource"
7
+ require "fileutils"
8
+ require "htmlentities"
9
+ require "json"
10
+ require "logger"
11
+ require "net/http"
13
12
  require "rest_client"
14
- require "base64"
13
+ require "tmpdir"
14
+ require "uri"
15
15
 
16
16
  Dir[File.join(__dir__, "dwca_hunter", "*.rb")].
17
17
  each { |f| require f }
@@ -51,5 +51,36 @@ module DwcaHunter
51
51
  c < Resource
52
52
  end
53
53
  end
54
+
55
+ def normalize_authors(auth)
56
+ reg = Regexp.new(/^([\(]?)(.*?)(([\s,\)][^[:upper:]]*)?$)/)
57
+ auth = auth.gsub(/duPont/, 'du Pont')
58
+ match = reg.match(auth)
59
+ return auth if match.nil?
60
+ a1, a2, a3 = match[1..3]
61
+ a2mod = a2.gsub('&', ',')
62
+ ary2 = a2mod.split(',').map(&:strip)
63
+ a2 = move_initials(ary2) if ary2.size > 1
64
+ "#{a1}#{a2}#{a3}"
65
+ end
66
+
67
+ def move_initials(ary)
68
+ res = []
69
+ ary.each do |a|
70
+ if res.empty?
71
+ res << a
72
+ next
73
+ end
74
+ match = /^([[:upper:]]{1,4})(\sJr)?$/.match(a)
75
+ if !match.nil?
76
+ initialls = match[1].split('').join('. ')
77
+ res[-1] = "#{initialls}. #{res[-1]}#{match[2].to_s}"
78
+ else
79
+ res << a
80
+ end
81
+ end
82
+ res.size == 1 ? res[0] : "#{res[0..-2].join(', ')} & #{res[-1]}"
83
+ end
54
84
  end
55
85
  end
86
+
@@ -7,6 +7,11 @@ module DwcaHunter
7
7
  `unzip -qq -u #{file} > /dev/null 2>&1`
8
8
  end
9
9
 
10
+ def self.gunzip(file, dir = nil)
11
+ Dir.chdir(dir) if dir
12
+ `gunzip #{file}`
13
+ end
14
+
10
15
  def initialize(opts)
11
16
  @needs_download = !(opts[:download] == false)
12
17
  @needs_unpack = !(opts[:unpack] == false)
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DwcaHunter
4
+ class ResourceAOS < DwcaHunter::Resource
5
+ def initialize(opts = {})
6
+ @command = "aos-birds"
7
+ @title = "American Ornithological Society"
8
+ @url = "http://checklist.americanornithology.org/taxa.csv"
9
+ @UUID = "91d38806-8435-479f-a18d-705e5cb0767c"
10
+ @download_path = File.join(Dir.tmpdir,
11
+ "dwca_hunter",
12
+ "aos",
13
+ "data.csv")
14
+ @synonyms = []
15
+ @names = []
16
+ @vernaculars = []
17
+ @extensions = []
18
+ @synonyms_hash = {}
19
+ @vernaculars_hash = {}
20
+ super(opts)
21
+ end
22
+
23
+ def download
24
+ puts "Downloading csv from remote"
25
+ `curl -s -L #{@url} -o #{@download_path}`
26
+ end
27
+
28
+ def unpack; end
29
+
30
+ def make_dwca
31
+ DwcaHunter.logger_write(object_id, "Extracting data")
32
+ get_names
33
+ generate_dwca
34
+ end
35
+
36
+ private
37
+
38
+ def get_names
39
+ Dir.chdir(@download_dir)
40
+ collect_names
41
+ end
42
+
43
+ def collect_names
44
+ @names_index = {}
45
+ file = CSV.open(File.join(@download_dir, "data.csv"),
46
+ headers: true)
47
+ file.each_with_index do |row, _i|
48
+ taxon_id = row["id"]
49
+ name_string = row["species"]
50
+ kingdom = "Animalia"
51
+ phylum = "Chordata"
52
+ klass = "Aves"
53
+ order = row["order"]
54
+ family = row["family"]
55
+ genus = row["genus"]
56
+ code = "ICZN"
57
+
58
+ @names << {
59
+ taxon_id: taxon_id,
60
+ name_string: name_string,
61
+ kingdom: kingdom,
62
+ phylum: phylum,
63
+ klass: klass,
64
+ order: order,
65
+ family: family,
66
+ genus: genus,
67
+ code: code
68
+ }
69
+ if row["common_name"].to_s != ""
70
+ @vernaculars << {
71
+ taxon_id: taxon_id,
72
+ vern: row["common_name"],
73
+ lang: "en"
74
+ }
75
+ end
76
+ next unless row["french_name"].to_s != ""
77
+
78
+ @vernaculars << {
79
+ taxon_id: taxon_id,
80
+ vern: row["french_name"],
81
+ lang: "fr"
82
+ }
83
+ end
84
+ end
85
+
86
+ def generate_dwca
87
+ DwcaHunter.logger_write(object_id,
88
+ "Creating DarwinCore Archive file")
89
+ @core = [["http://rs.tdwg.org/dwc/terms/taxonID",
90
+ "http://rs.tdwg.org/dwc/terms/scientificName",
91
+ "http://rs.tdwg.org/dwc/terms/kingdom",
92
+ "http://rs.tdwg.org/dwc/terms/phylum",
93
+ "http://rs.tdwg.org/dwc/terms/class",
94
+ "http://rs.tdwg.org/dwc/terms/order",
95
+ "http://rs.tdwg.org/dwc/terms/family",
96
+ "http://rs.tdwg.org/dwc/terms/genus",
97
+ "http://rs.tdwg.org/dwc/terms/nomenclaturalCode"]]
98
+ @names.each do |n|
99
+ @core << [n[:taxon_id], n[:name_string],
100
+ n[:kingdom], n[:phylum], n[:klass], n[:order], n[:family],
101
+ n[:genus], n[:code]]
102
+ end
103
+ @extensions << {
104
+ data: [[
105
+ "http://rs.tdwg.org/dwc/terms/taxonID",
106
+ "http://rs.tdwg.org/dwc/terms/vernacularName",
107
+ "http://purl.org/dc/terms/language"
108
+ ]],
109
+ file_name: "vernacular_names.txt",
110
+ row_type: "http://rs.gbif.org/terms/1.0/VernacularName"
111
+ }
112
+
113
+ @vernaculars.each do |v|
114
+ @extensions[-1][:data] << [v[:taxon_id], v[:vern], v[:lang]]
115
+ end
116
+ @eml = {
117
+ id: @uuid,
118
+ title: @title,
119
+ authors: [
120
+ { first_name: "R. T.",
121
+ last_name: "Chesser" }
122
+ ],
123
+ metadata_providers: [
124
+ { first_name: "Dmitry",
125
+ last_name: "Mozzherin",
126
+ email: "dmozzherin@gmail.com" }
127
+ ],
128
+ abstract: "The American Ornithological Society's (AOS) Checklist is " \
129
+ "the official source on the taxonomy of birds found in North and " \
130
+ "Middle America, including adjacent islands. This list is produced " \
131
+ "by the North American Classification and Nomenclature Committee " \
132
+ "(NACC) of the AOS.\n\n" \
133
+ "Recommended citation: Chesser, R. T., K. J. Burns, C. Cicero, " \
134
+ "J. L. Dunn, A. W. Kratter, I. J. Lovette, P. C. Rasmussen, " \
135
+ "J. V. Remsen, Jr., D. F. Stotz, and K. Winker. 2019. Check-list " \
136
+ "of North American Birds (online). American Ornithological Society. " \
137
+ "http://checklist.aou.org/taxa",
138
+ url: @url
139
+ }
140
+ super
141
+ end
142
+ end
143
+ end