gn_crossmap 0.1.8 → 0.2.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.
- 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
|