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 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