grpcx 0.1.1 → 0.3.2

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
  SHA256:
3
- metadata.gz: 7e6bcd16e9fceffd33f50eb1f4329ce55b9c983ff434f8688cbc2cf2432012d0
4
- data.tar.gz: 79fb5b99a06087b37e0a8af8c36c13eebaf07b81a797459144b144adcecc3e07
3
+ metadata.gz: ae9c03741c37bfd3ee885a9a95623e8daba6abaed7ead588f75c79f46d45e44d
4
+ data.tar.gz: 7d2c52dfac712a2b1cf961ec3316fc0bc0dada3f81ebff4862e11fed43d05994
5
5
  SHA512:
6
- metadata.gz: e19042030a742d1f985dde51ef366402bbd062c3fe4f2d17d987c6dbc40db0cf069ad61f746648291987d0011b38d28f757e3dd8b9b5bdcdff738ba34029b228
7
- data.tar.gz: a79ba2d070d331afa74b95f439f0cfa0fa243d2e5c6b11186d3175374f3a435b304082ad67ec2ba34230415dda06add606101b0762ed8823b36b4c4c19448443
6
+ metadata.gz: 061002012c4005ee48ca374505bd4fbb1f29a09c98d444d99517871eaace0317c8a455c444a6f9a88c32287e751bf65cc3f5778b1ad487024f28997329584deb
7
+ data.tar.gz: ccdf1e5cc44b92b46214bc02c8ed29d03faea2f45964663f3bb59ca1873da7457a1e630c58c46b4f74bd0dd2447fc2d908877621f7387b9d20121882619053a3
@@ -0,0 +1,21 @@
1
+ name: Test
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ pull_request:
7
+ branches:
8
+ - main
9
+ jobs:
10
+ ruby:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ ruby-version: ["2.7", "3.0", "3.1"]
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+ bundler-cache: true
21
+ - run: bundle exec rake
data/.gitignore CHANGED
@@ -1,2 +1,4 @@
1
1
  .rubocop-*
2
+ .rake_tasks~
2
3
  pkg/
4
+ *~
data/.rubocop.yml CHANGED
@@ -1,9 +1,14 @@
1
- inherit_from:
2
- - https://storage.googleapis.com/bsm-misc/rubocop.yml
1
+ inherit_gem:
2
+ rubocop-bsm:
3
+ - default.yml
4
+ inherit_mode:
5
+ merge:
6
+ - Exclude
3
7
 
4
8
  AllCops:
5
- TargetRubyVersion: 2.2
9
+ TargetRubyVersion: "2.7"
6
10
 
7
- Metrics/AbcSize:
11
+ RSpec/FilePath:
12
+ Enabled: false
13
+ Lint/EmptyBlock:
8
14
  Enabled: false
9
-
data/Gemfile.lock CHANGED
@@ -1,96 +1,82 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grpcx (0.1.1)
4
+ grpcx (0.3.2)
5
5
  activesupport (>= 5.0)
