gn_list_resolver 3.0.3.4 → 3.2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -2
- data/CHANGELOG.md +37 -0
- data/README.md +14 -6
- data/Rakefile +5 -0
- data/exe/list_resolver +3 -1
- data/gn_list_resolver.gemspec +7 -9
- data/lib/gn_list_resolver.rb +9 -3
- data/lib/gn_list_resolver/collector.rb +2 -2
- data/lib/gn_list_resolver/graphql.rb +2 -1
- data/lib/gn_list_resolver/reader.rb +7 -4
- data/lib/gn_list_resolver/resolver.rb +7 -11
- data/lib/gn_list_resolver/result_processor.rb +55 -23
- data/lib/gn_list_resolver/version.rb +1 -1
- data/lib/gn_list_resolver/writer.rb +7 -4
- metadata +29 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b30d2905481948448c40c18922587551a228819
|
4
|
+
data.tar.gz: 3ff55484ce12de44275814909941c3ba9b63ce03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a82ffc469b139df0cd3ca8444a74a9fc73a16c8334153e9cd48d28882c9509a2ffdb837a46f9d76a564df282d10760e2be937802d10655ef6c892c7d0431aa11
|
7
|
+
data.tar.gz: 78e74f0263368c2d339151162583e35c1fd3f9facdbfba4cb73cb5333de994a375951ca3d0a03d766d07a1feb9c1f39ae74f5d80dd9a369d060f067fb822a961
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,42 @@
|
|
1
1
|
# ``gn_list_resolver`` CHANGELOG
|
2
2
|
|
3
|
+
## 3.2.0.1
|
4
|
+
|
5
|
+
@dimus, @alexander-myltsev - sync with `gn_crossmap`'s 3.2.0, current name is
|
6
|
+
still a bit broken
|
7
|
+
|
8
|
+
## 3.2.0
|
9
|
+
|
10
|
+
* @dimus - Add a column `matchSize` with number of matches for each name
|
11
|
+
|
12
|
+
## 3.1.5
|
13
|
+
|
14
|
+
* @dimus - Fix number of columns in the output when there is no taxon_id given
|
15
|
+
and skip_original flag is set in options
|
16
|
+
|
17
|
+
## 3.1.4
|
18
|
+
|
19
|
+
* @dimus - test typo
|
20
|
+
|
21
|
+
## 3.1.3
|
22
|
+
|
23
|
+
* @dimus - Fix formatting bug for empty results, remove BOM char from headers
|
24
|
+
|
25
|
+
## 3.1.2
|
26
|
+
|
27
|
+
* @dimus - Fixes #37 tab is now default if separator is not found
|
28
|
+
|
29
|
+
## 3.1.1
|
30
|
+
|
31
|
+
* @dimus - Fixes #36 move edit distance close to canonical forms in output
|
32
|
+
|
33
|
+
## 3.1.0
|
34
|
+
|
35
|
+
* @dimus - Fixes #34 add canonical form input
|
36
|
+
|
37
|
+
* @dimus - Fixes #35 optionally returns classification path
|
38
|
+
|
39
|
+
|
3
40
|
## 3.0.3.4
|
4
41
|
|
5
42
|
@alexander-myltsev - make compatible with API changes
|
data/README.md
CHANGED
@@ -59,6 +59,9 @@ cat my_list.csv | crossmap -i - -o - > output
|
|
59
59
|
# to keep only taxonID (if given) from original input
|
60
60
|
# no original fields will be kept without taxonID
|
61
61
|
cat my_list.csv | crossmap -i my_list.csv -s
|
62
|
+
|
63
|
+
# to show classification from the source
|
64
|
+
cat my_list.csv | crossmap -i my_list.csv -w
|
62
65
|
```
|
63
66
|
|
64
67
|
### Usage as Ruby Library (API description)
|
@@ -102,6 +105,9 @@ instead of the headers supplied with the file
|
|
102
105
|
|
103
106
|
#### `GnListResolver.logger=`
|
104
107
|
|
108
|
+
``with_classification``
|
109
|
+
: (boolean) if true, adds classification path to the output
|
110
|
+
|
105
111
|
Allows to set logger to a custom logger (default is `STDERR`)
|
106
112
|
|
107
113
|
#### Usage Example
|
@@ -248,15 +254,17 @@ More examples can be found in [spec/files][files] directory
|
|
248
254
|
|
249
255
|
Field | Description
|
250
256
|
---------------------|-----------------------------------------------------------
|
251
|
-
|
252
|
-
|
253
|
-
|
257
|
+
classification | classification path of the data source (if available)
|
258
|
+
editDistance | for fuzzy-matching -- how many characters differ between checklist and data source name
|
259
|
+
matchSize | number of returned matches for a name
|
260
|
+
matchType | what kind of match it is
|
254
261
|
matchedCanonicalForm | canonical form of the matched name
|
255
|
-
rank | rank from the source (if it was given/inferred)
|
256
262
|
matchedRank | corresponding rank from the data source
|
257
|
-
|
258
|
-
|
263
|
+
matchedScientificName| name matched from the GN Reolver data source
|
264
|
+
rank | rank from the source (if it was given/inferred)
|
265
|
+
scientificName | name from the checklist
|
259
266
|
score | heuristic score from 0 to 1 where 1 is a good match, 0.5 match requires further human investigation
|
267
|
+
taxonID | original ID attached to a name in the checklist
|
260
268
|
|
261
269
|
#### Types of Matches
|
262
270
|
|
data/Rakefile
CHANGED
data/exe/list_resolver
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
require "trollop"
|
5
5
|
require "gn_list_resolver"
|
6
6
|
|
7
|
-
puts "This program requires Ruby >= v. 2.1
|
7
|
+
puts "This program requires Ruby >= v. 2.4.1" if RUBY_VERSION < "2.4.1"
|
8
8
|
|
9
9
|
CATALOGUE_OF_LIFE = 1
|
10
10
|
OUTPUT = "output.csv"
|
@@ -20,6 +20,8 @@ opts = Trollop.options do
|
|
20
20
|
default: CATALOGUE_OF_LIFE)
|
21
21
|
opt(:skip_original, "If given, only 'taxonID' is shown " \
|
22
22
|
"from the original input", type: :boolean)
|
23
|
+
opt(:with_classification, "If given, returns classification path of " \
|
24
|
+
"matched names", type: :boolean)
|
23
25
|
opt(:debug, "If given, prints statistics of name resolution to STDOUT",
|
24
26
|
short: "D", type: :boolean)
|
25
27
|
end
|
data/gn_list_resolver.gemspec
CHANGED
@@ -31,21 +31,19 @@ Gem::Specification.new do |gem|
|
|
31
31
|
gem.executables = gem.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
32
32
|
gem.require_paths = ["lib"]
|
33
33
|
|
34
|
-
gem.add_dependency "trollop", "~> 2.1"
|
35
34
|
gem.add_dependency "biodiversity", "~> 3.1"
|
36
|
-
gem.add_dependency "rest-client", "~> 2.0"
|
37
|
-
gem.add_dependency "logger-colors", "~> 1.0"
|
38
|
-
gem.add_dependency "graphql-client", "~> 0.11.3"
|
39
35
|
gem.add_dependency "gn_uuid", "~> 0.5"
|
36
|
+
gem.add_dependency "graphql-client", "~> 0.11.3"
|
37
|
+
gem.add_dependency "logger-colors", "~> 1.0"
|
38
|
+
gem.add_dependency "rest-client", "~> 2.0"
|
39
|
+
gem.add_dependency "trollop", "~> 2.1"
|
40
40
|
|
41
41
|
gem.add_development_dependency "bundler", "~> 1.7"
|
42
|
-
gem.add_development_dependency "
|
42
|
+
gem.add_development_dependency "byebug", "~> 9.0"
|
43
|
+
gem.add_development_dependency "coveralls", "~> 0.8"
|
44
|
+
gem.add_development_dependency "rake", "~> 12.0"
|
43
45
|
gem.add_development_dependency "rspec", "~> 3.2"
|
44
46
|
gem.add_development_dependency "rubocop", "~> 0.49"
|
45
|
-
gem.add_development_dependency "coveralls", "~> 0.8"
|
46
|
-
gem.add_development_dependency "byebug", "~> 9.0"
|
47
|
-
gem.add_development_dependency "guard", "~> 2.14"
|
48
|
-
gem.add_development_dependency "guard-rspec", "~> 4.7"
|
49
47
|
end
|
50
48
|
|
51
49
|
# rubocop:enable Metrics/BlockLength:
|
data/lib/gn_list_resolver.rb
CHANGED
@@ -54,17 +54,23 @@ module GnListResolver
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def find_id(row, name)
|
57
|
-
row.key?(:taxonid)
|
57
|
+
if row.key?(:taxonid) && row[:taxonid]
|
58
|
+
row[:taxonid].to_s.strip
|
59
|
+
else
|
60
|
+
GnUUID.uuid(name.to_s)
|
61
|
+
end
|
58
62
|
end
|
59
63
|
|
60
64
|
private
|
61
65
|
|
62
66
|
def create_resolver(writer, opts)
|
63
|
-
Resolver.new(writer, opts.data_source_id,
|
67
|
+
Resolver.new(writer, opts.data_source_id,
|
68
|
+
opts.stats, opts.with_classification)
|
64
69
|
end
|
65
70
|
|
66
71
|
def create_writer(reader, output_io, opts)
|
67
|
-
Writer.new(output_io, reader.original_fields,
|
72
|
+
Writer.new(output_io, reader.original_fields,
|
73
|
+
output_name(opts.output), opts.with_classification)
|
68
74
|
end
|
69
75
|
|
70
76
|
def create_reader(input_io, opts)
|
@@ -26,7 +26,7 @@ module GnListResolver
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def prepare_field(field)
|
29
|
-
field = field.to_s.tr(":", "/")
|
29
|
+
field = field.to_s.tr(":", "/").delete("\u{feff}")
|
30
30
|
return :none if field == ""
|
31
31
|
field.split("/")[-1].strip.downcase.to_sym
|
32
32
|
end
|
@@ -41,7 +41,7 @@ module GnListResolver
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def prepare_original
|
44
|
-
@skip_original ? [@row_hash[:taxonid]] : @row.map(&:last)
|
44
|
+
@skip_original ? [@row_hash[:taxonid]].compact : @row.map(&:last)
|
45
45
|
end
|
46
46
|
|
47
47
|
def collector_factory
|
@@ -17,9 +17,10 @@ module GnListResolver
|
|
17
17
|
results {
|
18
18
|
name { value }
|
19
19
|
canonicalName { value }
|
20
|
+
acceptedName { name { value } }
|
20
21
|
synonym
|
21
22
|
matchType { kind score editDistance }
|
22
|
-
taxonId classification { pathRanks }
|
23
|
+
taxonId classification { path pathRanks }
|
23
24
|
score { value parsingQuality }
|
24
25
|
}
|
25
26
|
}
|
@@ -4,13 +4,13 @@ module GnListResolver
|
|
4
4
|
# Reads supplied csv file and creates ruby structure to compare
|
5
5
|
# with a Global Names Resolver source
|
6
6
|
class Reader
|
7
|
-
attr_reader :original_fields
|
7
|
+
attr_reader :original_fields, :col_sep
|
8
8
|
|
9
9
|
def initialize(csv_io, input_name, skip_original, alt_headers, stats)
|
10
10
|
@stats = stats
|
11
11
|
@alt_headers = alt_headers
|
12
12
|
@csv_io = csv_io
|
13
|
-
@col_sep =
|
13
|
+
@col_sep = detect_col_sep
|
14
14
|
@quote_char = quote_char(@col_sep)
|
15
15
|
@original_fields = nil
|
16
16
|
@input_name = input_name
|
@@ -26,11 +26,14 @@ module GnListResolver
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
-
def
|
29
|
+
def detect_col_sep
|
30
30
|
line = @csv_io.first
|
31
31
|
@stats.stats[:total_records] = @csv_io.readlines.size
|
32
32
|
@csv_io.rewind
|
33
|
-
[";", ",", "\t"].map
|
33
|
+
data = [[";", 1], [",", 0], ["\t", 2]].map do |s, weight|
|
34
|
+
[line.count(s), weight, s]
|
35
|
+
end
|
36
|
+
data.sort.last.last
|
34
37
|
end
|
35
38
|
|
36
39
|
def quote_char(col_sep)
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# GnListResolver::test
|
4
3
|
module GnListResolver
|
5
4
|
# Sends data to GN Resolver and collects results
|
6
5
|
class Resolver
|
@@ -8,9 +7,10 @@ module GnListResolver
|
|
8
7
|
QUERY = GRAPHQL.client.parse(GRAPHQL.query)
|
9
8
|
attr_reader :stats
|
10
9
|
|
11
|
-
def initialize(writer, data_source_id, stats)
|
10
|
+
def initialize(writer, data_source_id, stats, with_classification = false)
|
12
11
|
@stats = stats
|
13
|
-
@processor = GnListResolver::ResultProcessor.new(writer, @stats
|
12
|
+
@processor = GnListResolver::ResultProcessor.new(writer, @stats,
|
13
|
+
with_classification)
|
14
14
|
@ds_id = data_source_id
|
15
15
|
@count = 0
|
16
16
|
@current_data = {}
|
@@ -21,12 +21,7 @@ module GnListResolver
|
|
21
21
|
update_stats(data.size)
|
22
22
|
block_given? ? process(data, &Proc.new) : process(data)
|
23
23
|
wrap_up
|
24
|
-
|
25
|
-
if block_given?
|
26
|
-
yield(@stats.stats)
|
27
|
-
else
|
28
|
-
@stats.stats
|
29
|
-
end
|
24
|
+
block_given? ? yield(@stats.stats) : @stats.stats
|
30
25
|
end
|
31
26
|
|
32
27
|
private
|
@@ -67,11 +62,12 @@ module GnListResolver
|
|
67
62
|
|
68
63
|
def collect_names(slice)
|
69
64
|
@current_data = {}
|
70
|
-
slice.
|
65
|
+
slice.each_with_object([]) do |row, str|
|
71
66
|
id = row[:id].strip
|
72
67
|
@current_data[id] = row[:original]
|
73
68
|
@processor.input[id] = { rank: row[:rank] }
|
74
|
-
|
69
|
+
str << "#{id}|#{row[:name]}"
|
70
|
+
end.join("\n")
|
75
71
|
end
|
76
72
|
|
77
73
|
def variables(names)
|
@@ -5,7 +5,9 @@ module GnListResolver
|
|
5
5
|
class ResultProcessor
|
6
6
|
attr_reader :input, :writer
|
7
7
|
|
8
|
-
def initialize(writer, stats)
|
8
|
+
def initialize(writer, stats, with_classification = false)
|
9
|
+
@with_classification = with_classification
|
10
|
+
@parser = ScientificNameParser.new
|
9
11
|
@stats = stats
|
10
12
|
@writer = writer
|
11
13
|
@input = {}
|
@@ -20,26 +22,28 @@ module GnListResolver
|
|
20
22
|
|
21
23
|
private
|
22
24
|
|
23
|
-
def rubyfy(result)
|
24
|
-
JSON.parse(result, symbolize_names: true)
|
25
|
-
end
|
26
|
-
|
27
25
|
def write_empty_result(datum)
|
28
26
|
@stats.stats[:matches][MATCH_TYPE_EMPTY] += 1
|
29
27
|
@stats.stats[:resolved_records] += 1
|
28
|
+
res = compile_empty_result(datum)
|
29
|
+
@writer.write(res)
|
30
|
+
end
|
31
|
+
|
32
|
+
def compile_empty_result(datum)
|
30
33
|
res = @original_data[datum.supplied_id]
|
31
|
-
res += [MATCH_TYPES[MATCH_TYPE_EMPTY], datum.supplied_input,
|
32
|
-
nil,
|
34
|
+
res += [MATCH_TYPES[MATCH_TYPE_EMPTY], 0, datum.supplied_input,
|
35
|
+
nil, nil, nil, nil,
|
33
36
|
@input[datum.supplied_id][:rank],
|
34
|
-
nil,
|
35
|
-
|
36
|
-
|
37
|
+
nil, nil, nil, nil, nil]
|
38
|
+
res << nil if @with_classification
|
39
|
+
res
|
37
40
|
end
|
38
41
|
|
39
42
|
def write_result(datum)
|
40
43
|
collect_stats(datum)
|
44
|
+
match_size = datum.results.size
|
41
45
|
datum.results.each do |result|
|
42
|
-
@writer.write(compile_result(datum, result))
|
46
|
+
@writer.write(compile_result(datum, result, match_size))
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
@@ -54,28 +58,56 @@ module GnListResolver
|
|
54
58
|
@stats.stats[:resolved_records] += 1
|
55
59
|
end
|
56
60
|
|
57
|
-
def compile_result(datum, result)
|
58
|
-
@original_data[datum.supplied_id] + prepare_data(datum,
|
61
|
+
def compile_result(datum, result, match_size)
|
62
|
+
@original_data[datum.supplied_id] + prepare_data(datum,
|
63
|
+
result, match_size)
|
59
64
|
end
|
60
65
|
|
61
66
|
# rubocop:disable Metrics/AbcSize
|
62
67
|
|
63
|
-
def prepare_data(datum, result)
|
64
|
-
[MATCH_TYPES[result.match_type.kind.to_sym],
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
68
|
+
def prepare_data(datum, result, match_size)
|
69
|
+
res = [MATCH_TYPES[result.match_type.kind.to_sym], match_size,
|
70
|
+
datum.supplied_input, result.name.value,
|
71
|
+
canonical(datum.supplied_input), result.canonical_name.value,
|
72
|
+
result.match_type.edit_distance, @input[datum.supplied_id][:rank],
|
73
|
+
matched_rank(result), result.synonym, current_name(result),
|
74
|
+
result.score.value ? result.score.value.round(3) : nil,
|
75
|
+
result.taxon_id]
|
76
|
+
res << classification(result) if @with_classification
|
77
|
+
res
|
73
78
|
end
|
74
79
|
|
75
80
|
# rubocop:enable all
|
76
81
|
|
82
|
+
def current_name(result)
|
83
|
+
result.accepted_name.name.value || result.name.value
|
84
|
+
end
|
85
|
+
|
86
|
+
def canonical(name_string)
|
87
|
+
parsed = @parser.parse(name_string)[:scientificName]
|
88
|
+
return nil if parsed[:canonical].nil? || parsed[:hybrid]
|
89
|
+
parsed[:canonical]
|
90
|
+
rescue StandardError
|
91
|
+
@parser = ScientificNameParser.new
|
92
|
+
nil
|
93
|
+
end
|
94
|
+
|
77
95
|
def matched_rank(result)
|
78
96
|
result.classification.path_ranks.split("|").last
|
79
97
|
end
|
98
|
+
|
99
|
+
# rubocop:disable Metrics/AbcSize
|
100
|
+
|
101
|
+
def classification(result)
|
102
|
+
return nil if result.classification.path.to_s.strip == ""
|
103
|
+
path = result.classification.path.split("|")
|
104
|
+
ranks = result.classification.path_ranks.split("|")
|
105
|
+
if path.size == ranks.size
|
106
|
+
path = path.zip(ranks).map { |e| "#{e[0]}(#{e[1]})" }
|
107
|
+
end
|
108
|
+
path.join(", ")
|
109
|
+
end
|
110
|
+
|
111
|
+
# rubocop:enable all
|
80
112
|
end
|
81
113
|
end
|
@@ -3,9 +3,11 @@
|
|
3
3
|
module GnListResolver
|
4
4
|
# Saves output from GN Resolver to disk
|
5
5
|
class Writer
|
6
|
-
def initialize(output_io, original_fields, output_name
|
6
|
+
def initialize(output_io, original_fields, output_name,
|
7
|
+
with_classification = false)
|
7
8
|
@output_io = output_io
|
8
9
|
@output_fields = output_fields(original_fields)
|
10
|
+
@output_fields << :classification if with_classification
|
9
11
|
@output = CSV.new(@output_io, col_sep: "\t")
|
10
12
|
@output << @output_fields
|
11
13
|
@output_name = output_name
|
@@ -24,9 +26,10 @@ module GnListResolver
|
|
24
26
|
private
|
25
27
|
|
26
28
|
def output_fields(original_fields)
|
27
|
-
original_fields + %i[matchedType inputName matchedName
|
28
|
-
matchedCanonicalForm
|
29
|
-
|
29
|
+
original_fields + %i[matchedType matchSize inputName matchedName
|
30
|
+
inputCanonicalForm matchedCanonicalForm
|
31
|
+
matchedEditDistance inputRank
|
32
|
+
matchedRank synonymStatus acceptedName
|
30
33
|
matchedScore matchTaxonID]
|
31
34
|
end
|
32
35
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gn_list_resolver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Mozzherin
|
@@ -9,50 +9,50 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-08-
|
12
|
+
date: 2017-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: biodiversity
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '3.1'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '3.1'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: gn_uuid
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '0.5'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '0.5'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: graphql-client
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 0.11.3
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 0.11.3
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: logger-colors
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,33 +68,33 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: rest-client
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 0
|
76
|
+
version: '2.0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 0
|
83
|
+
version: '2.0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
85
|
+
name: trollop
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
90
|
+
version: '2.1'
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
97
|
+
version: '2.1'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: bundler
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,47 +110,19 @@ dependencies:
|
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '1.7'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - "~>"
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '11.0'
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - "~>"
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '11.0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: rspec
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
requirements:
|
130
|
-
- - "~>"
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: '3.2'
|
133
|
-
type: :development
|
134
|
-
prerelease: false
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
136
|
-
requirements:
|
137
|
-
- - "~>"
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
version: '3.2'
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: rubocop
|
113
|
+
name: byebug
|
142
114
|
requirement: !ruby/object:Gem::Requirement
|
143
115
|
requirements:
|
144
116
|
- - "~>"
|
145
117
|
- !ruby/object:Gem::Version
|
146
|
-
version: '0
|
118
|
+
version: '9.0'
|
147
119
|
type: :development
|
148
120
|
prerelease: false
|
149
121
|
version_requirements: !ruby/object:Gem::Requirement
|
150
122
|
requirements:
|
151
123
|
- - "~>"
|
152
124
|
- !ruby/object:Gem::Version
|
153
|
-
version: '0
|
125
|
+
version: '9.0'
|
154
126
|
- !ruby/object:Gem::Dependency
|
155
127
|
name: coveralls
|
156
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -166,47 +138,47 @@ dependencies:
|
|
166
138
|
- !ruby/object:Gem::Version
|
167
139
|
version: '0.8'
|
168
140
|
- !ruby/object:Gem::Dependency
|
169
|
-
name:
|
141
|
+
name: rake
|
170
142
|
requirement: !ruby/object:Gem::Requirement
|
171
143
|
requirements:
|
172
144
|
- - "~>"
|
173
145
|
- !ruby/object:Gem::Version
|
174
|
-
version: '
|
146
|
+
version: '12.0'
|
175
147
|
type: :development
|
176
148
|
prerelease: false
|
177
149
|
version_requirements: !ruby/object:Gem::Requirement
|
178
150
|
requirements:
|
179
151
|
- - "~>"
|
180
152
|
- !ruby/object:Gem::Version
|
181
|
-
version: '
|
153
|
+
version: '12.0'
|
182
154
|
- !ruby/object:Gem::Dependency
|
183
|
-
name:
|
155
|
+
name: rspec
|
184
156
|
requirement: !ruby/object:Gem::Requirement
|
185
157
|
requirements:
|
186
158
|
- - "~>"
|
187
159
|
- !ruby/object:Gem::Version
|
188
|
-
version: '2
|
160
|
+
version: '3.2'
|
189
161
|
type: :development
|
190
162
|
prerelease: false
|
191
163
|
version_requirements: !ruby/object:Gem::Requirement
|
192
164
|
requirements:
|
193
165
|
- - "~>"
|
194
166
|
- !ruby/object:Gem::Version
|
195
|
-
version: '2
|
167
|
+
version: '3.2'
|
196
168
|
- !ruby/object:Gem::Dependency
|
197
|
-
name:
|
169
|
+
name: rubocop
|
198
170
|
requirement: !ruby/object:Gem::Requirement
|
199
171
|
requirements:
|
200
172
|
- - "~>"
|
201
173
|
- !ruby/object:Gem::Version
|
202
|
-
version: '
|
174
|
+
version: '0.49'
|
203
175
|
type: :development
|
204
176
|
prerelease: false
|
205
177
|
version_requirements: !ruby/object:Gem::Requirement
|
206
178
|
requirements:
|
207
179
|
- - "~>"
|
208
180
|
- !ruby/object:Gem::Version
|
209
|
-
version: '
|
181
|
+
version: '0.49'
|
210
182
|
description: Gem uses a checklist in a comma-separated format as an input, and returns
|
211
183
|
back a new comma-separated resolved list of scientific names to one of the data
|
212
184
|
sources from http://resolver.globalnames.org
|