gnfinder 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: eae6b30a26b68c5f5ccba1be049217ab729193362b9fc0d8beabc9e3f552b282
4
+ data.tar.gz: bf0663a41af4296984664f7568ea2d773a07dff823d9181e2cfa073a8f15cb32
5
+ SHA512:
6
+ metadata.gz: 1c1cc186e55feca2b0ea65b9ebbd05faf8190ed6bbefddd51f70c605e88d180686e594a0d0e7174387087c50b5d88cc6f554e49905120b7be55a0ef74ebacd7b
7
+ data.tar.gz: 9785c062cbf89f645434d0e5e796a71d33c9406ef64d8ead8b9e9795f5525fd9a98ccfb09a124e58e3344cba50883fae7c200a3ce9de7249546b111940105b7e
@@ -0,0 +1,51 @@
1
+ *.gem
2
+ *.rbc
3
+ .byebug_history
4
+ /.config
5
+ /coverage/
6
+ /InstalledFiles
7
+ /pkg/
8
+ /spec/reports/
9
+ /spec/examples.txt
10
+ /test/tmp/
11
+ /test/version_tmp/
12
+ /tmp/
13
+
14
+ # Used by dotenv library to load environment variables.
15
+ # .env
16
+
17
+ ## Specific to RubyMotion:
18
+ .dat*
19
+ .repl_history
20
+ build/
21
+ *.bridgesupport
22
+ build-iPhoneOS/
23
+ build-iPhoneSimulator/
24
+
25
+ ## Specific to RubyMotion (use of CocoaPods):
26
+ #
27
+ # We recommend against adding the Pods directory to your .gitignore. However
28
+ # you should judge for yourself, the pros and cons are mentioned at:
29
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
30
+ #
31
+ # vendor/Pods/
32
+
33
+ ## Documentation cache and generated files:
34
+ /.yardoc/
35
+ /_yardoc/
36
+ /doc/
37
+ /rdoc/
38
+
39
+ ## Environment normalization:
40
+ /.bundle/
41
+ /vendor/bundle
42
+ /lib/bundler/man/
43
+
44
+ # for a library or gem, you might want to ignore these files since the code is
45
+ # intended to run in multiple environments; otherwise, check them in:
46
+ Gemfile.lock
47
+ .ruby-version
48
+ .ruby-gemset
49
+
50
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
51
+ .rvmrc
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format progress
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,10 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.5
3
+ Exclude:
4
+ - 'lib/protob_pb.rb'
5
+ - 'lib/protob_services_pb.rb'
6
+ Style/StringLiterals:
7
+ EnforcedStyle: single_quotes
8
+ Metrics/BlockLength:
9
+ Exclude:
10
+ - 'spec/**/*'
@@ -0,0 +1,26 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## [v0.1.0]
6
+
7
+ - Add [#5]: add an optional list of preferred data-sources for verification
8
+ - Add [#4]: add an option for verification of found names
9
+ - Add [#3]: enable sending options to gRPC service
10
+ - Add [#2]: send a text and receive found names
11
+ - Add [#1]: connect to gRPC server of `gnfinder` Go-lang program
12
+
13
+ ## Footnotes
14
+
15
+ This document follows [changelog guidelines]
16
+
17
+ [v0.1.0]: https://github.com/GlobalNamesArchitecture/gnfinder/tree/v0.1.0
18
+
19
+ [#5]: https://github.com/GlobalNamesArchitecture/gnfinder/issues/5
20
+ [#4]: https://github.com/GlobalNamesArchitecture/gnfinder/issues/4
21
+ [#3]: https://github.com/GlobalNamesArchitecture/gnfinder/issues/3
22
+ [#2]: https://github.com/GlobalNamesArchitecture/gnfinder/issues/2
23
+ [#1]: https://github.com/GlobalNamesArchitecture/gnfinder/issues/1
24
+
25
+
26
+ [changelog guidelines]: https://github.com/olivierlacan/keep-a-changelog
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Global Names
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,185 @@
1
+ # gnfinder
2
+
3
+ Ruby gem to access functionality of [gnfinder] project written in Go. This gem
4
+ allows to perform fast and accurate scientific name finding in UTF-8 encoded
5
+ plain texts for Ruby-based projects.
6
+
7
+
8
+ ## Requirements
9
+
10
+ This gem uses gRPC to access a running [gnfinder] server. You can find how
11
+ to run it in [gnfinder] README file.
12
+
13
+ ## Installation
14
+
15
+ To use the gem from Ruby proect install it using Gemfile, or manually:
16
+
17
+ ```bash
18
+ gem install gnfinder
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ The purpose of this gem is to access [gnfinder] functionality out of Ruby
24
+ applications. If you need to find names using other languages, use the
25
+ [source code][client] of this gem for reference. For other usages read
26
+ the original Go-lang [gnfinder] README file.
27
+
28
+ First you need to create a instance of a `gnfinder` client
29
+
30
+ ```ruby
31
+ import 'gnfinder'
32
+
33
+ gf = Gnfinder::Client.new
34
+ ```
35
+
36
+ By default the client will try to connect to `localhost:8778`. If you
37
+ have another location for the server use:
38
+
39
+ ```
40
+ import 'gnfinder'
41
+ gf = Gnfinder.new(host: 123.123.123.123, port: 8000)
42
+ ```
43
+
44
+ ### Finding names in a text using default settings
45
+
46
+ ```ruby
47
+ txt = File.read('utf8-text-with-names.txt')
48
+
49
+ names = gf.find_names(txt)
50
+ puts names[0].value
51
+ puts names[0].odds
52
+ ```
53
+
54
+ Returned result will have the following methods for each name:
55
+
56
+ * value: mame-string cleaned up for verification.
57
+ * verbatim: name-string as it was found in the text.
58
+ * odds: Bayes' odds value. For example odds 0.1 would mean that according to
59
+ the algorithm there is 1 chance out of 10 that the name-string is
60
+ a scientific name. This field will be empty if Bayes algorithms did not run.
61
+
62
+ ### Always enable Bayes search
63
+
64
+ For languages that are not supported by [gnfinder] only heuristic algorithms
65
+ are used by default, because some languages that are close to Latin (Italian,
66
+ French, Portugese) would generate too many false positives. However you can
67
+ override this default setting by running:
68
+
69
+ ```ruby
70
+ names = gf.find_names(txt, with_bayes: true)
71
+ ```
72
+
73
+ ### Set a language for the text
74
+
75
+ Sometimes gnfinder cannot determine the language of a text correctly. For
76
+ example it happens when the text mostly consists of scientific names, or has
77
+ large citations or list of references in a different language. It is possible
78
+ to set a language for a text by hand. For supported languages
79
+ (English and German) it will enable Bayes algorithm. For other languages
80
+ this setting will be ignored.
81
+
82
+ List of supported languages will increase with time.
83
+
84
+ ```ruby
85
+ names = gf.find_names(txt, language: 'eng')
86
+ names = gf.find_names(txt, language: 'deu')
87
+
88
+ # setting is ignored, only known by gnfinder
89
+ # 3-character notations iso-639-2 code are supported
90
+ names = gf.find_names(txt, language: 'english')
91
+ names = gf.find_names(txt, language: 'rus')
92
+ ```
93
+
94
+ ### Set verification option
95
+
96
+ In case if found names need to be validated against a large collection of
97
+ name-strings, use `with_verification` option. For each name algorithm will
98
+ return the following information:
99
+
100
+ * match type:
101
+ - ``NONE``: name-string is unknown
102
+ - ``EXACT``: name-string matched exactly.
103
+ - ``CANONICAL_EXACT``: canonical form of a name-string matched exactly.
104
+ - ``CANONICAL_FUZZY``: fuzzy match of a canonical string.
105
+ - ``PARTIAL_EXACT``: only part of a name matched. For examle only genus of a
106
+ species was found.
107
+ - ``PARTIAL_FUZZY``: fuzzy match of a partial result. For example canonical
108
+ form of a trinomial matched on a species level with some corrections.
109
+ * source_id: ID of a data-source of a best matched result. Data source IDs
110
+ can be compared with the [data-source list]
111
+ * curated: true if name-string was found in some data-sources that are
112
+ deemed to curated by humans.
113
+ * path: the classification path of a matched name (if available)
114
+
115
+ ```ruby
116
+ names = gf.find_names(txt, with_verification: true)
117
+ ```
118
+
119
+ ### Set preferred data-sources list
120
+
121
+ Sometimes it is important to know if a name was found in a particular
122
+ data-source (data-sources). There is a parameter that takes IDs from the
123
+ [data-source list]. If a name-string was found in these data-sources, match
124
+ results will be returned back.
125
+
126
+ ```ruby
127
+ names = gf.find_names(txt, with_verification: true, sources: [1, 4, 179])
128
+ ```
129
+ ### Combination of parameters.
130
+
131
+ It is possible to combine parameters. However if a parameter makes no sense in
132
+ a particular context. It is silently ignored.
133
+
134
+ ```ruby
135
+ # Runs Bayes' algorithms using English training set, runs verification and
136
+ # returns matched results for 3 data-sources if they are available.
137
+ names = gf.find_names(txt, language: eng, with_verification: true,
138
+ sources: [1, 4, 179])
139
+
140
+ # Ignores `sources:` settings, because `with_verification` is not set to `true`
141
+ names = gf.find_names(txt, language: eng, sources: [1, 4, 179])
142
+ ```
143
+
144
+ ## Development
145
+
146
+ This gem uses gRPC to access [gnfinder] server. gRPC in turn depends on a
147
+ protobuf library. If you need to compile Ruby programs with protobuf you need
148
+ to install [Go] language and download [gnfinder] project.
149
+
150
+ ```bash
151
+ go get github.com/gnames/gnfinder
152
+ ```
153
+ Then you need to run bundle from the root of the project and generate
154
+ grpc files:
155
+
156
+ ```bash
157
+ bundle
158
+ rake grpc
159
+ ```
160
+
161
+ If you get an error, you might need to set a ``GOPATH`` environment variable.
162
+
163
+ After starting the server with default host and port (localhost:8778) you will
164
+ be able to run tests for this Ruby client with:
165
+
166
+ ```bash
167
+ bundle exec rake
168
+ ```
169
+
170
+ To run rubocop test
171
+
172
+ ```bash
173
+ bundle exec rake rubocop
174
+ ```
175
+
176
+ To run tests without rubocop
177
+ ```bash
178
+ bundle exec rspec
179
+ ```
180
+
181
+ [gnfinder]: https://github.com/gnames/gnfinder
182
+ [gnfinder recent release]: https://github.com/gnames/gnfinder/releases
183
+ [Go]: https://golang.org/doc/install
184
+ [client]: https://github.com/GlobalNamesArchitecture/gnfinder/blob/master/lib/gnfinder/client.rb
185
+ [data-source list]: http://index.globalnames.org/datasource
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ require 'bundler/gem_tasks'
6
+
7
+ begin
8
+ Bundler.setup(:default, :development)
9
+ rescue Bundler::BundlerError => e
10
+ warn e.message
11
+ warn 'Run `bundle install` to install missing gems'
12
+ exit e.status_code
13
+ end
14
+ require 'rake'
15
+
16
+ require 'rspec/core'
17
+ require 'rspec/core/rake_task'
18
+ RSpec::Core::RakeTask.new(:spec) do |spec|
19
+ spec.pattern = FileList['spec/**/*_spec.rb']
20
+ end
21
+
22
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
23
+ spec.pattern = 'spec/**/*_spec.rb'
24
+ spec.rcov = true
25
+ end
26
+
27
+ task :grpc do
28
+ cmd = 'grpc_tools_ruby_protoc ' \
29
+ '-I $GOPATH/src/github.com/gnames/gnfinder/protob ' \
30
+ '--ruby_out=lib --grpc_out=lib ' \
31
+ '$GOPATH/src/github.com/gnames/gnfinder/protob/protob.proto'
32
+ puts cmd
33
+ `#{cmd}`
34
+ end
35
+
36
+ require 'rubocop/rake_task'
37
+ RuboCop::RakeTask.new
38
+
39
+ task default: %i[rubocop grpc spec]
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+
5
+ require 'gnfinder/version'
6
+
7
+ Gem::Specification.new do |gem|
8
+ gem.name = 'gnfinder'
9
+ gem.homepage = 'http://github.com/GlobalNamesArchitecture/gnfinder'
10
+ gem.version = Gnfinder::VERSION
11
+ gem.authors = ['Dmitry Mozzherin']
12
+ gem.license = 'MIT'
13
+ gem.summary = 'Scientific names finder'
14
+ gem.description = %(The gem searches for scientific names in texts using
15
+ gRPC server running gnfinder app written in Go language)
16
+ gem.email = 'dmozzherin@gmail.com'
17
+
18
+ gem.files = `git ls-files -z`
19
+ .split("\x0")
20
+ .reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+
22
+ gem.require_paths = ['lib']
23
+ gem.required_ruby_version = '~> 2.5'
24
+ gem.add_development_dependency 'bundler', '~> 1.16'
25
+ gem.add_development_dependency 'byebug', '~> 10.0'
26
+ gem.add_development_dependency 'grpc', '~> 1.15'
27
+ gem.add_development_dependency 'grpc-tools', '~> 1.15'
28
+ gem.add_development_dependency 'rake', '~> 12.3'
29
+ gem.add_development_dependency 'rspec', '~> 3.8'
30
+ gem.add_development_dependency 'rubocop', '~> 0.59'
31
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'gnfinder/version'
4
+ require_relative 'protob_pb.rb'
5
+ require_relative 'protob_services_pb.rb'
6
+ require_relative 'gnfinder/client'
7
+
8
+ # Gnfinder is a namespace module for gndinfer gem.
9
+ module Gnfinder
10
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gnfinder
4
+ # Gnfinder::Client connects to gnfinder server
5
+ class Client
6
+ def initialize(host = '0.0.0.0', port = '8778')
7
+ @stub = Protob::GNFinder::Stub.new("#{host}:#{port}",
8
+ :this_channel_is_insecure)
9
+ end
10
+
11
+ def ping
12
+ @stub.ping(Protob::Void.new).value
13
+ end
14
+
15
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
16
+ def find_names(text, opts = {})
17
+ raise 'Text cannot be empty' if text.to_s.strip == ''
18
+
19
+ params = { text: text }
20
+ params[:with_bayes] = true if opts[:with_bayes]
21
+ params[:language] = opts[:language] if opts[:language].to_s.strip != ''
22
+ params[:with_verification] = true if opts[:with_verification]
23
+ if opts[:sources] && !opts[:sources].empty?
24
+ params[:sources] = opts[:sources]
25
+ end
26
+
27
+ @stub.find_names(Protob::Params.new(params)).names
28
+ end
29
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Gnfinder is a namespace module for gndinfer gem.
4
+ module Gnfinder
5
+ VERSION = '0.1.0'
6
+
7
+ def self.version
8
+ VERSION
9
+ end
10
+ end
@@ -0,0 +1,59 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: protob.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ Google::Protobuf::DescriptorPool.generated_pool.build do
7
+ add_message "protob.Pong" do
8
+ optional :value, :string, 1
9
+ end
10
+ add_message "protob.Void" do
11
+ end
12
+ add_message "protob.Params" do
13
+ optional :text, :bytes, 1
14
+ optional :with_bayes, :bool, 3
15
+ optional :language, :string, 4
16
+ optional :with_verification, :bool, 5
17
+ repeated :sources, :int32, 6
18
+ end
19
+ add_message "protob.NameStrings" do
20
+ optional :text, :bytes, 3
21
+ repeated :names, :message, 6, "protob.NameString"
22
+ end
23
+ add_message "protob.NameString" do
24
+ optional :value, :string, 1
25
+ optional :verbatim, :string, 2
26
+ optional :odds, :float, 3
27
+ optional :path, :string, 4
28
+ optional :curated, :bool, 5
29
+ optional :edit_distance, :int32, 6
30
+ optional :edit_distance_stem, :int32, 7
31
+ optional :source_id, :int32, 8
32
+ optional :match, :enum, 9, "protob.MatchType"
33
+ repeated :sources_result, :message, 10, "protob.SourceResult"
34
+ end
35
+ add_message "protob.SourceResult" do
36
+ optional :source_id, :int32, 1
37
+ optional :title, :string, 2
38
+ optional :name_id, :string, 3
39
+ optional :taxon_id, :string, 4
40
+ end
41
+ add_enum "protob.MatchType" do
42
+ value :NONE, 0
43
+ value :EXACT, 1
44
+ value :CANONICAL_EXACT, 2
45
+ value :CANONICAL_FUZZY, 3
46
+ value :PARTIAL_EXACT, 4
47
+ value :PARTIAL_FUZZY, 5
48
+ end
49
+ end
50
+
51
+ module Protob
52
+ Pong = Google::Protobuf::DescriptorPool.generated_pool.lookup("protob.Pong").msgclass
53
+ Void = Google::Protobuf::DescriptorPool.generated_pool.lookup("protob.Void").msgclass
54
+ Params = Google::Protobuf::DescriptorPool.generated_pool.lookup("protob.Params").msgclass
55
+ NameStrings = Google::Protobuf::DescriptorPool.generated_pool.lookup("protob.NameStrings").msgclass
56
+ NameString = Google::Protobuf::DescriptorPool.generated_pool.lookup("protob.NameString").msgclass
57
+ SourceResult = Google::Protobuf::DescriptorPool.generated_pool.lookup("protob.SourceResult").msgclass
58
+ MatchType = Google::Protobuf::DescriptorPool.generated_pool.lookup("protob.MatchType").enummodule
59
+ end
@@ -0,0 +1,23 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: protob.proto for package 'protob'
3
+
4
+ require 'grpc'
5
+ require 'protob_pb'
6
+
7
+ module Protob
8
+ module GNFinder
9
+ class Service
10
+
11
+ include GRPC::GenericService
12
+
13
+ self.marshal_class_method = :encode
14
+ self.unmarshal_class_method = :decode
15
+ self.service_name = 'protob.GNFinder'
16
+
17
+ rpc :Ping, Void, Pong
18
+ rpc :FindNames, Params, NameStrings
19
+ end
20
+
21
+ Stub = Service.rpc_stub_class
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gnfinder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dmitry Mozzherin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-10-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: byebug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: grpc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.15'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.15'
55
+ - !ruby/object:Gem::Dependency
56
+ name: grpc-tools
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.15'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.15'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '12.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '12.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.8'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.8'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.59'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.59'
111
+ description: |-
112
+ The gem searches for scientific names in texts using
113
+ gRPC server running gnfinder app written in Go language
114
+ email: dmozzherin@gmail.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".gitignore"
120
+ - ".rspec"
121
+ - ".rubocop.yml"
122
+ - CHANGELOG.md
123
+ - Gemfile
124
+ - LICENSE
125
+ - README.md
126
+ - Rakefile
127
+ - gnfinder.gemspec
128
+ - lib/gnfinder.rb
129
+ - lib/gnfinder/client.rb
130
+ - lib/gnfinder/version.rb
131
+ - lib/protob_pb.rb
132
+ - lib/protob_services_pb.rb
133
+ homepage: http://github.com/GlobalNamesArchitecture/gnfinder
134
+ licenses:
135
+ - MIT
136
+ metadata: {}
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.5'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 2.7.6
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: Scientific names finder
157
+ test_files: []