6
6
  grpc (>= 1.8.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activemodel (5.2.0)
12
- activesupport (= 5.2.0)
13
- activerecord (5.2.0)
14
- activemodel (= 5.2.0)
15
- activesupport (= 5.2.0)
16
- arel (>= 9.0)
17
- activesupport (5.2.0)
11
+ activemodel (7.0.1)
12
+ activesupport (= 7.0.1)
13
+ activerecord (7.0.1)
14
+ activemodel (= 7.0.1)
15
+ activesupport (= 7.0.1)
16
+ activesupport (7.0.1)
18
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
- i18n (>= 0.7, < 2)
20
- minitest (~> 5.1)
21
- tzinfo (~> 1.1)
22
- addressable (2.5.2)
23
- public_suffix (>= 2.0.2, < 4.0)
24
- arel (9.0.0)
25
- ast (2.4.0)
26
- concurrent-ruby (1.0.5)
27
- diff-lcs (1.3)
28
- faraday (0.15.0)
29
- multipart-post (>= 1.2, < 3)
30
- google-protobuf (3.5.1.2-x86_64-linux)
31
- googleapis-common-protos-types (1.0.1)
32
- google-protobuf (~> 3.0)
33
- googleauth (0.6.2)
34
- faraday (~> 0.12)
35
- jwt (>= 1.4, < 3.0)
36
- logging (~> 2.0)
37
- memoist (~> 0.12)
38
- multi_json (~> 1.11)
39
- os (~> 0.9)
40
- signet (~> 0.7)
41
- grpc (1.11.0-x86_64-linux)
42
- google-protobuf (~> 3.1)
43
- googleapis-common-protos-types (~> 1.0.0)
44
- googleauth (>= 0.5.1, < 0.7)
45
- i18n (1.0.1)
18
+ i18n (>= 1.6, < 2)
19
+ minitest (>= 5.1)
20
+ tzinfo (~> 2.0)
21
+ ast (2.4.2)
22
+ concurrent-ruby (1.1.9)
23
+ diff-lcs (1.5.0)
24
+ google-protobuf (3.19.2)
25
+ googleapis-common-protos-types (1.3.0)
26
+ google-protobuf (~> 3.14)
27
+ grpc (1.42.0)
28
+ google-protobuf (~> 3.18)
29
+ googleapis-common-protos-types (~> 1.0)
30
+ i18n (1.8.11)
46
31
  concurrent-ruby (~> 1.0)
47
- jwt (2.1.0)
48
- little-plugger (1.1.4)
49
- logging (2.2.2)
50
- little-plugger (~> 1.1)
51
- multi_json (~> 1.10)
52
- memoist (0.16.0)
53
- minitest (5.11.3)
54
- multi_json (1.13.1)
55
- multipart-post (2.0.0)
56
- os (0.9.6)
57
- parallel (1.12.1)
58
- parser (2.5.1.0)
59
- ast (~> 2.4.0)
60
- powerpack (0.1.1)
61
- public_suffix (3.0.2)
32
+ minitest (5.15.0)
33
+ parallel (1.21.0)
34
+ parser (3.1.0.0)
35
+ ast (~> 2.4.1)
62
36
  rainbow (3.0.0)
63
- rake (12.3.1)
64
- rspec (3.7.0)
65
- rspec-core (~> 3.7.0)
66
- rspec-expectations (~> 3.7.0)
67
- rspec-mocks (~> 3.7.0)
68
- rspec-core (3.7.1)
69
- rspec-support (~> 3.7.0)
70
- rspec-expectations (3.7.0)
37
+ rake (13.0.6)
38
+ regexp_parser (2.2.0)
39
+ rexml (3.2.5)
40
+ rspec (3.10.0)
41
+ rspec-core (~> 3.10.0)
42
+ rspec-expectations (~> 3.10.0)
43
+ rspec-mocks (~> 3.10.0)
44
+ rspec-core (3.10.1)
45
+ rspec-support (~> 3.10.0)
46
+ rspec-expectations (3.10.1)
71
47
  diff-lcs (>= 1.2.0, < 2.0)
72
- rspec-support (~> 3.7.0)
73
- rspec-mocks (3.7.0)
48
+ rspec-support (~> 3.10.0)
49
+ rspec-mocks (3.10.2)
74
50
  diff-lcs (>= 1.2.0, < 2.0)
75
- rspec-support (~> 3.7.0)
76
- rspec-support (3.7.1)
77
- rubocop (0.55.0)
51
+ rspec-support (~> 3.10.0)
52
+ rspec-support (3.10.3)
53
+ rubocop (1.24.1)
78
54
  parallel (~> 1.10)
79
- parser (>= 2.5)
80
- powerpack (~> 0.1)
55
+ parser (>= 3.0.0.0)
81
56
  rainbow (>= 2.2.2, < 4.0)
57
+ regexp_parser (>= 1.8, < 3.0)
58
+ rexml
59
+ rubocop-ast (>= 1.15.1, < 2.0)
82
60
  ruby-progressbar (~> 1.7)
83
- unicode-display_width (~> 1.0, >= 1.0.1)
84
- ruby-progressbar (1.9.0)
85
- signet (0.8.1)
86
- addressable (~> 2.3)
87
- faraday (~> 0.9)
88
- jwt (>= 1.5, < 3.0)
89
- multi_json (~> 1.10)
90
- thread_safe (0.3.6)
91
- tzinfo (1.2.5)
92
- thread_safe (~> 0.1)
93
- unicode-display_width (1.3.2)
61
+ unicode-display_width (>= 1.4.0, < 3.0)
62
+ rubocop-ast (1.15.1)
63
+ parser (>= 3.0.1.1)
64
+ rubocop-bsm (0.6.0)
65
+ rubocop (~> 1.0)
66
+ rubocop-performance
67
+ rubocop-rake
68
+ rubocop-rspec
69
+ rubocop-performance (1.13.1)
70
+ rubocop (>= 1.7.0, < 2.0)
71
+ rubocop-ast (>= 0.4.0)
72
+ rubocop-rake (0.6.0)
73
+ rubocop (~> 1.0)
74
+ rubocop-rspec (2.7.0)
75
+ rubocop (~> 1.19)
76
+ ruby-progressbar (1.11.0)
77
+ tzinfo (2.0.4)
78
+ concurrent-ruby (~> 1.0)
79
+ unicode-display_width (2.1.0)
94
80
 
95
81
  PLATFORMS
96
82
  ruby
@@ -101,7 +87,7 @@ DEPENDENCIES
101
87
  grpcx!
102
88
  rake
103
89
  rspec
104
- rubocop
90
+ rubocop-bsm
105
91
 
106
92
  BUNDLED WITH
107
- 1.16.1
93
+ 2.2.27
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # grpcx
2
2
 
3
- Ruby gRPC extensions/helpers
3
+ [![Test](https://github.com/bsm/grpcx/actions/workflows/test.yml/badge.svg)](https://github.com/bsm/grpcx/actions/workflows/test.yml)
4
4
 
5
+ Ruby gRPC extensions/helpers
5
6
 
6
7
  # Grpcx::Server
7
8
 
@@ -9,10 +10,9 @@ Mixin for `GRPC::RpcServer`:
9
10
 
10
11
  - handles [GRPC health checks](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) requests
11
12
  - handles `ActiveRecord` connection (auto-connect + pooling)
12
- - instruments each request with `ActiveSupport::Notifications` (available as `process_action.grpc`, includes `action: METHOD_NAME` data)
13
+ - instruments each request with `ActiveSupport::Notifications` (available as `process_action.grpc`, includes `service: 'package.name.ServiceName', action: 'underscored_action_name'` data)
13
14
  - includes `ActiveSupport::Rescuable` and transforms most common `ActiveRecord::ActiveRecordError`-s into `GRPC::BadStatus` ones
14
15
 
15
-
16
16
  Example:
17
17
 
18
18
  ```ruby
@@ -47,50 +47,27 @@ end
47
47
  ...
48
48
  ```
49
49
 
50
-
51
50
  ## Using with [Datadog::Notifications](https://github.com/bsm/datadog-notifications)
52
51
 
53
- ```ruby
54
- module Datadog::Notifications::Plugins
55
- class GRPC < Base
56
-
57
- def initialize(opts={})
58
- super
59
- Datadog::Notifications.subscribe 'process_action.grpc' do |reporter, event|
60
- record(reporter, event)
61
- end
62
- end
63
-
64
- private
65
-
66
- def record(reporter, event)
67
- action = event.payload[:action]
68
- status = event.payload[:exception] ? 'error' : 'ok'
69
- tags = self.tags + ["rpc:#{action}", "status:#{status}"]
70
-
71
- reporter.batch do
72
- reporter.increment 'grpc.request', tags: tags
73
- reporter.timing 'grpc.request.time', event.duration, tags: tags
74
- end
75
- end
76
-
77
- end
78
- end
52
+ Since version >= [0.5.4](https://github.com/bsm/datadog-notifications/releases/tag/v0.5.4)
79
53
 
54
+ ```ruby
80
55
  Datadog::Notifications.configure do |c|
81
56
  c.use Datadog::Notifications::Plugins::GRPC
82
57
  end if RUNNING_IN_PROD?
83
58
  ```
84
59
 
85
-
86
60
  ## Using with [Sentry](https://sentry.io/)/[Raven](https://github.com/getsentry/raven-ruby)
87
61
 
88
62
  ```ruby
89
- ActiveSupport::Notifications.subscribe('process_action.grpc') do |_name, _start, _finish, _id, payload|
63
+ ActiveSupport::Notifications.subscribe(Grpcx::Server::Interceptors::Instrumentation::METRIC_NAME) do |_name, _start, _finish, _id, payload|
90
64
  e = payload[:exception_object]
91
65
  next unless e
92
66
 
93
- Raven.capture_exception(e)
67
+ Raven.capture_exception(e, extra: {
68
+ 'service' => payload[:service],
69
+ 'action' => payload[:action],
70
+ })
94
71
  end
95
72
 
96
73
  Raven.configure do |config|
data/grpcx.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'grpcx'
3
- s.version = '0.1.1'
3
+ s.version = '0.3.2'
4
4
  s.authors = ['Black Square Media Ltd']
5
5
  s.email = ['info@blacksquaremedia.com']
6
6
  s.summary = %(gRPC extensions/helpers)
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^spec/}) }
12
12
  s.test_files = `git ls-files -z -- spec/*`.split("\x0")
