gn_crossmap 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86fb5fd0af52a9d6f090087144dba5bd68f1b82b
4
- data.tar.gz: 6c88b19b64806e01af435ba78014e95dce4bf48d
3
+ metadata.gz: f1579ecd4d04e966c241d7aa9dab3723b180d056
4
+ data.tar.gz: 6454a5f074dc187af6d179556bb5396061529c87
5
5
  SHA512:
6
- metadata.gz: 71628a47f7a41d1bc3d5444e029d36c3b1698eee93328ec1b7bcefc4c5c9bdcb60a0a892c9db851ba5c374e1b4172701f1cb22e0da701bf8e786c99fd3946db8
7
- data.tar.gz: d9eb89cafb55e004e3b3d039cea5ed3471a21c24e4dac3c4a350254c1248eb6257004a82af48aac9a6071bcf1bc860c680351760649b5966525146394c19fef3
6
+ metadata.gz: b11057d8d58b54ec1c2450844b97991280291c8e71bc8cfc9d094e4b41a25619faa673937fe0571b189c37c052a65e7bf00b8052c4e2b1295a39f198b74df4a9
7
+ data.tar.gz: 743a2a8d8f7ffc6608b1350cf56fde6ad4c8456155ef5f6f09e6a52f4445d88eec9db3ecb7c21cad97cf7aedd5db13d71171c3296c08c688d836c559346c53bc
data/.gitignore CHANGED
@@ -8,3 +8,6 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  output.csv
11
+ .vim.custom
12
+ t
13
+ gn_crossmap-*.gem
data/CHANGELOG.md CHANGED
@@ -1,15 +1,17 @@
1
- gn_crossmap CHANGELOG
2
- =====================
3
- 0.1.8
4
- -----
1
+ # ``gn_crossmap`` CHANGELOG
2
+
3
+ ## 0.2.0
4
+
5
+ * @dimus - #17 - change in API - use of STDIN and STDOUT for input and output
6
+
7
+ ## 0.1.8
5
8
 
6
9
  * @dimus - #14 - show synonym status
7
10
 
8
- 0.1.7
9
- -----
11
+ ## 0.1.7
10
12
 
11
13
  * @dimus - #13 - make it possible wo ingest field names like dwc:scientificName
12
- or http://example.org/term/sommeTerm
14
+ or ``http://example.org/term/sommeTerm``
13
15
 
14
16
  * @dimus - #12 - fix a bug which prevents so salvage most of the names from a
