gruf 2.8.1 → 2.9.0

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
  SHA256:
3
- metadata.gz: 9118663c1224b49c07fe40743b6766121b1be507301e4ca64f2f3e7ef18a5b25
4
- data.tar.gz: 2025ab3f6f93b8c13bdb983e869a003415d3933340e94f15eb866d65826f954b
3
+ metadata.gz: 77be459526bb01a2e709cb26663e0b2bbdc614eb28de7084a132c14d741fef66
4
+ data.tar.gz: b36e8446fd325c42b9c494370b09fd9ecd2364d5a84194683f5d9d81961dd5b2
5
5
  SHA512:
6
- metadata.gz: ffd6e423548aeb8785e7063618875298b9f13570e8e1fc6b5cf24d2426059d4e98c9d3414f179a4fd071d6b4263f279666c38ca2439dfa0e7937cc2dfa79af84
7
- data.tar.gz: 5ee7fbe4964edbda7b90192ff5432a3d61897d08896a84676ae19d5c105aab6287c48f6c02368a10c0e75d9eaa1e784f8748564cc86dc2c7bf0762106b27b4fe
6
+ metadata.gz: 9d11c575a288e18321aeee6de57b9b9c8a9db09e2c200ce3c5a50d7331e7e1af2975bcba2ae276917e0bf087bbc7c1f0726b4df13d9861bab361c66069a691f9
7
+ data.tar.gz: baed74a1e86746ae86314f4fa33065f1b0a3d9ae479c8f288f444444be24e78d76a9f0337cdcfe62b9637d53e6709cf031122cf8728bf709abaa4e6fd79ad788
data/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@ Changelog for the gruf gem. This includes internal history before the gem was ma
2
2
 
3
3
  ### Pending release
4
4
 