13
13
  s.require_paths = ['lib']
14
- s.required_ruby_version = '>= 2.2'
14
+ s.required_ruby_version = '>= 2.7'
15
15
 
16
16
  s.add_dependency 'activesupport', '>= 5.0'
17
17
  s.add_dependency 'grpc', '>= 1.8.0'
@@ -20,5 +20,6 @@ Gem::Specification.new do |s|
20
20
  s.add_development_dependency 'bundler'
21
21
  s.add_development_dependency 'rake'
22
22
  s.add_development_dependency 'rspec'
23
- s.add_development_dependency 'rubocop'
23
+ s.add_development_dependency 'rubocop-bsm'
24
+ s.metadata['rubygems_mfa_required'] = 'true'
24
25
  end
@@ -0,0 +1,58 @@
1
+ require 'active_support/core_ext/hash/indifferent_access'
2
+ require 'set'
3
+
4
+ module Grpcx
5
+ # Entity releated helpers
6
+ module Entity
7
+ def self._convert(field, value, &block)
8
+ field.label == :repeated ? value.map(&block) : yield(value) if value # rubocop:disable Style/IfUnlessModifierOfIfUnless
9
+ end
10
+
11
+ module_function
12
+
13
+ TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON'].to_set.freeze
14
+
15
+ # @param [Class] msgclass messagepack message class
16
+ # @param [Hash] attrs attributes to assign
17
+ def build(msgclass, attrs = {}) # rubocop:disable Metrics/MethodLength
18
+ attrs = ActiveSupport::HashWithIndifferentAccess.new(attrs)
19
+ fields = {}
20
+ msgclass.descriptor.each do |field| # rubocop:disable Metrics/BlockLength
21
+ next unless attrs.key?(field.name)
22
+
23
+ source = attrs[field.name]
24
+ target = nil
25
+
26
+ case field.type
27
+ when :int64, :int32
28
+ target = Entity._convert(field, source, &:to_i)
29
+ when :float, :double
30
+ target = Entity._convert(field, source, &:to_f)
31
+ when :string
32
+ target = Entity._convert(field, source, &:to_s)
33
+ when :bool
34
+ target = Entity._convert(field, source) do |vv|
35
+ TRUE_VALUES.include?(vv)
36
+ end
37
+ when :enum
38
+ target = Entity._convert(field, source) do |vv|
39
+ case vv
40
+ when Integer
41
+ vv
42
+ when String, Symbol
43
+ field.subtype.lookup_name(vv.to_s.upcase.to_sym)
44
+ end
45
+ end
46
+ when :message
47
+ target = Entity._convert(field, source) do |vv|
48
+ build(field.subtype.msgclass, vv)
49
+ end
50
+ end
51
+
52
+ fields[field.name] = target if target
53
+ end
54
+
55
+ msgclass.new(fields)
56
+ end
57
+ end
58
+ end
@@ -5,7 +5,6 @@ module Grpcx
5
5
  # making sure that connection is established before each request