15
17
  failing batch (if a batch of names has one name that breaks
@@ -22,13 +24,11 @@ gn_crossmap CHANGELOG
22
24
 
23
25
  * @dimus - #9 - fixed another problem with rank inffering
24
26
 
25
- 0.1.6
26
- -----
27
+ ## 0.1.6
27
28
 
28
29
  * @dimus - #8 - catching "No Method Found" exception at inferring rank
29
30
 
30
- 0.1.5
31
- -----
31
+ ## 0.1.5
32
32
 
33
33
  * @dimus - #5 - All original fields are now preserved in the output file.
34
34
 
@@ -42,25 +42,23 @@ gn_crossmap CHANGELOG
42
42
 
43
43
  * @dimus - #1 Bug - Add missing rest-client gem
44
44
 
45
- 0.1.4
46
- -----
47
- - [Dmitry Mozzherin][dimus] - Bug fixes
45
+ ## 0.1.4
46
+
47
+ * @dimus - Bug fixes
48
+
49
+ ## 0.1.3
50
+
51
+ * @dimus - README and gemspec changes
52
+
53
+ ## 0.1.2
48
54
 
49
- 0.1.3
50
- -----
51
- - [Dmitry Mozzherin][dimus] - README and gemspec changes
55
+ * @dimus - clean up docs, and remove junk code
52
56
 
53
- 0.1.2
54
- -----
55
- - [Dmitry Mozzherin][dimus] - clean up docs, and remove junk code
57
+ ## 0.1.1
56
58
 
57
- 0.1.1
58
- -----
59
- - [Dmitry Mozzherin][dimus] - first official release -- works for full names
59
+ * @dimus - first official release -- works for full names
60
60
  and names entered in rank fields
61
61
 
62
- 0.1.0
63
- -----
64
- - [Dmitry Mozzherin][dimus] - initial version
62
+ ## 0.1.0
65
63
 
66
- [dimus]: https://github.com/dimus
64
+ * @dimus - initial version
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015 Marine Biological Laboratory
1
+ Copyright (c) 2015-2016 Marine Biological Laboratory
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
@@ -1,9 +1,10 @@
1
1
  # GnCrossmap
2
- [![Gem Version][gem_badge]][gem_link]
3
- [![Continuous Integration Status][ci_badge]][ci_link]
4
- [![Coverage Status][cov_badge]][cov_link]
5
- [![CodeClimate][code_badge]][code_link]
6
- [![Dependency Status][dep_badge]][dep_link]
2
+
3
+ [![Gem Version][gem-badge]][gem-link]
4
+ [![Continuous Integration Status][ci-badge]][ci-link]
5
+ [![Coverage Status][cov-badge]][cov-link]
6
+ [![CodeClimate][code-badge]][code-link]
7
+ [![Dependency Status][dep-badge]][dep-link]
7
8
 
8
9
  This gem crossmaps a checklist of scientific names to names from a data source
9
10
  in [GN Resolver][resolver].
@@ -12,13 +13,11 @@ Checklist has to be in a CSV format.
12
13
 
13
14
  [Issues on waffle.io][waffle]
14
15
 
15
- Compatibility
16
- -------------
16
+ ## Compatibility
17
17
 
18
18
  This gem is compatible with Ruby versions higher or equal to 2.1.0
19
19
 
20
- Installation
21
- ------------
20
+ ## Installation
22
21
 
23
22
  Add this line to your application's Gemfile:
24
23
 
@@ -28,25 +27,27 @@ gem 'gn_crossmap'
28
27
 
29
28
  And then execute:
30
29
 
31
- $ bundle
30
+ bundle
32
31
 
33
32
  Or install it yourself as:
34
33
 
35
- $ gem install gn_crossmap
34
+ gem install gn_crossmap
36
35
 
37
- Usage
38
- -----
36
+ ## Usage
39
37
 
40
38
  ### Usage from command line
41
39
 
42
40
  # to see help
43
- $ crossmap --help
41
+ crossmap --help
44
42
 
45
43
  # to compare with default source (Catalogue of Life)
46
- $ crossmap -i my_list.csv -o my_list_col.csv
44
+ crossmap -i my_list.csv -o my_list_col.csv
47
45
 
48
46
  # to compare with other source (Index Fungorum in this example)
49
- $ crossmap -i my_list.csv -o my_list_if.csv -d 5
47
+ crossmap -i my_list.csv -o my_list_if.csv -d 5
48
+
49
+ # to use standard intput and/or output
50
+ cat my_list.csv | crossmap -i - -o - > output
50
51
 
51
52
  ### Usage as Ruby Library
52
53
 
@@ -59,7 +60,6 @@ GnCrossmap.logger = MyCustomLogger.new
59
60
  GnCrossmap.run("path/to/input.csv", "path/to/output.csv", 5)
60
61
  ```
61
62
 
62
-
63
63
  ### Input file format
64
64
 
65
65
  - Comma Separated File with names of fields in first row.
@@ -108,7 +108,6 @@ GnCrossmap.run("path/to/input.csv", "path/to/output.csv", 5)
108
108
  TaxonId;kingdom;subkingdom;phylum;subphylum;superclass;class;subclass;cohort;superorder;order;suborder;infraorder;superfamily;family;subfamily;tribe;subtribe;genus;subgenus;section;species;subspecies;variety;form;ScientificNameAuthorship
109
109
  1;Animalia;;Tardigrada;;;Eutardigrada;;;;Parachela;;;Macrobiotoidea;Macrobiotidae;;;;Macrobiotus;;;harmsworthi;obscurus;;;Dastych, 1985
110
110
 
111
-
112
111
  TaxonId|kingdom|subkingdom|phylum|subphylum|superclass|class|subclass|cohort|superorder|order|suborder|infraorder|superfamily|family|subfamily|tribe|subtribe|genus|subgenus|section|species|subspecies|variety|form|ScientificNameAuthorship
113
112
  -------|-------|----------|------|---------|----------|-----|--------|------|----------|-----|--------|----------|-----------|------|---------|-----|--------|-----|--------|-------|-------|----------|-------|----|------------------------
114
113
  136021|Animalia||Pogonophora||||||||||||||||||||||
@@ -145,8 +144,7 @@ The output fomat returns 7 possible types of matches:
145
144
  6. **Exact match by genus part of a canonical form** - The genus part of the canonical form of the species name returned an exact match
146
145
  7. **[Blank]** - No match
147
146
 
148
- Development
149
- -----------
147
+ ## Development
150
148
 
151
149
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
152
150
  `bin/console` for an interactive prompt that will allow you to experiment.
@@ -157,33 +155,31 @@ release a new version, update the version number in `version.rb`, and then run
157
155
  commits and tags, and push the `.gem` file to
158
156
  [rubygems.org][rubygems]
159
157
 
160
- Contributing
161
- ------------
158
+ ## Contributing
162
159
 
163
- 1. Fork it ( https://github.com/[my-github-username]/gn_crossmap/fork )
160
+ 1. Fork it ( ``https://github.com/[my-github-username]/gn_crossmap/fork`` )
164
161
  2. Create your feature branch (`git checkout -b my-new-feature`)
165
162
  3. Commit your changes (`git commit -am 'Add some feature'`)
166
163
  4. Push to the branch (`git push origin my-new-feature`)
167
164
  5. Create a new Pull Request
168
165
 
169
- Copyright
170
- ---------
166
+ ## Copyright
171
167
 
172
168
  Author -- [Dmitry Mozzherin][dimus]
173
169
 
174
- Copyright (c) 2015 [Marine Biological Laboratory][mbl].
170
+ Copyright (c) 2015-2016 [Marine Biological Laboratory][mbl].
175
171
  See [LICENSE][license] for details.
176
172
 
177
- [gem_badge]: https://badge.fury.io/rb/gn_crossmap.svg
178
- [gem_link]: http://badge.fury.io/rb/gn_crossmap
179
- [ci_badge]: https://secure.travis-ci.org/GlobalNamesArchitecture/gn_crossmap.svg
180
- [ci_link]: http://travis-ci.org/GlobalNamesArchitecture/gn_crossmap
181
- [cov_badge]: https://coveralls.io/repos/GlobalNamesArchitecture/gn_crossmap/badge.svg?branch=master
182
- [cov_link]: https://coveralls.io/r/GlobalNamesArchitecture/gn_crossmap?branch=master
183
- [code_badge]: https://codeclimate.com/github/GlobalNamesArchitecture/gn_crossmap/badges/gpa.svg
184
- [code_link]: https://codeclimate.com/github/GlobalNamesArchitecture/gn_crossmap
185
- [dep_badge]: https://gemnasium.com/GlobalNamesArchitecture/gn_crossmap.png
186
- [dep_link]: https://gemnasium.com/GlobalNamesArchitecture/gn_crossmap
173
+ [gem-badge]: https://badge.fury.io/rb/gn_crossmap.svg
174
+ [gem-link]: http://badge.fury.io/rb/gn_crossmap
175
+ [ci-badge]: https://secure.travis-ci.org/GlobalNamesArchitecture/gn_crossmap.svg
176
+ [ci-link]: http://travis-ci.org/GlobalNamesArchitecture/gn_crossmap
177
+ [cov-badge]: https://coveralls.io/repos/GlobalNamesArchitecture/gn_crossmap/badge.svg?branch=master
178
+ [cov-link]: https://coveralls.io/r/GlobalNamesArchitecture/gn_crossmap?branch=master
179
+ [code-badge]: https://codeclimate.com/github/GlobalNamesArchitecture/gn_crossmap/badges/gpa.svg
180
+ [code-link]: https://codeclimate.com/github/GlobalNamesArchitecture/gn_crossmap
181
+ [dep-badge]: https://gemnasium.com/GlobalNamesArchitecture/gn_crossmap.png
182
+ [dep-link]: https://gemnasium.com/GlobalNamesArchitecture/gn_crossmap
187
183
  [resolver]: http://resolver.globalnames.org/data_sources
188
184
  [rubygems]: https://rubygems.org
189
185
  [dimus]: https://github.com/dimus
data/exe/crossmap CHANGED
@@ -5,20 +5,23 @@ require "gn_crossmap"
5
5
  puts "This program requires Ruby >= v. 2.1.0" if RUBY_VERSION < "2.1.0"
6
6
 
7
7
  CATALOGUE_OF_LIFE = 1
8
- OUTPUT = "output.csv"
8
+ OUTPUT = "output.csv".freeze
9
9
  opts = Trollop.options do
10
10
  banner "Compares a list of scientific names to scientific names from a " \
11
11
  "data source from Global Names Resolver\n\n " \
12
- "Usage:\n crossmap [options]\n\noptions:"
12
+ "Usage:\n crossmap [options]\n\noptions:" \
13
+ "\n\n ('-i -' reads from STDIN; '-o -' writes to STDOUT)\n\n"
13
14
 
14
- opt(:input, "Path to intput file", type: :string)
15
+ opt(:input, "Path to input file", type: :string)
15
16
  opt(:output, "Path to output file", default: OUTPUT)
16
17
  opt(:data_source_id, "Data source id from GN Resolver",
17
18
  default: CATALOGUE_OF_LIFE)
18
19
  end
19
20
 
20
21
  Trollop.die :input, "must be set" if opts[:input].nil?
21
- Trollop.die :input, "file must exist" unless File.exist?(opts[:input])
22
+ unless File.exist?(opts[:input]) || opts[:input] == "-"
23
+ Trollop.die :input, "file must exist"
24
+ end
22
25
 
23
26
  begin
24
27
  GnCrossmap.run(opts[:input], opts[:output], opts[:data_source_id])
data/gn_crossmap.gemspec CHANGED
@@ -19,15 +19,16 @@ Gem::Specification.new do |gem|
19
19
  "data sources from http://resolver.globalnames.org"
20
20
  gem.homepage = "https://github.com/GlobalNamesArchitecture/gn_crossmap"
21
21
 
22
- gem.files = `git ls-files -z`.split("\x0").
23
- reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ gem.files = `git ls-files -z`.
23
+ split("\x0").
24
+ reject { |f| f.match(%r{^(test|spec|features)/}) }
24
25
  gem.bindir = "exe"
25
26
  gem.executables = gem.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
27
  gem.require_paths = ["lib"]
27
28
 
28
29
  gem.add_dependency "trollop", "~> 2.1"
29
30
  gem.add_dependency "biodiversity", "~> 3.1"
30
- gem.add_dependency "rest-client", "~> 1.8"
31
+ gem.add_dependency "rest-client", "~> 2.0"
31
32
  gem.add_dependency "logger-colors", "~> 1.0"
32
33
 
33
34
  gem.add_development_dependency "bundler", "~> 1.7"
data/lib/gn_crossmap.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "csv"
2
2
  require "rest_client"
3
+ require "tempfile"
3
4
  require "logger"
4
5
  require "logger/colors"
5
6
  require "biodiversity"
@@ -15,23 +16,61 @@ require "gn_crossmap/result_processor"
15
16
 
16
17
  # Namespace module for crossmapping checklists wth GN sources
17
18
  module GnCrossmap
19
+ INPUT_MODE = "r:utf-8".freeze
20
+ OUTPUT_MODE = "w:utf-8".freeze
21
+
18
22
  class << self
19
23
  attr_writer :logger
20
24
 
21
25
  def run(input, output, data_source_id)
22
- reader = Reader.new(input)
26
+ input_io, output_io = io(input, output)
27
+ reader = Reader.new(input_io, input_name(input))
23
28
  data = reader.read
24
- writer = Writer.new(output, reader.original_fields)
29
+ writer = Writer.new(output_io, reader.original_fields,
30
+ output_name(output))
25
31
  Resolver.new(writer, data_source_id).resolve(data)
26
32
  output
27
33
  end
28
34
 
29
35
  def logger
30
- @logger ||= Logger.new($stdout)
36
+ @logger ||= Logger.new(STDERR)
31
37
  end
32
38
 
33
39
  def log(message)
34
40
  logger.info(message)
35
41
  end
42
+
43
+ private
44
+
45
+ def io(input, output)
46
+ io_in = iogen(input, INPUT_MODE)
47
+ io_out = iogen(output, OUTPUT_MODE)
48
+ [io_in, io_out]
49
+ end
50
+
51
+ def iogen(arg, mode)
52
+ if arg.nil? || arg == "-"
53
+ mode == INPUT_MODE ? stdin : STDOUT
54
+ else
55
+ fd_i = IO.sysopen(arg, mode)
56
+ IO.new(fd_i, mode)
57
+ end
58
+ end
59
+
60
+ def stdin
61
+ temp = Tempfile.open("stdin")
62
+ return STDIN if File.file?(STDIN)
63
+ IO.copy_stream(STDIN, temp)
64
+ fd_i = IO.sysopen(temp, INPUT_MODE)
65
+ IO.new(fd_i, INPUT_MODE)
66
+ end
67
+
68
+ def input_name(input)
69
+ input.nil? || input == "-" ? "STDIN" : input
70
+ end
71
+
72
+ def output_name(output)
73
+ output.nil? || output == "-" ? "STDOUT" : output
74
+ end
36
75
  end
37
76
  end
@@ -20,11 +20,11 @@ module GnCrossmap
20
20
  @fields = @row.map { |f| prepare_field(f) }
21
21
  @collector = collector_factory
22
22
  err = "taxonID must be present in the csv header"
23
- fail GnCrossmapError, err unless @fields.include?(:taxonid)
23
+ raise GnCrossmapError, err unless @fields.include?(:taxonid)
24
24
  end
25
25
 
26
26
  def prepare_field(field)
27
- field = field.to_s.gsub(":", "/")
27
+ field = field.to_s.tr(":", "/")
28
28
  field.split("/")[-1].strip.downcase.to_sym
29
29
  end
30
30
 
@@ -4,14 +4,14 @@ module GnCrossmap
4
4
  RANKS = %i(kingdom subkingdom phylum subphylum superclass class
5
5
  subclass cohort superorder order suborder infraorder superfamily
6
6
  family subfamily tribe subtribe genus subgenus section species
7
- subspecies variety form)
8
- SPECIES_RANKS = %i(genus species subspecies variety form)
7
+ subspecies variety form).freeze
8
+ SPECIES_RANKS = %i(genus species subspecies variety form).freeze
9
9
 
10
10
  def initialize(fields)
11
11
  @fields = fields
12
12
  err = "At least some of these fields must exist in " \
13
13
  "the CSV header: '#{RANKS.join('\', \'')}'"
14
- fail GnCrossmapError, err if (RANKS - @fields).size == RANKS.size
14
+ raise GnCrossmapError, err if (RANKS - @fields).size == RANKS.size
15
15
  end
16
16
 
17
17
  def id_name_rank(row)
@@ -29,7 +29,7 @@ module GnCrossmap
29
29
 
30
30
  def find_rank
31
31
  name_rank = nil
32
- RANKS.reverse_each do |rank|
32
+ RANKS.reverse_each do |rank|
33
33
  next if @row[rank].to_s.strip == ""
34
34
  name_rank = rank
35
35
  break
@@ -4,32 +4,35 @@ module GnCrossmap
4
4
  class Reader
5
5
  attr_reader :original_fields
6
6
 
7
- def initialize(csv_path)
8
- @csv_file = csv_path
7
+ def initialize(csv_io, input_name)
8
+ @csv_io = csv_io
9
9
  @col_sep = col_sep
10
10
  @original_fields = nil
11
+ @input_name = input_name
11
12
  end
12
13
 
13
14
  def read
14
- GnCrossmap.log("Read input file '#{File.basename(@csv_file)}'")
15
+ GnCrossmap.log("Read input from #{@input_name}")
15
16
  parse_input
16
17
  end
17
18
 
18
19
  private
19
20
 
20
21
  def col_sep
21
- line = open(@csv_file, &:readline)
22
+ line = @csv_io.first
23
+ @csv_io.rewind
22
24
  [";", ",", "\t"].map { |s| [line.count(s), s] }.sort.last.last
23
25
  end
24
26
 
25
27
  def parse_input
26
28
  dc = Collector.new
27
- CSV.open(@csv_file, col_sep: @col_sep).each_with_index do |row, i|
29
+ csv = CSV.new(@csv_io, col_sep: col_sep)
30
+ csv.each_with_index do |row, i|
28
31
  @original_fields = row.dup if @original_fields.nil?
29
32
  i += 1
30
- GnCrossmap.log("Ingesting #{i}th csv row") if i % 10_000 == 0
33
+ GnCrossmap.log("Ingesting #{i}th csv row") if (i % 10_000).zero?
31
34
  dc.process_row(row)
32
- end
35
+ end && @csv_io.close
33
36
  dc.data
34
37
  end
35
38
  end
@@ -1,7 +1,7 @@
1
1
  module GnCrossmap
2
2
  # Sends data to GN Resolver and collects results
3
3
  class Resolver
4
- URL = "http://resolver.globalnames.org/name_resolvers.json"
4
+ URL = "http://resolver.globalnames.org/name_resolvers.json".freeze
5
5
 
6
6
  def initialize(writer, data_source_id)
7
7
  @processor = GnCrossmap::ResultProcessor.new(writer)
@@ -9,7 +9,7 @@ module GnCrossmap
9
9
  4 => "Partial canonical form match",
10
10
  5 => "Partial canonical form fuzzy match",
11
11
  6 => "Genus part match"
12
- }
12
+ }.freeze
13
13
 
14
14
  attr_reader :input, :writer
15
15
 
@@ -12,7 +12,7 @@ module GnCrossmap
12
12
  name = find_name
13
13
  rank = @row[:taxonrank]
14
14
  rank = parse_rank if rank.nil?
15
- (id && name) ? { id: id, name: name, rank: rank } : nil
15
+ id && name ? { id: id, name: name, rank: rank } : nil
16
16
  end
17
17
 
18
18
  private
@@ -1,6 +1,6 @@
1
1
  # Namespace module for crossmapping checklists to GN sources
2
2
  module GnCrossmap
3
- VERSION = "0.1.8"
3
+ VERSION = "0.2.0".freeze
4
4
 
5
5
  def self.version
6
6
  VERSION
@@ -1,12 +1,13 @@
1
1
  module GnCrossmap
2
2
  # Saves output from GN Resolver to disk
3
3
  class Writer
4
- def initialize(output_path, original_fields)
5
- @path = output_path
4
+ def initialize(output_io, original_fields, output_name)
5
+ @output_io = output_io
6
6
  @output_fields = output_fields(original_fields)
7
- @output = CSV.open(@path, "w:utf-8")
7
+ @output = CSV.new(@output_io)
8
8
  @output << @output_fields
9
- GnCrossmap.log("Open output file '#{@path}'")
9
+ @output_name = output_name
10
+ GnCrossmap.log("Open output to #{@output_name}")
10
11
  end
11
12
 
12
13
  def write(record)
@@ -14,8 +15,8 @@ module GnCrossmap
14
15
  end
15
16
 
16
17
  def close
17
- GnCrossmap.log("Close output file '#{@path}'")
18
- @output.close
18
+ GnCrossmap.log("Close #{@output_name}")
19
+ @output_io.close
19
20
  end
20
21
 
21
22
  private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gn_crossmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Mozzherin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-20 00:00:00.000000000 Z
11
+ date: 2016-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trollop
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.8'
47
+ version: '2.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.8'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: logger-colors
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -203,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  version: '0'
204
204
  requirements: []
205
205
  rubyforge_project:
206
- rubygems_version: 2.4.5
206
+ rubygems_version: 2.5.1
207
207
  signing_key:
208
208
  specification_version: 4
209
209
  summary: Crossmaps a list of scientific names to names from a data source in GN Index