gn_list_resolver 3.0.3.4 → 3.2.0.1
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 +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
|