6
6
  # and re-pooling connections when request is processed.
7
7
  class ActiveRecord < GRPC::ServerInterceptor
8
-
9
8
  def request_response(*, &block)
10
9
  wrap(&block)
11
10
  end
@@ -30,7 +29,6 @@ module Grpcx
30
29
  ensure
31
30
  ::ActiveRecord::Base.clear_active_connections!
32
31
  end
33
-
34
32
  end
35
33
  end
36
34
  end
@@ -6,28 +6,29 @@ module Grpcx
6
6
  class Instrumentation < GRPC::ServerInterceptor
7
7
  METRIC_NAME = 'process_action.grpc'.freeze
8
8
 
9
- def request_response(opts={}, &block)
10
- instrument(action: opts[:method], &block)
9
+ def request_response(opts = {}, &block)
10
+ instrument(opts[:method], &block)
11
11
  end
12
12
 
13
- def client_streamer(opts={}, &block)
14
- instrument(action: opts[:method], &block)
13
+ def client_streamer(opts = {}, &block)
14
+ instrument(opts[:method], &block)
15
15
  end
16
16
 
17
- def server_streamer(opts={}, &block)
18
- instrument(action: opts[:method], &block)
17
+ def server_streamer(opts = {}, &block)
18
+ instrument(opts[:method], &block)
19
19
  end
