grpc_kit 0.5.1 → 0.6.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +18 -6
- data/CHANGELOG.md +9 -0
- data/examples/helloworld/helloworld_pb.rb +8 -10
- data/examples/helloworld/helloworld_services_pb.rb +19 -2
- data/examples/helloworld_client.rb +0 -1
- data/examples/helloworld_server.rb +0 -1
- data/examples/routeguide/routeguide_pb.rb +11 -29
- data/examples/routeguide/routeguide_services_pb.rb +5 -5
- data/examples/routeguide_client.rb +2 -2
- data/examples/routeguide_server.rb +1 -1
- data/grpc_kit.gemspec +2 -1
- data/lib/grpc_kit/rpc_dispatcher.rb +4 -3
- data/lib/grpc_kit/session/io.rb +17 -3
- data/lib/grpc_kit/version.rb +1 -1
- metadata +18 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: de4d68a25b47aecdb39e3c3b35f7b53fe85215ababa7a18a2811069b41af3ba8
|
|
4
|
+
data.tar.gz: f330329e794c5b799d265c7c4869da26373467bb64dd6cc273b314c1aeffd509
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 38586d8ab0d0f252b0819b71b8422f8396661223f6b9014d98623abce41fba285e6975bb0e7655d10d45112f1972cdd992c3c06f7ba2557a9c3f898e429abdd1
|
|
7
|
+
data.tar.gz: 99f95947b101ceaf8994777fe425951977ec222a6fb5aba6baed9f913a701a164ccb548d80e30199bafb27cb847af1f9464c649321d5979719f545a6062b9b28
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: ci
|
|
2
|
-
on:
|
|
2
|
+
on:
|
|
3
3
|
push:
|
|
4
4
|
branches:
|
|
5
5
|
- master
|
|
@@ -11,12 +11,24 @@ jobs:
|
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
strategy:
|
|
13
13
|
matrix:
|
|
14
|
-
ruby_version:
|
|
15
|
-
- 2.5
|
|
16
|
-
- 2.6
|
|
17
|
-
- 2.7
|
|
14
|
+
ruby_version: ['3.3', '3.4', '4.0']
|
|
18
15
|
steps:
|
|
19
|
-
- uses: actions/checkout@
|
|
16
|
+
- uses: actions/checkout@v7
|
|
17
|
+
- uses: ruby/setup-ruby@v1
|
|
18
|
+
with:
|
|
19
|
+
ruby-version: '${{ matrix.ruby_version }}'
|
|
20
|
+
bundler-cache: true
|
|
21
|
+
|
|
22
|
+
- run: 'bundle exec rake'
|
|
23
|
+
|
|
24
|
+
truffleruby:
|
|
25
|
+
name: truffleruby
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
strategy:
|
|
28
|
+
matrix:
|
|
29
|
+
ruby_version: [truffleruby-head]
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v7
|
|
20
32
|
- uses: ruby/setup-ruby@v1
|
|
21
33
|
with:
|
|
22
34
|
ruby-version: '${{ matrix.ruby_version }}'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.6.0 (2026-09-09)
|
|
4
|
+
|
|
5
|
+
- breaking change: Drop Ruby 2.5, 2.6, 2.7, 3.0, 3.1, and 3.2 from CI ([db918cb](https://github.com/cookpad/grpc_kit/commit/db918cbe0ceadf263ff528ace82c90983ee989f2) & [#42](https://github.com/cookpad/grpc_kit/pull/42))
|
|
6
|
+
- bug: Fix tests for Ruby 3+ ([#36](https://github.com/cookpad/grpc_kit/pull/36))
|
|
7
|
+
- bug: Fix exceptions in an auto-trimmer thread in CI build with TruffleRuby ([#38](https://github.com/cookpad/grpc_kit/pull/38))
|
|
8
|
+
- bug: Drain the waker pipe in Session::IO#select ([#41](https://github.com/cookpad/grpc_kit/pull/41))
|
|
9
|
+
- improve: Add TruffleRuby in CI ([#37](https://github.com/cookpad/grpc_kit/pull/37))
|
|
10
|
+
- improve: Add Ruby 3.3, 3.4, 4.0 in CI ([#42](https://github.com/cookpad/grpc_kit/pull/42))
|
|
11
|
+
|
|
3
12
|
## v0.5.1 (2021-05-19)
|
|
4
13
|
|
|
5
14
|
- improve: Set END_STREAM flag on the last DATA frame on request stream ([#34](https://github.com/cookpad/grpc_kit/pull/34))
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
2
3
|
# source: helloworld.proto
|
|
3
4
|
|
|
4
5
|
require 'google/protobuf'
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
optional :message, :string, 1
|
|
12
|
-
end
|
|
13
|
-
end
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x30\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\x62\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
14
12
|
|
|
15
13
|
module Helloworld
|
|
16
|
-
HelloRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloRequest").msgclass
|
|
17
|
-
HelloReply = Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloReply").msgclass
|
|
14
|
+
HelloRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloRequest").msgclass
|
|
15
|
+
HelloReply = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloReply").msgclass
|
|
18
16
|
end
|
|
@@ -1,20 +1,37 @@
|
|
|
1
1
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
2
2
|
# Source: helloworld.proto for package 'helloworld'
|
|
3
|
+
# Original file comments:
|
|
4
|
+
# Copyright 2015 gRPC authors.
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
3
18
|
|
|
4
19
|
require 'grpc'
|
|
5
20
|
require 'helloworld_pb'
|
|
6
21
|
|
|
7
22
|
module Helloworld
|
|
8
23
|
module Greeter
|
|
24
|
+
# The greeting service definition.
|
|
9
25
|
class Service
|
|
10
26
|
|
|
11
|
-
include GRPC::GenericService
|
|
27
|
+
include ::GRPC::GenericService
|
|
12
28
|
|
|
13
29
|
self.marshal_class_method = :encode
|
|
14
30
|
self.unmarshal_class_method = :decode
|
|
15
31
|
self.service_name = 'helloworld.Greeter'
|
|
16
32
|
|
|
17
|
-
|
|
33
|
+
# Sends a greeting
|
|
34
|
+
rpc :SayHello, ::Helloworld::HelloRequest, ::Helloworld::HelloReply
|
|
18
35
|
end
|
|
19
36
|
|
|
20
37
|
Stub = Service.rpc_stub_class
|
|
@@ -1,37 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
2
3
|
# source: routeguide.proto
|
|
3
4
|
|
|
4
5
|
require 'google/protobuf'
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
add_message "routeguide.Rectangle" do
|
|
12
|
-
optional :lo, :message, 1, "routeguide.Point"
|
|
13
|
-
optional :hi, :message, 2, "routeguide.Point"
|
|
14
|
-
end
|
|
15
|
-
add_message "routeguide.Feature" do
|
|
16
|
-
optional :name, :string, 1
|
|
17
|
-
optional :location, :message, 2, "routeguide.Point"
|
|
18
|
-
end
|
|
19
|
-
add_message "routeguide.RouteNote" do
|
|
20
|
-
optional :location, :message, 1, "routeguide.Point"
|
|
21
|
-
optional :message, :string, 2
|
|
22
|
-
end
|
|
23
|
-
add_message "routeguide.RouteSummary" do
|
|
24
|
-
optional :point_count, :int32, 1
|
|
25
|
-
optional :feature_count, :int32, 2
|
|
26
|
-
optional :distance, :int32, 3
|
|
27
|
-
optional :elapsed_time, :int32, 4
|
|
28
|
-
end
|
|
29
|
-
end
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x10routeguide.proto\x12\nrouteguide\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"I\n\tRectangle\x12\x1d\n\x02lo\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x1d\n\x02hi\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"<\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x08location\x18\x02 \x01(\x0b\x32\x11.routeguide.Point\"A\n\tRouteNote\x12#\n\x08location\x18\x01 \x01(\x0b\x32\x11.routeguide.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\x85\x02\n\nRouteGuide\x12\x36\n\nGetFeature\x12\x11.routeguide.Point\x1a\x13.routeguide.Feature\"\x00\x12>\n\x0cListFeatures\x12\x15.routeguide.Rectangle\x1a\x13.routeguide.Feature\"\x00\x30\x01\x12>\n\x0bRecordRoute\x12\x11.routeguide.Point\x1a\x18.routeguide.RouteSummary\"\x00(\x01\x12?\n\tRouteChat\x12\x15.routeguide.RouteNote\x1a\x15.routeguide.RouteNote\"\x00(\x01\x30\x01\x42\x30\n\x1bio.grpc.examples.routeguideB\x0fRouteGuideProtoP\x01\x62\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
30
12
|
|
|
31
13
|
module Routeguide
|
|
32
|
-
Point = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Point").msgclass
|
|
33
|
-
Rectangle = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Rectangle").msgclass
|
|
34
|
-
Feature = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Feature").msgclass
|
|
35
|
-
RouteNote = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteNote").msgclass
|
|
36
|
-
RouteSummary = Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteSummary").msgclass
|
|
14
|
+
Point = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Point").msgclass
|
|
15
|
+
Rectangle = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Rectangle").msgclass
|
|
16
|
+
Feature = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.Feature").msgclass
|
|
17
|
+
RouteNote = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteNote").msgclass
|
|
18
|
+
RouteSummary = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("routeguide.RouteSummary").msgclass
|
|
37
19
|
end
|
|
@@ -24,7 +24,7 @@ module Routeguide
|
|
|
24
24
|
# Interface exported by the server.
|
|
25
25
|
class Service
|
|
26
26
|
|
|
27
|
-
include GRPC::GenericService
|
|
27
|
+
include ::GRPC::GenericService
|
|
28
28
|
|
|
29
29
|
self.marshal_class_method = :encode
|
|
30
30
|
self.unmarshal_class_method = :decode
|
|
@@ -36,24 +36,24 @@ module Routeguide
|
|
|
36
36
|
#
|
|
37
37
|
# A feature with an empty name is returned if there's no feature at the given
|
|
38
38
|
# position.
|
|
39
|
-
rpc :GetFeature, Point, Feature
|
|
39
|
+
rpc :GetFeature, ::Routeguide::Point, ::Routeguide::Feature
|
|
40
40
|
# A server-to-client streaming RPC.
|
|
41
41
|
#
|
|
42
42
|
# Obtains the Features available within the given Rectangle. Results are
|
|
43
43
|
# streamed rather than returned at once (e.g. in a response message with a
|
|
44
44
|
# repeated field), as the rectangle may cover a large area and contain a
|
|
45
45
|
# huge number of features.
|
|
46
|
-
rpc :ListFeatures, Rectangle, stream(Feature)
|
|
46
|
+
rpc :ListFeatures, ::Routeguide::Rectangle, stream(::Routeguide::Feature)
|
|
47
47
|
# A client-to-server streaming RPC.
|
|
48
48
|
#
|
|
49
49
|
# Accepts a stream of Points on a route being traversed, returning a
|
|
50
50
|
# RouteSummary when traversal is completed.
|
|
51
|
-
rpc :RecordRoute, stream(Point), RouteSummary
|
|
51
|
+
rpc :RecordRoute, stream(::Routeguide::Point), ::Routeguide::RouteSummary
|
|
52
52
|
# A Bidirectional streaming RPC.
|
|
53
53
|
#
|
|
54
54
|
# Accepts a stream of RouteNotes sent while a route is being traversed,
|
|
55
55
|
# while receiving other RouteNotes (e.g. from other users).
|
|
56
|
-
rpc :RouteChat, stream(RouteNote), stream(RouteNote)
|
|
56
|
+
rpc :RouteChat, stream(::Routeguide::RouteNote), stream(::Routeguide::RouteNote)
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
Stub = Service.rpc_stub_class
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
$LOAD_PATH.unshift File.expand_path('./examples/routeguide')
|
|
4
4
|
|
|
5
5
|
require 'grpc_kit'
|
|
6
|
-
require 'pry'
|
|
7
6
|
require 'json'
|
|
7
|
+
require 'socket'
|
|
8
8
|
require 'routeguide_services_pb'
|
|
9
9
|
|
|
10
10
|
RESOURCE_PATH = './examples/routeguide/routeguide.json'
|
|
@@ -48,7 +48,7 @@ def record_route(stub, size)
|
|
|
48
48
|
JSON.parse(f.read)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
stream = stub.record_route
|
|
51
|
+
stream = stub.record_route
|
|
52
52
|
|
|
53
53
|
size.times do
|
|
54
54
|
location = features.sample['location']
|
data/grpc_kit.gemspec
CHANGED
|
@@ -25,10 +25,11 @@ Gem::Specification.new do |spec|
|
|
|
25
25
|
spec.add_dependency 'ds9', '>= 1.4.0'
|
|
26
26
|
spec.add_dependency 'google-protobuf', '>= 3.7.0'
|
|
27
27
|
spec.add_dependency 'googleapis-common-protos-types', '>= 1.0.2'
|
|
28
|
+
spec.add_dependency 'logger'
|
|
28
29
|
|
|
29
30
|
spec.add_development_dependency 'bundler'
|
|
30
31
|
spec.add_development_dependency 'grpc-tools', '~> 1.18.0'
|
|
31
|
-
spec.add_development_dependency '
|
|
32
|
+
spec.add_development_dependency 'irb'
|
|
32
33
|
spec.add_development_dependency 'rake'
|
|
33
34
|
spec.add_development_dependency 'rspec'
|
|
34
35
|
spec.add_development_dependency 'rubocop'
|
|
@@ -17,9 +17,6 @@ module GrpcKit
|
|
|
17
17
|
@rpcs = rpcs
|
|
18
18
|
@max_pool_size = max
|
|
19
19
|
@min_pool_size = min
|
|
20
|
-
unless max == min
|
|
21
|
-
@auto_trimmer = AutoTrimmer.new(self, interval: interval).tap(&:start!)
|
|
22
|
-
end
|
|
23
20
|
|
|
24
21
|
@shutdown = false
|
|
25
22
|
@tasks = Queue.new
|
|
@@ -28,6 +25,10 @@ module GrpcKit
|
|
|
28
25
|
@mutex = Mutex.new
|
|
29
26
|
|
|
30
27
|
@min_pool_size.times { spawn_thread }
|
|
28
|
+
|
|
29
|
+
unless max == min
|
|
30
|
+
@auto_trimmer = AutoTrimmer.new(self, interval: interval).tap(&:start!)
|
|
31
|
+
end
|
|
31
32
|
end
|
|
32
33
|
|
|
33
34
|
# @param task [Object] task to dispatch
|
data/lib/grpc_kit/session/io.rb
CHANGED
|
@@ -45,7 +45,7 @@ module GrpcKit
|
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
# Blocking until io object is readable
|
|
48
|
-
# @return [
|
|
48
|
+
# @return [Boolean] false when the io object is already closed
|
|
49
49
|
def wait_readable
|
|
50
50
|
::IO.select([@io], [], [])
|
|
51
51
|
true
|
|
@@ -54,10 +54,12 @@ module GrpcKit
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# Blocking until io object is readable or writable
|
|
57
|
-
# @
|
|
57
|
+
# @param timeout [Integer, Float, nil] seconds to wait, or nil to block forever
|
|
58
|
+
# @param write [Boolean] whether to wait for writability as well
|
|
59
|
+
# @return [Array(Array<::IO>, Array<::IO>)] readable ios and writable ios, both empty on timeout.
|
|
58
60
|
def select(timeout: 1, write: true)
|
|
59
61
|
rs, ws = ::IO.select([@io, @wake_o], write ? [@io] : [], [], timeout)
|
|
60
|
-
|
|
62
|
+
drain_waker if rs&.delete(@wake_o)
|
|
61
63
|
[rs || [], ws || []]
|
|
62
64
|
end
|
|
63
65
|
|
|
@@ -74,6 +76,18 @@ module GrpcKit
|
|
|
74
76
|
def flush
|
|
75
77
|
@io.flush
|
|
76
78
|
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
|
|
82
|
+
# @return [void]
|
|
83
|
+
def drain_waker
|
|
84
|
+
return if @wake_o.closed?
|
|
85
|
+
|
|
86
|
+
loop do
|
|
87
|
+
data = @wake_o.read_nonblock(4096, exception: false)
|
|
88
|
+
break if [:wait_readable, nil].include?(data) # EAGAIN, EWOULDBLOCK, or EOF
|
|
89
|
+
end
|
|
90
|
+
end
|
|
77
91
|
end
|
|
78
92
|
end
|
|
79
93
|
end
|
data/lib/grpc_kit/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: grpc_kit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yuta Iwama
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: ds9
|
|
@@ -52,6 +51,20 @@ dependencies:
|
|
|
52
51
|
- - ">="
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
53
|
version: 1.0.2
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: logger
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
55
68
|
- !ruby/object:Gem::Dependency
|
|
56
69
|
name: bundler
|
|
57
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -81,7 +94,7 @@ dependencies:
|
|
|
81
94
|
- !ruby/object:Gem::Version
|
|
82
95
|
version: 1.18.0
|
|
83
96
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
97
|
+
name: irb
|
|
85
98
|
requirement: !ruby/object:Gem::Requirement
|
|
86
99
|
requirements:
|
|
87
100
|
- - ">="
|
|
@@ -237,7 +250,6 @@ homepage: https://github.com/ganmacs/grpc_kit
|
|
|
237
250
|
licenses:
|
|
238
251
|
- MIT
|
|
239
252
|
metadata: {}
|
|
240
|
-
post_install_message:
|
|
241
253
|
rdoc_options: []
|
|
242
254
|
require_paths:
|
|
243
255
|
- lib
|
|
@@ -252,8 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
252
264
|
- !ruby/object:Gem::Version
|
|
253
265
|
version: '0'
|
|
254
266
|
requirements: []
|
|
255
|
-
rubygems_version:
|
|
256
|
-
signing_key:
|
|
267
|
+
rubygems_version: 4.0.19
|
|
257
268
|
specification_version: 4
|
|
258
269
|
summary: A kit for creating gRPC server/client
|
|
259
270
|
test_files: []
|