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 +4 -4
- data/.gitignore +3 -0
- data/CHANGELOG.md +25 -27
- data/LICENSE +1 -1
- data/README.md +32 -36
- data/exe/crossmap +7 -4
- data/gn_crossmap.gemspec +4 -3
- data/lib/gn_crossmap.rb +42 -3
- data/lib/gn_crossmap/collector.rb +2 -2
- data/lib/gn_crossmap/column_collector.rb +4 -4
- data/lib/gn_crossmap/reader.rb +10 -7
- data/lib/gn_crossmap/resolver.rb +1 -1
- data/lib/gn_crossmap/result_processor.rb +1 -1
- data/lib/gn_crossmap/sci_name_collector.rb +1 -1
- data/lib/gn_crossmap/version.rb +1 -1
- data/lib/gn_crossmap/writer.rb +7 -6
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1579ecd4d04e966c241d7aa9dab3723b180d056
|
4
|
+
data.tar.gz: 6454a5f074dc187af6d179556bb5396061529c87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b11057d8d58b54ec1c2450844b97991280291c8e71bc8cfc9d094e4b41a25619faa673937fe0571b189c37c052a65e7bf00b8052c4e2b1295a39f198b74df4a9
|
7
|
+
data.tar.gz: 743a2a8d8f7ffc6608b1350cf56fde6ad4c8456155ef5f6f09e6a52f4445d88eec9db3ecb7c21cad97cf7aedd5db13d71171c3296c08c688d836c559346c53bc
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
gn_crossmap CHANGELOG
|
2
|
-
|
3
|
-
0.
|
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
|
-
|
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
|
-
|
50
|
-
-----
|
51
|
-
- [Dmitry Mozzherin][dimus] - README and gemspec changes
|
55
|
+
* @dimus - clean up docs, and remove junk code
|
52
56
|
|
53
|
-
0.1.
|
54
|
-
-----
|
55
|
-
- [Dmitry Mozzherin][dimus] - clean up docs, and remove junk code
|
57
|
+
## 0.1.1
|
56
58
|
|
57
|
-
|
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
|
-
|
64
|
+
* @dimus - initial version
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# GnCrossmap
|
2
|
-
|
3
|
-
[![
|
4
|
-
[![
|
5
|
-
[![
|
6
|
-
[![
|
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
|
-
|
30
|
+
bundle
|
32
31
|
|
33
32
|
Or install it yourself as:
|
34
33
|
|
35
|
-
|
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
|
-
|
41
|
+
crossmap --help
|
44
42
|
|
45
43
|
# to compare with default source (Catalogue of Life)
|
46
|
-
|
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
|
-
|
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
|
-
[
|
178
|
-
[
|
179
|
-
[
|
180
|
-
[
|
181
|
-
[
|
182
|
-
[
|
183
|
-
[
|
184
|
-
[
|
185
|
-
[
|
186
|
-
[
|
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
|
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
|
-
|
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`.
|
23
|
-
|
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", "~>
|
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
|
-
|
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(
|
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(
|
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
|
-
|
23
|
+
raise GnCrossmapError, err unless @fields.include?(:taxonid)
|
24
24
|
end
|
25
25
|
|
26
26
|
def prepare_field(field)
|
27
|
-
field = field.to_s.
|
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
|
-
|
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
|
32
|
+
RANKS.reverse_each do |rank|
|
33
33
|
next if @row[rank].to_s.strip == ""
|
34
34
|
name_rank = rank
|
35
35
|
break
|
data/lib/gn_crossmap/reader.rb
CHANGED
@@ -4,32 +4,35 @@ module GnCrossmap
|
|
4
4
|
class Reader
|
5
5
|
attr_reader :original_fields
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
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
|
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 =
|
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.
|
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
|
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
|
data/lib/gn_crossmap/resolver.rb
CHANGED
@@ -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)
|
data/lib/gn_crossmap/version.rb
CHANGED
data/lib/gn_crossmap/writer.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module GnCrossmap
|
2
2
|
# Saves output from GN Resolver to disk
|
3
3
|
class Writer
|
4
|
-
def initialize(
|
5
|
-
@
|
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.
|
7
|
+
@output = CSV.new(@output_io)
|
8
8
|
@output << @output_fields
|
9
|
-
|
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
|
18
|
-
@
|
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.
|
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:
|
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: '
|
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: '
|
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.
|
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
|