20
20
 
21
- def bidi_streamer(opts={}, &block)
22
- instrument(action: opts[:method], &block)
21
+ def bidi_streamer(opts = {}, &block)
22
+ instrument(opts[:method], &block)
23
23
  end
24
24
 
25
25
  private
26
26
 
27
- def instrument(opts={}, &block)
28
- ActiveSupport::Notifications.instrument(METRIC_NAME, opts, &block)
27
+ def instrument(method, &block)
28
+ service = method.owner.service_name # method is just a standard ruby Method class, so `owner` is a service impl
29
+ action = method.name # does not match real proto service name; it's a GRPC::GenericService.underscore-d version
30
+ ActiveSupport::Notifications.instrument(METRIC_NAME, service: service, action: action, &block)
29
31
  end
30
-
31
32
  end
32
33
  end
33
34
  end
@@ -2,35 +2,34 @@ module Grpcx
2
2
  module Server
3
3
  module Interceptors
4
4
  class Rescue < GRPC::ServerInterceptor
5
- def initialize(rescuable, opts={})
5
+ def initialize(rescuable, opts = {})
6
6
  @rescuable = rescuable
7
7
  super(opts)
8
8
  end
9
9
 
10
10
  def request_response(*)
11
11
  yield
12
- rescue StandardError => err
13
- @rescuable.rescue_with_handler(err) || raise
12
+ rescue StandardError => e
13
+ @rescuable.rescue_with_handler(e) || raise
14
14
  end
15
15
 
16
16
  def client_streamer(*)
17
17
  yield
18
- rescue StandardError => err
19
- @rescuable.rescue_with_handler(err) || raise
18
+ rescue StandardError => e
19
+ @rescuable.rescue_with_handler(e) || raise
20
20
  end
21
21
 
22
22
  def server_streamer(*)