5
+ ### 2.9.0
6
+
7
+ - Change to racially neutral terminology across library
8
+ - blacklist->blocklist
9
+ - master->main branch
10
+ - Explicitly declare development dependencies in gemspec
11
+ - Add script/e2e test for full e2e test in regression suite
12
+ - Explicitly declare [json gem](https://rubygems.org/gems/json) dependency
13
+ - Update to Rubocop 1.4, add in rubocop-rspec for spec tests
14
+ - Add Ruby 2.7, 3.0 support
15
+
5
16
  ### 2.8.1
6
17
 
7
18
  - Fix issue with --suppress-default-interceptors not working [#95]
@@ -145,11 +156,11 @@ Gruf 2.0 is a major shift from Gruf 1.0. See [UPGRADING.md](UPGRADING.md) for de
145
156
  ### 1.2.4
146
157
 
147
158
  - Loosen explicit Protobuf dependency now that 3.4.0.2 is released
148
- - Guard against nil params in logger blacklist
159
+ - Guard against nil params in logger blocklist
149
160
 
150
161
  ### 1.2.3
151
162
 
152
- - Support nested blacklist parameters in path.to.key format
163
+ - Support nested blocklist parameters in path.to.key format
153
164
 
154
165
  ### 1.2.2
155
166
 
@@ -171,7 +182,7 @@ Gruf 2.0 is a major shift from Gruf 1.0. See [UPGRADING.md](UPGRADING.md) for de
171
182
  - Add configuration to set the error message when an uncaught exception is
172
183
  handled by gruf.
173
184
  - Add a request logging hook for Rails-style request logging, with optional
174
- parameter logging, blacklists, and formatter support
185
+ parameter logging, blocklists, and formatter support
175
186
  - Optimizations around Symbol casting within service calls
176
187
 
177
188
  ### 1.1.0
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # gruf - gRPC Ruby Framework
2
2
 
3
- [![CircleCI](https://circleci.com/gh/bigcommerce/gruf/tree/master.svg?style=svg)](https://circleci.com/gh/bigcommerce/gruf/tree/master) [![Gem Version](https://badge.fury.io/rb/gruf.svg)](https://badge.fury.io/rb/gruf) [![Documentation](https://inch-ci.org/github/bigcommerce/gruf.svg?branch=master)](https://inch-ci.org/github/bigcommerce/gruf?branch=master)
3
+ [![CircleCI](https://circleci.com/gh/bigcommerce/gruf/tree/main.svg?style=svg)](https://circleci.com/gh/bigcommerce/gruf/tree/main) [![Gem Version](https://badge.fury.io/rb/gruf.svg)](https://badge.fury.io/rb/gruf) [![Documentation](https://inch-ci.org/github/bigcommerce/gruf.svg?branch=main)](https://inch-ci.org/github/bigcommerce/gruf?branch=main)
4
4
 
5
- gruf is a Ruby framework that wraps the [gRPC Ruby library](https://github.com/grpc/grpc/tree/master/src/ruby) to
5
+ gruf is a Ruby framework that wraps the [gRPC Ruby library](https://github.com/grpc/grpc/tree/main/src/ruby) to
6
6
  provide a more streamlined integration into Ruby and Ruby on Rails applications.
7
7
 
8
8
  It provides an abstracted server and client for gRPC services, along with other tools to help get gRPC services in Ruby
@@ -17,7 +17,7 @@ up fast and efficiently at scale. Some of its features include:
17
17
  still preserving gRPC BadStatus codes
18
18
  * Server and client execution timings in responses
19
19
 
20
- gruf currently has active support for gRPC 1.10.x+. gruf is compatible and tested with Ruby 2.2-2.6.
20
+ gruf currently has active support for gRPC 1.10.x+. gruf is compatible and tested with Ruby 2.2-2.7.
21
21
  gruf is also not [Rails](https://github.com/rails/rails)-specific, and can be used in any Ruby framework
22
22
  (such as [Grape](https://github.com/ruby-grape/grape) or [dry-rb](https://dry-rb.org/), for instance).
23
23
 
data/gruf.gemspec CHANGED
@@ -15,7 +15,7 @@
15
15
  # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16
16
  # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
17
  #
18
- $:.push File.expand_path("../lib", __FILE__)
18
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
19
19
  require 'gruf/version'
20
20
 
21
21
  Gem::Specification.new do |spec|
@@ -30,19 +30,37 @@ Gem::Specification.new do |spec|
30
30
  spec.homepage = 'https://github.com/bigcommerce/gruf'
31
31
 
32
32
  spec.files = Dir['README.md', 'CHANGELOG.md', 'CODE_OF_CONDUCT.md', 'lib/**/*', 'gruf.gemspec']
33
- spec.executables << 'gruf'
33
+ spec.executables << 'gruf'
34
34
  spec.require_paths = ['lib']
35
35
 
36
- spec.required_ruby_version = '~> 2.4'
36
+ spec.required_ruby_version = '>= 2.4', '< 3.1'
37
37
 
38
38
  spec.add_development_dependency 'bundler', '~> 1.11'
39
+ spec.add_development_dependency 'bundler-audit', '>= 0.6'
40
+ # rubocop:disable Gemspec/RubyVersionGlobalsUsage
41
+ spec.add_development_dependency(
42
+ 'factory_bot',
43
+ (Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.5') ? '>= 6.1' : '~> 5.2')
44
+ )
45
+ # rubocop:enable Gemspec/RubyVersionGlobalsUsage
46
+ spec.add_development_dependency 'ffaker', '>= 2.15'
47
+ spec.add_development_dependency 'pry', '~> 0.12'
48
+ spec.add_development_dependency 'pry-byebug', '>= 3.9'
39
49
  spec.add_development_dependency 'rake', '>= 10.0'
40
- spec.add_development_dependency 'pry', '~> 0.11'
50
+ spec.add_development_dependency 'rspec', '>= 3.8'
51
+ spec.add_development_dependency 'rspec_junit_formatter', '>= 0.4'
52
+ spec.add_development_dependency 'rubocop', '>= 1.0'
53
+ spec.add_development_dependency 'rubocop-performance', '>= 0.0.1'
54
+ spec.add_development_dependency 'rubocop-rspec', '>= 2.0'
55
+ spec.add_development_dependency 'rubocop-thread_safety', '>= 0.3'
56
+ spec.add_development_dependency 'simplecov', '>= 0.16'
41
57
 
42
- spec.add_runtime_dependency 'grpc', '~> 1.10'
43
- spec.add_runtime_dependency 'grpc-tools', '~> 1.10'
44
58
  spec.add_runtime_dependency 'activesupport', '> 4'
45
-
46
59
  spec.add_runtime_dependency 'concurrent-ruby', '> 1'
60
+ spec.add_runtime_dependency 'e2mmap', '~> 0.1'
61
+ spec.add_runtime_dependency 'grpc', '~> 1.10'
62
+ spec.add_runtime_dependency 'grpc-tools', '~> 1.10'
63
+ spec.add_runtime_dependency 'json', '>= 2.3'
47
64
  spec.add_runtime_dependency 'slop', '~> 4.6'
65
+ spec.add_runtime_dependency 'thwait', '~> 0.1'
48
66
  end
@@ -38,7 +38,7 @@ module Gruf
38
38
  @services = services || Gruf.services
39
39
  @hook_executor = hook_executor || Gruf::Hooks::Executor.new(hooks: Gruf.hooks&.prepare)
40
40
  @server = server || Gruf::Server.new(Gruf.server_options)
41
- @logger = logger || Gruf.logger || ::Logger.new(STDERR)
41
+ @logger = logger || Gruf.logger || ::Logger.new($stderr)
42
42
  end
43
43
 
44
44
  ##
data/lib/gruf/client.rb CHANGED
@@ -63,7 +63,7 @@ module Gruf
63
63
  @opts[:channel_credentials] = @opts.fetch(:channel_credentials, Gruf.default_channel_credentials)
64
64
  @error_factory = Gruf::Client::ErrorFactory.new
65
65
  client_options[:timeout] = client_options[:timeout].to_i if client_options.key?(:timeout)
66
- client = "#{service}::Stub".constantize.new(@opts[:hostname], build_ssl_credentials, client_options)
66
+ client = "#{service}::Stub".constantize.new(@opts[:hostname], build_ssl_credentials, **client_options)
67
67
  super(client)
68
68
  end
69
69
 
@@ -33,6 +33,7 @@ module Gruf
33
33
  #
34
34
  def initialize(error)
35
35
  @error = error
36
+ super
36
37
  end
37
38
  end
38
39
 
@@ -57,6 +58,7 @@ module Gruf
57
58
  class FailedPrecondition < Error; end
58
59
  class Internal < Error; end
59
60
  class PermissionDenied < Error; end
61
+ class ResourceExhausted < Error; end
60
62
  class Unauthenticated < Error; end
61
63
  class Unavailable < Error; end
62
64
  class Unimplemented < Error; end
@@ -98,7 +98,7 @@ module Gruf
98
98
  #
99
99
  def reset
100
100
  VALID_CONFIG_KEYS.each do |k, v|
101
- send((k.to_s + '='), v)
101
+ send("#{k}=", v)
102
102
  end
103
103
  self.interceptors = Gruf::Interceptors::Registry.new
104
104
  self.hooks = Gruf::Hooks::Registry.new
@@ -107,7 +107,7 @@ module Gruf
107
107
  self.logger = Rails.logger
108
108
  else
109
109
  require 'logger'
110
- self.logger = ::Logger.new(STDOUT)
110
+ self.logger = ::Logger.new($stdout)
111
111
  end
112
112
  self.grpc_logger = logger if grpc_logger.nil?
113
113
  self.ssl_crt_file = "#{root_path}config/ssl/#{environment}.crt"
@@ -65,7 +65,9 @@ module Gruf
65
65
  def self.bind(service)
66
66
  service_class = service.name.constantize
67
67
  Gruf.services << service_class
68
+ # rubocop:disable ThreadSafety/InstanceVariableInClassMethod
68
69
  @bound_service = service_class
70
+ # rubocop:enable ThreadSafety/InstanceVariableInClassMethod
69
71
  ServiceBinder.new(service_class).bind!(self)
70
72
  end
71
73
 
@@ -58,7 +58,7 @@ module Gruf
58
58
  # @param [Class] service The class of the service being executed against
59
59
  # @param [GRPC::RpcDesc] rpc_desc The RPC descriptor of the call
60
60
  # @param [GRPC::ActiveCall] active_call The restricted view of the call
61
- # @param [Object] message The protobuf message (or messages) of the request
61
+ # @param [Object|Google::Protobuf::MessageExts] message The protobuf message (or messages) of the request
62
62
  #
63
63
  def initialize(method_key:, service:, rpc_desc:, active_call:, message:)
64
64
  @method_key = method_key
@@ -99,21 +99,23 @@ module Gruf
99
99
  # @return [String] The parsed service method name
100
100
  #
101
101
  def method_name
102
- "#{service_key}.#{method_key}"
102
+ "#{service_key}.#{@method_key}"
103
103
  end
104
104
 
105
105
  ##
106
106
  # Return all messages for this request, properly handling different request types
107
107
  #
108
- # @return Enumerable<Object> All messages for this request
108
+ # @return [Enumerable<Object>] All messages for this request
109
109
  #
110
110
  def messages
111
111
  if client_streamer?
112
- message.call { |msg| yield msg }
112
+ # rubocop:disable Style/ExplicitBlockArgument
113
+ @message.call { |msg| yield msg }
114
+ # rubocop:enable Style/ExplicitBlockArgument
113
115
  elsif bidi_streamer?
114
- message
116
+ @message
115
117
  else
116
- [message]
118
+ [@message]
117
119
  end
118
120
  end
119
121
  end
@@ -38,7 +38,7 @@ module Gruf
38
38
  ##
39
39
  # Bind all methods on the service to the passed controller
40
40
  #
41
- # @param [Gruf::Controllers::Base] controller
41
+ # @param [Class<Gruf::Controllers::Base>] controller
42
42
  #
43
43
  def bind!(controller)
44
44
  rpc_methods.each { |name, desc| bind_method(controller, name, desc) }
data/lib/gruf/error.rb CHANGED
@@ -126,7 +126,7 @@ module Gruf
126
126
  # @return [Hash] The newly set metadata
127
127
  #
128
128
  def metadata=(metadata)
129
- @metadata = metadata.map { |k, str| [k, str.to_s] }.to_h
129
+ @metadata = metadata.transform_values(&:to_s)
130
130
  end
131
131
 
132
132
  ##
@@ -39,7 +39,7 @@ module Gruf
39
39
  @hooks.each do |hook|
40
40
  next unless hook.respond_to?(name)
41
41
 
42
- hook.send(name, arguments)
42
+ hook.send(name, **arguments)
43
43
  end
44
44
  end
45
45
  end
@@ -43,7 +43,7 @@ module Gruf
43
43
  # @param [Hash] metadata A hash of outgoing metadata
44
44
  # @return [Object] The response message
45
45
  #
46
- def request_response(request: nil, call: nil, method: nil, metadata: nil)
46
+ def request_response(request: nil, call: nil, method: nil, metadata: nil, &block)
47
47
  rc = Gruf::Outbound::RequestContext.new(
48
48
  type: :request_response,
49
49
  requests: [request],
@@ -51,9 +51,7 @@ module Gruf
51
51
  method: method,
52
52
  metadata: metadata
53
53
  )
54
- call(request_context: rc) do
55
- yield
56
- end
54
+ call(request_context: rc, &block)
57
55
  end
58
56
 
59
57
  ##
@@ -65,7 +63,7 @@ module Gruf
65
63
  # @param [Hash] metadata A hash of outgoing metadata
66
64
  # @return [Object] The response message
67
65
  #
68
- def client_streamer(requests: nil, call: nil, method: nil, metadata: nil)
66
+ def client_streamer(requests: nil, call: nil, method: nil, metadata: nil, &block)
69
67
  rc = Gruf::Outbound::RequestContext.new(
70
68
  type: :client_streamer,
71
69
  requests: requests,
@@ -73,9 +71,7 @@ module Gruf
73
71
  method: method,
74
72
  metadata: metadata
75
73
  )
76
- call(request_context: rc) do
77
- yield
78
- end
74
+ call(request_context: rc, &block)
79
75
  end
80
76
 
81
77
  ##
@@ -87,7 +83,7 @@ module Gruf
87
83
  # @param [Hash] metadata A hash of outgoing metadata
88
84
  # @return [Object] The response message
89
85
  #
90
- def server_streamer(request: nil, call: nil, method: nil, metadata: nil)
86
+ def server_streamer(request: nil, call: nil, method: nil, metadata: nil, &block)
91
87
  rc = Gruf::Outbound::RequestContext.new(
92
88
  type: :server_streamer,
93
89
  requests: [request],
@@ -95,9 +91,7 @@ module Gruf
95
91
  method: method,
96
92
  metadata: metadata
97
93
  )
98
- call(request_context: rc) do
99
- yield
100
- end
94
+ call(request_context: rc, &block)
101
95
  end
102
96
 
103
97
  ##
@@ -108,7 +102,7 @@ module Gruf
108
102
  # @param [Method] method The method being called
109
103
  # @param [Hash] metadata A hash of outgoing metadata
110
104
  #
111
- def bidi_streamer(requests: nil, call: nil, method: nil, metadata: nil)
105
+ def bidi_streamer(requests: nil, call: nil, method: nil, metadata: nil, &block)
112
106
  rc = Gruf::Outbound::RequestContext.new(
113
107
  type: :bidi_streamer,
114
108
  requests: requests,
@@ -116,9 +110,7 @@ module Gruf
116
110
  method: method,
117
111
  metadata: metadata
118
112
  )
119
- call(request_context: rc) do
120
- yield
121
- end
113
+ call(request_context: rc, &block)
122
114
  end
123
115
  end
124
116
  end
@@ -28,14 +28,14 @@ module Gruf
28
28
  #
29
29
  # @param [Array<Gruf::Interceptors::ServerInterceptor>] interceptors
30
30
  #
31
- def initialize(interceptors = [])
32
- @interceptors = interceptors
31
+ def initialize(interceptors = nil)
32
+ @interceptors = interceptors || []
33
33
  end
34
34
 
35
35
  ##
36
36
  # Intercept the given request and run interceptors in a FIFO execution order
37
37
  #
38
- def intercept!
38
+ def intercept!(&block)
39
39
  return yield if @interceptors.none?
40
40
 
41
41
  i = @interceptors.pop
@@ -45,7 +45,7 @@ module Gruf
45
45
 
46
46
  i.call do
47
47
  if @interceptors.any?
48
- intercept! { yield }
48
+ intercept!(&block)
49
49
  else
50
50
  yield
51
51
  end
@@ -27,12 +27,10 @@ module Gruf
27
27
  ##
28
28
  # Handle the instrumented response. Note: this will only instrument timings of _successful_ responses.
29
29
  #
30
- def call
30
+ def call(&block)
31
31
  return unless active_call.respond_to?(:output_metadata)
32
32
 
33
- result = Gruf::Interceptors::Timer.time do
34
- yield
35
- end
33
+ result = Gruf::Interceptors::Timer.time(&block)
36
34
  output_metadata.update(metadata_key => result.elapsed.to_s)
37
35
 
38
36
  raise result.message unless result.successful?
@@ -61,12 +61,10 @@ module Gruf
61
61
  #
62
62
  # @return [String]
63
63
  #
64
- def call
65
- return yield if options.fetch(:ignore_methods, []).include?(request.method_name)
64
+ def call(&block)
65
+ return yield if options.fetch(:ignore_methods, [])&.include?(request.method_name)
66
66
 
67
- result = Gruf::Interceptors::Timer.time do
68
- yield
69
- end
67
+ result = Gruf::Interceptors::Timer.time(&block)
70
68
 
71
69
  # Fetch log level options and merge with default...
72
70
  log_level_map = LOG_LEVEL_MAP.merge(options.fetch(:log_levels, {}))
@@ -113,7 +111,7 @@ module Gruf
113
111
  # @return [::Gruf::Logger]
114
112
  #
115
113
  def logger
116
- @logger ||= options.fetch(:logger, ::Gruf.logger)
114
+ @logger ||= (options.fetch(:logger, nil) || Gruf.logger)
117
115
  end
118
116
 
119
117
  ##
@@ -164,26 +162,26 @@ module Gruf
164
162
  end
165
163
 
166
164
  ##
167
- # Redact any blacklisted params and return an updated hash
165
+ # Redact any blocklisted params and return an updated hash
168
166
  #
169
167
  # @param [Hash] params The hash of parameters to sanitize
170
168
  # @return [Hash] The sanitized params in hash form
171
169
  #
172
170
  def sanitize(params = {})
173
- blacklists = options.fetch(:blacklist, []).map(&:to_s)
174
- redacted_string = options.fetch(:redacted_string, 'REDACTED')
175
- blacklists.each do |blacklist|
176
- parts = blacklist.split('.').map(&:to_sym)
171
+ blocklists = (options.fetch(:blocklist, []) || []).map(&:to_s)
172
+ redacted_string = options.fetch(:redacted_string, nil) || 'REDACTED'
173
+ blocklists.each do |blocklist|
174
+ parts = blocklist.split('.').map(&:to_sym)
177
175
  redact!(parts, 0, params, redacted_string)
178
176
  end
179
177
  params
180
178
  end
181
179
 
182
180
  ##
183
- # Helper method to recursively redact based on the black list
181
+ # Helper method to recursively redact based on the blocklist
184
182
  #
185
- # @param [Array] parts The blacklist. ex. 'data.schema' -> [:data, :schema]
186
- # @param [Integer] idx The current index of the blacklist
183
+ # @param [Array] parts The blocklist. ex. 'data.schema' -> [:data, :schema]
184
+ # @param [Integer] idx The current index of the blocklist
187
185
  # @param [Hash] params The hash of parameters to sanitize
188
186
  # @param [String] redacted_string The custom redact string
189
187
  #
@@ -25,7 +25,7 @@ module Gruf
25
25
  ##
26
26
  # Push data to StatsD, only doing so if a client is set
27
27
  #
28
- def call
28
+ def call(&block)
29
29
  unless client
30
30
  Gruf.logger.error 'Statsd module loaded, but no client configured!'
31
31
  return yield
@@ -33,9 +33,7 @@ module Gruf
33
33
 
34
34
  client.increment(route_key)
35
35
 
36
- result = Gruf::Interceptors::Timer.time do
37
- yield
38
- end
36
+ result = Gruf::Interceptors::Timer.time(&block)
39
37
 
40
38
  client.increment("#{route_key}.#{postfix(result.successful?)}")
41
39
  client.timing(route_key, result.elapsed)
@@ -24,9 +24,12 @@ module Gruf
24
24
  ##
25
25
  # Represents a timed result for an interceptor
26
26
  #
27
+ # @property [Object] message The protobuf message
28
+ # @property [Float] elapsed The elapsed time of the request
29
+ #
27
30
  class Result
28
- attr_reader :message
29
- attr_reader :elapsed
31
+ attr_reader :message,
32
+ :elapsed
30
33
 
31
34
  ##
32
35
  # @param [Object] message The protobuf message
data/lib/gruf/server.rb CHANGED
@@ -69,9 +69,9 @@ module Gruf
69
69
 
70
70
  server = if @event_listener_proc
71
71
  server_options[:event_listener_proc] = @event_listener_proc
72
- Gruf::InstrumentableGrpcServer.new(server_options)
72
+ Gruf::InstrumentableGrpcServer.new(**server_options)
73
73
  else
74
- GRPC::RpcServer.new(server_options)
74
+ GRPC::RpcServer.new(**server_options)
75
75
  end
76
76
 
77
77
  @port = server.add_http2_port(@hostname, ssl_credentials)
data/lib/gruf/timer.rb CHANGED
@@ -29,11 +29,12 @@ module Gruf
29
29
  # result.time # => 1.10123
30
30
  # result.result # => 'my_thing_is_done'
31
31
  #
32
+ # @property [Object] result The result of the block that was called
33
+ # @property [Float] time The time, in ms, of the block execution
34
+ #
32
35
  class Result
33
- # @return [Object] result The result of the block that was called
34
- attr_reader :result
35
- # @return [Float] time The time, in ms, of the block execution
36
- attr_reader :time
36
+ attr_reader :result,
37
+ :time
37
38
 
38
39
  ##
39
40
  # Initialize the result object
data/lib/gruf/version.rb CHANGED
@@ -16,5 +16,5 @@
16
16
  # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
17
  #
18
18
  module Gruf
19
- VERSION = '2.8.1'
19
+ VERSION = '2.9.0'
20
20
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gruf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaun McCormick
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-11 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -25,61 +25,187 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.11'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: bundler-audit
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0.6'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: factory_bot
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '6.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '6.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ffaker
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '2.15'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '2.15'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: pry
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: '0.11'
75
+ version: '0.12'
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: '0.11'
82
+ version: '0.12'
55
83
  - !ruby/object:Gem::Dependency
56
- name: grpc
84
+ name: pry-byebug
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - "~>"
87
+ - - ">="
60
88
  - !ruby/object:Gem::Version
61
- version: '1.10'
62
- type: :runtime
89
+ version: '3.9'
90
+ type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - "~>"
94
+ - - ">="
67
95
  - !ruby/object:Gem::Version
68
- version: '1.10'
96
+ version: '3.9'
69
97
  - !ruby/object:Gem::Dependency
70
- name: grpc-tools
98
+ name: rake
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - "~>"
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
- version: '1.10'
76
- type: :runtime
103
+ version: '10.0'
104
+ type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - "~>"
108
+ - - ">="
81
109
  - !ruby/object:Gem::Version
82
- version: '1.10'
110
+ version: '10.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '3.8'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '3.8'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec_junit_formatter
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0.4'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0.4'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '1.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '1.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-performance
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 0.0.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 0.0.1
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '2.0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '2.0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop-thread_safety
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0.3'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0.3'
195
+ - !ruby/object:Gem::Dependency
196
+ name: simplecov
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0.16'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0.16'
83
209
  - !ruby/object:Gem::Dependency
84
210
  name: activesupport
85
211
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +234,62 @@ dependencies:
108
234
  - - ">"
109
235
  - !ruby/object:Gem::Version
110
236
  version: '1'
237
+ - !ruby/object:Gem::Dependency
238
+ name: e2mmap
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - "~>"
242
+ - !ruby/object:Gem::Version
243
+ version: '0.1'
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - "~>"
249
+ - !ruby/object:Gem::Version
250
+ version: '0.1'
251
+ - !ruby/object:Gem::Dependency
252
+ name: grpc
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: '1.10'
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: '1.10'
265
+ - !ruby/object:Gem::Dependency
266
+ name: grpc-tools
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: '1.10'
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: '1.10'
279
+ - !ruby/object:Gem::Dependency
280
+ name: json
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '2.3'
286
+ type: :runtime
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '2.3'
111
293
  - !ruby/object:Gem::Dependency
112
294
  name: slop
113
295
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +304,20 @@ dependencies:
122
304
  - - "~>"
123
305
  - !ruby/object:Gem::Version
124
306
  version: '4.6'
307
+ - !ruby/object:Gem::Dependency
308
+ name: thwait
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - "~>"
312
+ - !ruby/object:Gem::Version
313
+ version: '0.1'
314
+ type: :runtime
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: '0.1'
125
321
  description: gRPC Ruby Framework for building complex gRPC applications at scale
126
322
  email:
127
323
  - splittingred@gmail.com
@@ -181,23 +377,26 @@ homepage: https://github.com/bigcommerce/gruf
181
377
  licenses:
182
378
  - MIT
183
379
  metadata: {}
184
- post_install_message:
380
+ post_install_message:
185
381
  rdoc_options: []
186
382
  require_paths:
187
383
  - lib
188
384
  required_ruby_version: !ruby/object:Gem::Requirement
189
385
  requirements:
190
- - - "~>"
386
+ - - ">="
191
387
  - !ruby/object:Gem::Version
192
388
  version: '2.4'
389
+ - - "<"
390
+ - !ruby/object:Gem::Version
391
+ version: '3.1'
193
392
  required_rubygems_version: !ruby/object:Gem::Requirement
194
393
  requirements:
195
394
  - - ">="
196
395
  - !ruby/object:Gem::Version
197
396
  version: '0'
198
397
  requirements: []
199
- rubygems_version: 3.0.6
200
- signing_key:
398
+ rubygems_version: 3.0.9
399
+ signing_key:
201
400
  specification_version: 4
202
401
  summary: gRPC Ruby Framework
203
402
  test_files: []