gruf 2.18.0 → 2.20.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: 3de94291c905860137fbeb2be431f470af5929eddd3df869b602944dbe3253ea
4
- data.tar.gz: 282cd45242df875e8c664a9434bb7364592a5062e4d3d4980972d9a314931996
3
+ metadata.gz: 2166dad751c35484b12695d4d7a733c7c629a9ed0ee6088d6135f261d248c787
4
+ data.tar.gz: 1787a34eefd69424a5c1902f0d8c097657e1dba36be761a238abc803bf3d4c02
5
5
  SHA512:
6
- metadata.gz: d06b793680ecc5064ec5b4978b83a1a18903f9647b733b3e19ff32979044ab129130019780fafb7f09703f1d7e16ecd5983bf5fa0bd08b1906b4af6597f4c832
7
- data.tar.gz: 7e37790c465cbbf80e1d02d1e71fc9a5e8276fb21d6fb894ae19f6eef663910e4df956293dc218b8de91d940d2586e65248f4f6aababd4d661fb4fdad10d37ce
6
+ metadata.gz: 8b3da76c05e413641d0be365bf717fddbe86767975eb9f69ffc7bfd3011af87569bb419ca0ccaa12bf4e49b6a80bc31baa3759e214f44617b87d94d2ef4f8cf2
7
+ data.tar.gz: d0457693dfb0d7bfe73675e3b0d3cdfc985a2d314c8a5027eb63cc44b254c5e9f4f196fa6101524cb6bb1f1f1f9bfa231b46b2f7b996737cb226bdb025ad4b30
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.20.0
6
+
7
+ * [#190] Remove unsued `e2mmap` and `thwait` gems from `runtime_dependency`.
8
+ * [#194] Add interceptor to reload Rails app code accross requests
9
+ * [#209] Removes manual `establish_connection` and active connection check for each request from `Gruf::Interceptors::ActiveRecord::ConnectionReset`.
10
+
11
+ ### 2.19.0
12
+
13
+ * [#197] Add support for Ruby 3.3
14
+ * Drop support for Ruby 2.x
15
+
5
16
  ### 2.18.0
6
17
 
7
18
  * Add `GRUF_USE_DEFAULT_INTERCEPTORS` ENV to dynamically enable/disable default interceptors
data/README.md CHANGED
@@ -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.7-3.2.
20
+ gruf currently has active support for gRPC 1.10.x+. gruf is compatible and tested with Ruby 3.0-3.3.
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
@@ -32,11 +32,11 @@ Gem::Specification.new do |spec|
32
32
  spec.executables << 'gruf'
33
33
  spec.require_paths = ['lib']
34
34
 
35
- spec.required_ruby_version = '>= 2.7', '< 3.3'
35
+ spec.required_ruby_version = '>= 3.0', '< 3.4'
36
36
 
37
37
  spec.metadata = {
38
38
  'bug_tracker_uri' => 'https://github.com/bigcommerce/gruf/issues',
39
- 'changelog_uri' => 'https://github.com/bigcommerce/gruf/CHANGELOG.md',
39
+ 'changelog_uri' => 'https://github.com/bigcommerce/gruf/blob/main/CHANGELOG.md',
40
40
  'homepage_uri' => 'https://github.com/bigcommerce/gruf',
41
41
  'rubygems_mfa_required' => 'true',
42
42
  'source_code_uri' => 'https://github.com/bigcommerce/gruf',
@@ -45,11 +45,9 @@ Gem::Specification.new do |spec|
45
45
 
46
46
  spec.add_runtime_dependency 'activesupport', '> 4'
47
47
  spec.add_runtime_dependency 'concurrent-ruby', '> 1'
48
- spec.add_runtime_dependency 'e2mmap', '>= 0.1'
49
48
  spec.add_runtime_dependency 'grpc', '~> 1.10'
50
49
  spec.add_runtime_dependency 'grpc-tools', '~> 1.10'
51
50
  spec.add_runtime_dependency 'json', '>= 2.3'
52
51
  spec.add_runtime_dependency 'slop', '>= 4.6'
53
- spec.add_runtime_dependency 'thwait', '>= 0.1'
54
52
  spec.add_runtime_dependency 'zeitwerk', '>= 2'
55
53
  end
@@ -182,7 +182,7 @@ module Gruf
182
182
  # next check CLI arguments
183
183
  services = @options[:services].to_s.split(',').map(&:strip).uniq
184
184
  # finally, if none, use global gruf autoloaded services
185
- services = (::Gruf.services || []) unless services.any?
185
+ services = ::Gruf.services || [] unless services.any?
186
186
 
187
187
  services
188
188
  end
@@ -121,7 +121,7 @@ module Gruf
121
121
  }.freeze
122
122
  }.freeze
123
123
 
124
- attr_accessor(* VALID_CONFIG_KEYS.keys)
124
+ attr_accessor(*VALID_CONFIG_KEYS.keys)
125
125
 
126
126
  ##
127
127
  # Whenever this is extended into a class, setup the defaults
@@ -164,7 +164,7 @@ module Gruf
164
164
  #
165
165
  def reset
166
166
  VALID_CONFIG_KEYS.each do |k, v|
167
- send("#{k}=", v)
167
+ send(:"#{k}=", v)
168
168
  end
169
169
  self.server_binding_url = "#{::ENV.fetch('GRPC_SERVER_HOST',
170
170
  '0.0.0.0')}:#{::ENV.fetch('GRPC_SERVER_PORT', 9_001)}"
@@ -189,6 +189,9 @@ module Gruf
189
189
  self.use_default_interceptors = ::ENV.fetch('GRUF_USE_DEFAULT_INTERCEPTORS', 1).to_i.positive?
190
190
 
191
191
  if use_default_interceptors
192
+ if defined?(::Rails)
193
+ interceptors.use(::Gruf::Interceptors::Rails::Reloader, reloader: Rails.application.reloader)
194
+ end
192
195
  interceptors.use(::Gruf::Interceptors::ActiveRecord::ConnectionReset)
193
196
  interceptors.use(::Gruf::Interceptors::Instrumentation::OutputMetadataTimer)
194
197
  end
data/lib/gruf/error.rb CHANGED
@@ -88,7 +88,7 @@ module Gruf
88
88
  @field_errors = []
89
89
  @metadata = {}
90
90
  args.each do |k, v|
91
- send("#{k}=", v) if respond_to?(k)
91
+ send(:"#{k}=", v) if respond_to?(k)
92
92
  end
93
93
  end
94
94
 
@@ -27,10 +27,6 @@ module Gruf
27
27
  # connection pool, we need to ensure that this is done to properly
28
28
  #
29
29
  def call
30
- if enabled?
31
- target_classes.each { |klass| klass.establish_connection unless klass.connection.active? }
32
- end
33
-
34
30
  yield
35
31
  ensure
36
32
  target_classes.each(&:clear_active_connections!) if enabled?
@@ -108,7 +108,7 @@ module Gruf
108
108
  # @return [::Gruf::Logger]
109
109
  #
110
110
  def logger
111
- @logger ||= (options.fetch(:logger, nil) || Gruf.logger)
111
+ @logger ||= options.fetch(:logger, nil) || Gruf.logger
112
112
  end
113
113
 
114
114
  ##
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2017-present, BigCommerce Pty. Ltd. All rights reserved
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6
+ # documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
7
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
8
+ # persons to whom the Software is furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
11
+ # Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
14
+ # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
15
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16
+ # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
+ #
18
+ module Gruf
19
+ module Interceptors
20
+ module Rails
21
+ ##
22
+ # Triggers rails code reloading between requests
23
+ #
24
+ class Reloader < ::Gruf::Interceptors::ServerInterceptor
25
+ def call(&block)
26
+ options[:reloader].wrap(&block)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
data/lib/gruf/server.rb CHANGED
@@ -192,7 +192,7 @@ module Gruf
192
192
  # @return [Array<Class>]
193
193
  #
194
194
  def services
195
- @services ||= (::Gruf.services || (options.fetch(:services, nil) || []))
195
+ @services ||= ::Gruf.services || (options.fetch(:services, nil) || [])
196
196
  end
197
197
 
198
198
  ##
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.18.0'
19
+ VERSION = '2.20.0'
20
20
  end
data/lib/gruf.rb CHANGED
@@ -24,12 +24,10 @@ require 'base64'
24
24
 
25
25
  # use Zeitwerk to lazily autoload all the files in the lib directory
26
26
  require 'zeitwerk'
27
- loader = ::Zeitwerk::Loader.new
28
- loader.tag = File.basename(__FILE__, '.rb')
29
- loader.inflector = ::Zeitwerk::GemInflector.new(__FILE__)
30
- loader.ignore("#{__dir__}/gruf/integrations/rails/railtie.rb")
31
- loader.ignore("#{__dir__}/gruf/controllers/health_controller.rb")
32
- loader.push_dir(__dir__)
27
+ loader = Zeitwerk::Loader.for_gem
28
+ lib = File.dirname(__FILE__)
29
+ loader.ignore("#{lib}/gruf/integrations/rails/railtie.rb")
30
+ loader.ignore("#{lib}/gruf/controllers/health_controller.rb")
33
31
  loader.setup
34
32
 
35
33
  require_relative 'gruf/integrations/rails/railtie' if defined?(::Rails)
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.18.0
4
+ version: 2.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaun McCormick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-29 00:00:00.000000000 Z
11
+ date: 2024-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1'
41
- - !ruby/object:Gem::Dependency
42
- name: e2mmap
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0.1'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0.1'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: grpc
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -108,20 +94,6 @@ dependencies:
108
94
  - - ">="
109
95
  - !ruby/object:Gem::Version
110
96
  version: '4.6'
111
- - !ruby/object:Gem::Dependency
112
- name: thwait
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0.1'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0.1'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: zeitwerk
127
99
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +155,7 @@ files:
183
155
  - lib/gruf/interceptors/instrumentation/request_logging/formatters/plain.rb
184
156
  - lib/gruf/interceptors/instrumentation/request_logging/interceptor.rb
185
157
  - lib/gruf/interceptors/instrumentation/statsd.rb
158
+ - lib/gruf/interceptors/rails/reloader.rb
186
159
  - lib/gruf/interceptors/registry.rb
187
160
  - lib/gruf/interceptors/server_interceptor.rb
188
161
  - lib/gruf/interceptors/timer.rb
@@ -201,7 +174,7 @@ licenses:
201
174
  - MIT
202
175
  metadata:
203
176
  bug_tracker_uri: https://github.com/bigcommerce/gruf/issues
204
- changelog_uri: https://github.com/bigcommerce/gruf/CHANGELOG.md
177
+ changelog_uri: https://github.com/bigcommerce/gruf/blob/main/CHANGELOG.md
205
178
  homepage_uri: https://github.com/bigcommerce/gruf
206
179
  rubygems_mfa_required: 'true'
207
180
  source_code_uri: https://github.com/bigcommerce/gruf
@@ -214,17 +187,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
214
187
  requirements:
215
188
  - - ">="
216
189
  - !ruby/object:Gem::Version
217
- version: '2.7'
190
+ version: '3.0'
218
191
  - - "<"
219
192
  - !ruby/object:Gem::Version
220
- version: '3.3'
193
+ version: '3.4'
221
194
  required_rubygems_version: !ruby/object:Gem::Requirement
222
195
  requirements:
223
196
  - - ">="
224
197
  - !ruby/object:Gem::Version
225
198
  version: '0'
226
199
  requirements: []
227
- rubygems_version: 3.4.10
200
+ rubygems_version: 3.5.3
228
201
  signing_key:
229
202
  specification_version: 4
230
203
  summary: gRPC Ruby Framework