23
23
  yield
24
- rescue StandardError => err
25
- @rescuable.rescue_with_handler(err) || raise
24
+ rescue StandardError => e
25
+ @rescuable.rescue_with_handler(e) || raise
26
26
  end
27
27
 
28
28
  def bidi_streamer(*)
29
29
  yield
30
- rescue StandardError => err
31
- @rescuable.rescue_with_handler(err) || raise
30
+ rescue StandardError => e
31
+ @rescuable.rescue_with_handler(e) || raise
32
32
  end
33
-
34
33
  end
35
34
  end
36
35
  end
data/lib/grpcx/server.rb CHANGED
@@ -22,7 +22,7 @@ module Grpcx
22
22
  end
23
23
  end
24
24
 
25
- def initialize(opts={})
25
+ def initialize(**opts)
26
26
  opts[:pool_size] ||= ENV['GRPC_SERVER_THREADS'].to_i if ENV['GRPC_SERVER_THREADS']
27
27
  opts[:max_waiting_requests] ||= ENV['GRPC_SERVER_QUEUE'].to_i if ENV['GRPC_SERVER_QUEUE']
28
28
 
@@ -32,7 +32,7 @@ module Grpcx
32
32
  opts[:interceptors].prepend Grpcx::Server::Interceptors::Instrumentation.new
33
33
  opts[:interceptors].prepend Grpcx::Server::Interceptors::ActiveRecord.new if defined?(::ActiveRecord)
34
34
 
35
- super(opts).tap do
35
+ super.tap do
36
36
  handle(health)
37
37
  end
38
38
  end
data/lib/grpcx.rb CHANGED
@@ -1 +1,2 @@
1
1
  require 'grpcx/server'
2
+ require 'grpcx/entity'
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Grpcx::Entity do
4
+ it 'builds messages' do
5
+ msg = described_class.build Grpcx::Spec::Message,
6
+ name: 'Name',
7
+ version: 1,
8
+ types: {
9
+ num: 8,
10
+ truth: [1, 0, true, 'true'],
11
+ decimal: '1.2',
12
+ }
13
+
14
+ expect(msg.to_h).to eq(
15
+ name: 'Name',
16
+ version: :V1,
17
+ types: {
18
+ num: 8,
19
+ truth: [true, false, true, true],
20
+ decimal: 1.2,
21
+ },
22
+ )
23
+ end
24
+ end
@@ -1,14 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe Grpcx::Server do
4
-
5
4
  subject do
6
5
  s = Grpcx::Spec::Server.new
7
6
  s.handle Grpcx::Spec::Service::V1
8
7
  s
9
8
  end
10
9
 
11
- it 'should have a health-check' do
10
+ it 'has a health-check' do
12
11
  expect(subject.health).to be_a(Grpc::Health::Checker)
13
12
  expect(subject.health.instance_variable_get(:@statuses)).to eq(
14
13
  'grpcx.spec.service.V1' => 1,
@@ -16,14 +15,14 @@ RSpec.describe Grpcx::Server do
16
15
  )
17
16
  end
18
17
 
19
- it 'should have interceptors' do
18
+ it 'has interceptors' do
20
19
  expect(subject.interceptors).to be_a(GRPC::InterceptorRegistry)
21
20
 
22
21
  registered = subject.interceptors.instance_variable_get(:@interceptors)
23
22
  expect(registered.size).to eq(3)
24
23
  end
25
24
 
26
- it 'should have rescue handlers' do
25
+ it 'has rescue handlers' do
27
26
  expect(subject.rescue_handlers.size).to eq(3)
28
27
  expect(subject.rescue_handlers.map(&:first)).to match_array %w[
29
28
  ActiveRecord::RecordInvalid
@@ -31,5 +30,4 @@ RSpec.describe Grpcx::Server do
31
30
  ArgumentError
32
31
  ]
33
32
  end
34
-
35
33
  end
