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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a630b9dd4ea1cc3bebb02baec56e9277a52399f
4
- data.tar.gz: 35ac3f5944bb050604bb2c9f584ee9f47b3e9102
3
+ metadata.gz: 3b30d2905481948448c40c18922587551a228819
4
+ data.tar.gz: 3ff55484ce12de44275814909941c3ba9b63ce03
5
5
  SHA512:
6
- metadata.gz: 383620a1423b7bc056ff08c75f28fefef9937f50bbe4322037f9f89685d6e7fb1bf5070c7e890d77c7b87aefa0a46384d84eba5abc36d01905778f4f3461c2c7
7
- data.tar.gz: a734e466173e3e03ac960e700a851cb755af4cbf5dcb46a8a0e36c314adafe865ae5aac089937375bb62f0c1ff0d38e65e4ce70b55253dccbf472867e7d70f75
6
+ metadata.gz: a82ffc469b139df0cd3ca8444a74a9fc73a16c8334153e9cd48d28882c9509a2ffdb837a46f9d76a564df282d10760e2be937802d10655ef6c892c7d0431aa11
7
+ data.tar.gz: 78e74f0263368c2d339151162583e35c1fd3f9facdbfba4cb73cb5333de994a375951ca3d0a03d766d07a1feb9c1f39ae74f5d80dd9a369d060f067fb822a961
data/.gitignore CHANGED
@@ -12,6 +12,7 @@ output.csv
12
12
  .vim.custom
13
13
  t
14
14
  t.*
15
+ .~lock*
15
16
  gn_list_resolver-*.gem
16
17
  .byebug_history
17
18
  .nvimlog
data/.travis.yml CHANGED
@@ -1,7 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1
4
- - 2.2
3
+ - 2.4
5
4
  script:
6
5
  - bundle exec rake
7
6
  branches:
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
- taxonID | original ID attached to a name in the checklist
252
- scientificName | name from the checklist
253
- matchedScientificName| name matched from the GN Reolver data source
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
- matchType | what kind of match it is
258
- editDistance | for fuzzy-matching -- how many characters differ between checklist and data source name
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
@@ -11,3 +11,8 @@ end
11
11
  RuboCop::RakeTask.new
12
12
 
13
13
  task default: %i[rubocop rspec]
14
+
15
+ desc "open an irb session preloaded with this gem"
16
+ task :console do
17
+ sh "irb -r pp -r ./lib/gn_crossmap.rb"
18
+ end
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.0" if RUBY_VERSION < "2.1.0"
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
@@ -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 "rake", "~> 11.0"
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:
@@ -54,17 +54,23 @@ module GnListResolver
54
54
  end
55
55
 
56
56
  def find_id(row, name)
57
- row.key?(:taxonid) ? row[:taxonid].strip : GnUUID.uuid(name)
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, opts.stats)
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, output_name(opts.output))
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 = 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 col_sep
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 { |s| [line.count(s), s] }.sort.last.last
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.each do |row|
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
- end
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, nil,
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
- nil, nil, nil]
36
- @writer.write(res)
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, result)
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
- datum.supplied_input, result.name.value,
66
- result.canonical_name.value, @input[datum.supplied_id][:rank],
67
- matched_rank(result),
68
- result.synonym,
69
- result.name.value, # TODO: should be `current_name_string` field
70
- result.match_type.edit_distance,
71
- result.score.value ? result.score.value.round(3) : nil,
72
- result.taxon_id]
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Namespace module for crossmapping checklists to GN sources
4
4
  module GnListResolver
5
- VERSION = "3.0.3.4"
5
+ VERSION = "3.2.0.1"
6
6
 
7
7
  def self.version
8
8
  VERSION
@@ -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 inputRank matchedRank
29
- synonymStatus acceptedName matchedEditDistance
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.3.4
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-25 00:00:00.000000000 Z
12
+ date: 2017-08-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: trollop
15
+ name: biodiversity
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '2.1'
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: '2.1'
27
+ version: '3.1'
28
28
  - !ruby/object:Gem::Dependency
29
- name: biodiversity
29
+ name: gn_uuid
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '3.1'
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: '3.1'
41
+ version: '0.5'
42
42
  - !ruby/object:Gem::Dependency
43
- name: rest-client
43
+ name: graphql-client
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '2.0'
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: '2.0'
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: graphql-client
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.11.3
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.11.3
83
+ version: '2.0'
84
84
  - !ruby/object:Gem::Dependency
85
- name: gn_uuid
85
+ name: trollop
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '0.5'
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: '0.5'
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: rake
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.49'
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.49'
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: byebug
141
+ name: rake
170
142
  requirement: !ruby/object:Gem::Requirement
171
143
  requirements:
172
144
  - - "~>"
173
145
  - !ruby/object:Gem::Version
174
- version: '9.0'
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: '9.0'
153
+ version: '12.0'
182
154
  - !ruby/object:Gem::Dependency
183
- name: guard
155
+ name: rspec
184
156
  requirement: !ruby/object:Gem::Requirement
185
157
  requirements:
186
158
  - - "~>"
187
159
  - !ruby/object:Gem::Version
188
- version: '2.14'
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.14'
167
+ version: '3.2'
196
168
  - !ruby/object:Gem::Dependency
197
- name: guard-rspec
169
+ name: rubocop
198
170
  requirement: !ruby/object:Gem::Requirement
199
171
  requirements:
200
172
  - - "~>"
201
173
  - !ruby/object:Gem::Version
202
- version: '4.7'
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: '4.7'
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