data/spec/spec_helper.rb CHANGED
@@ -4,22 +4,30 @@ require 'active_record'
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "grpcx.spec.Message" do
7
+ add_message 'grpcx.spec.Message' do
8
8
  optional :name, :string, 1
9
+ optional :version, :enum, 2, 'grpcx.spec.Version'
10
+ optional :types, :message, 3, 'grpcx.spec.Types'
9
11
  end
10
- add_enum "grpcx.spec.Enum" do
12
+ add_message 'grpcx.spec.Types' do
13
+ optional :num, :int64, 1
14
+ repeated :truth, :bool, 2
15
+ optional :decimal, :double, 3
16
+ end
17
+ add_enum 'grpcx.spec.Version' do
11
18
  value :V0, 0
12
19
  value :V1, 1
13
20
  value :V2, 2
14
21
  end
15
- add_message "grpcx.spec.GetMessageRequest" do
22
+ add_message 'grpcx.spec.GetMessageRequest' do
16
23
  end
17
24
  end
18
25
 
19
26
  module Grpcx::Spec
20
- Message = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpcx.spec.Message").msgclass
21
- Enum = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpcx.spec.Enum").enummodule
22
- GetMessageRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpcx.spec.GetMessageRequest").msgclass
27
+ Message = Google::Protobuf::DescriptorPool.generated_pool.lookup('grpcx.spec.Message').msgclass
28
+ Version = Google::Protobuf::DescriptorPool.generated_pool.lookup('grpcx.spec.Version').enummodule
29
+ Types = Google::Protobuf::DescriptorPool.generated_pool.lookup('grpcx.spec.Types').msgclass
30
+ GetMessageRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup('grpcx.spec.GetMessageRequest').msgclass
23
31
 
24
32
  module Service
25
33
  class V1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grpcx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Black Square Media Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-10 00:00:00.000000000 Z
11
+ date: 2022-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rubocop
98
+ name: rubocop-bsm
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -116,6 +116,7 @@ extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
118
  - ".editorconfig"
119
+ - ".github/workflows/test.yml"
119
120
  - ".gitignore"
120
121
  - ".rubocop.yml"
121
122
  - Gemfile
@@ -124,17 +125,20 @@ files:
124
125
  - Rakefile
125
126
  - grpcx.gemspec
126
127
  - lib/grpcx.rb
128
+ - lib/grpcx/entity.rb
127
129
  - lib/grpcx/server.rb
128
130
  - lib/grpcx/server/interceptors.rb
129
131
  - lib/grpcx/server/interceptors/active_record.rb
130
132
  - lib/grpcx/server/interceptors/instrumentation.rb
131
133
  - lib/grpcx/server/interceptors/rescue.rb
134
+ - spec/lib/entity_spec.rb
132
135
  - spec/lib/server_spec.rb
133
136
  - spec/spec_helper.rb
134
137
  homepage: https://github.com/bsm/grpcx
135
138
  licenses:
136
139
  - MIT
137
- metadata: {}
140
+ metadata:
141
+ rubygems_mfa_required: 'true'
138
142
  post_install_message:
139
143
  rdoc_options: []
140
144
  require_paths:
@@ -143,18 +147,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
147
  requirements:
144
148
  - - ">="
145
149
  - !ruby/object:Gem::Version
146
- version: '2.2'
150
+ version: '2.7'
147
151
  required_rubygems_version: !ruby/object:Gem::Requirement
148
152
  requirements:
149
153
  - - ">="
150
154
  - !ruby/object:Gem::Version
151
155
  version: '0'
152
156
  requirements: []
153
- rubyforge_project:
154
- rubygems_version: 2.7.3
157
+ rubygems_version: 3.2.15
155
158
  signing_key:
156
159
  specification_version: 4
157
160
  summary: gRPC extensions/helpers
158
161
  test_files:
162
+ - spec/lib/entity_spec.rb
159
163
  - spec/lib/server_spec.rb
160
164
  - spec/spec_helper.rb