protobuf 3.10.8 → 3.10.10

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +106 -22
  3. data/.rubocop.yml +30 -11
  4. data/.rubocop_todo.yml +462 -60
  5. data/CHANGES.md +31 -0
  6. data/Gemfile +22 -0
  7. data/lib/protobuf/code_generator.rb +17 -5
  8. data/lib/protobuf/decoder.rb +33 -2
  9. data/lib/protobuf/field/base_field.rb +13 -5
  10. data/lib/protobuf/field/base_field_object_definitions.rb +40 -6
  11. data/lib/protobuf/field/bool_field.rb +2 -1
  12. data/lib/protobuf/field/int32_field.rb +12 -0
  13. data/lib/protobuf/field/sint32_field.rb +10 -0
  14. data/lib/protobuf/field/uint32_field.rb +9 -0
  15. data/lib/protobuf/generators/printable.rb +10 -1
  16. data/lib/protobuf/message/serialization.rb +4 -4
  17. data/lib/protobuf/railtie.rb +48 -0
  18. data/lib/protobuf/rpc/application_service.rb +12 -0
  19. data/lib/protobuf/rpc/buffer.rb +2 -2
  20. data/lib/protobuf/rpc/service.rb +7 -3
  21. data/lib/protobuf/rpc/service_filters.rb +35 -5
  22. data/lib/protobuf/service_loader.rb +21 -0
  23. data/lib/protobuf/version.rb +1 -1
  24. data/lib/protobuf.rb +5 -0
  25. data/protobuf.gemspec +9 -27
  26. data/spec/encoding/packed_decoding_spec.rb +233 -0
  27. data/spec/encoding/wire_compat_decoding_spec.rb +113 -0
  28. data/spec/functional/railtie_boot_spec.rb +84 -0
  29. data/spec/lib/protobuf/field/bool_field_spec.rb +21 -0
  30. data/spec/lib/protobuf/field/string_field_spec.rb +0 -2
  31. data/spec/lib/protobuf/generators/service_generator_spec.rb +23 -0
  32. data/spec/lib/protobuf/message_spec.rb +0 -2
  33. data/spec/lib/protobuf/railtie_spec.rb +86 -0
  34. data/spec/lib/protobuf/rpc/application_service_spec.rb +57 -0
  35. data/spec/lib/protobuf/rpc/service_filters_inheritance_spec.rb +105 -0
  36. data/spec/lib/protobuf/service_loader_spec.rb +88 -0
  37. metadata +49 -77
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Protobuf::Rpc::ServiceFilters inheritance' do
4
+ let(:parent) do
5
+ Class.new do
6
+ include Protobuf::Rpc::ServiceFilters
7
+ end
8
+ end
9
+
10
+ def callables(klass, type)
11
+ klass.filters[type].map { |filter| filter[:callable] }
12
+ end
13
+
14
+ it 'copies the parent filters to a new subclass' do
15
+ parent.before_filter :authenticate
16
+ parent.around_filter :instrument
17
+ child = Class.new(parent)
18
+
19
+ expect(callables(child, :before)).to eq([:authenticate])
20
+ expect(callables(child, :around)).to eq([:instrument])
21
+ end
22
+
23
+ it 'does not add subclass filters to the parent' do
24
+ child = Class.new(parent)
25
+ child.before_filter :child_only
26
+
27
+ expect(callables(parent, :before)).to eq([])
28
+ end
29
+
30
+ it 'adds a filter that the parent defines later to existing subclasses' do
31
+ child = Class.new(parent)
32
+ grandchild = Class.new(child)
33
+ child.before_filter :child_only
34
+ parent.before_filter :shared
35
+
36
+ expect(callables(child, :before)).to eq([:child_only, :shared])
37
+ expect(callables(grandchild, :before)).to eq([:child_only, :shared])
38
+ end
39
+
40
+ it 'does not add the same filter two times to a subclass' do
41
+ parent.before_filter :authenticate
42
+ child = Class.new(parent)
43
+ child.before_filter :authenticate
44
+ parent.before_filter :authenticate
45
+
46
+ expect(callables(child, :before)).to eq([:authenticate])
47
+ end
48
+
49
+ describe 'rescue_from' do
50
+ let(:parent_handler) { ->(_service, _ex) {} }
51
+ let(:child_handler) { ->(_service, _ex) {} }
52
+
53
+ it 'copies the parent rescue filters to a new subclass' do
54
+ parent.rescue_from(ArgumentError, :with => parent_handler)
55
+ child = Class.new(parent)
56
+
57
+ expect(child.rescue_filters).to eq(ArgumentError => parent_handler)
58
+ end
59
+
60
+ it 'adds a rescue filter that the parent defines later to existing subclasses' do
61
+ child = Class.new(parent)
62
+ parent.rescue_from(ArgumentError, :with => parent_handler)
63
+
64
+ expect(child.rescue_filters).to eq(ArgumentError => parent_handler)
65
+ end
66
+
67
+ it 'keeps a handler that the subclass defined for the same exception class' do
68
+ child = Class.new(parent)
69
+ child.rescue_from(ArgumentError, :with => child_handler)
70
+ parent.rescue_from(ArgumentError, :with => parent_handler)
71
+
72
+ expect(child.rescue_filters[ArgumentError]).to eq(child_handler)
73
+ end
74
+
75
+ it 'replaces an inherited handler when the parent changes it' do
76
+ parent.rescue_from(ArgumentError, :with => child_handler)
77
+ child = Class.new(parent)
78
+ parent.rescue_from(ArgumentError, :with => parent_handler)
79
+
80
+ expect(child.rescue_filters[ArgumentError]).to eq(parent_handler)
81
+ end
82
+ end
83
+
84
+ it 'runs filters from Protobuf::Rpc::ApplicationService on a subclass' do
85
+ base = Class.new(Protobuf::Rpc::ApplicationService) do
86
+ before_filter :mark
87
+
88
+ def mark
89
+ @marked = true
90
+ end
91
+ end
92
+ service = Class.new(base) do
93
+ def marked?
94
+ @marked
95
+ end
96
+
97
+ def endpoint; end
98
+ end
99
+
100
+ instance = service.allocate
101
+ instance.__send__(:run_filters, :endpoint)
102
+
103
+ expect(instance).to be_marked
104
+ end
105
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+ require 'tmpdir'
3
+ require 'fileutils'
4
+ require 'protobuf/service_loader'
5
+
6
+ RSpec.describe Protobuf::ServiceLoader do
7
+ describe '.load_services' do
8
+ around do |example|
9
+ Dir.mktmpdir do |dir|
10
+ @services_dir = dir
11
+ example.run
12
+ end
13
+ end
14
+
15
+ let(:tracker) { [] }
16
+
17
+ before do
18
+ # Expose the tracker globally so the required files can reach it.
19
+ $service_loader_spec_tracker = tracker # rubocop:disable Style/GlobalVars
20
+ end
21
+
22
+ after do
23
+ $service_loader_spec_tracker = nil # rubocop:disable Style/GlobalVars
24
+ end
25
+
26
+ def write_service(relative_path, marker)
27
+ full = File.join(@services_dir, relative_path)
28
+ FileUtils.mkdir_p(File.dirname(full))
29
+ File.write(full, "$service_loader_spec_tracker << #{marker.inspect}\n")
30
+ full
31
+ end
32
+
33
+ it 'returns an empty array when path is nil' do
34
+ expect(described_class.load_services(nil)).to eq([])
35
+ end
36
+
37
+ it 'returns an empty array when directory does not exist' do
38
+ expect(described_class.load_services('/no/such/dir/here')).to eq([])
39
+ end
40
+
41
+ it 'loads every .rb file under the path' do
42
+ write_service('foo_service.rb', 'foo')
43
+ write_service('nested/bar_service.rb', 'bar')
44
+ write_service('helper.rb', 'helper')
45
+ write_service('notes.txt', 'nope')
46
+
47
+ described_class.load_services(@services_dir)
48
+
49
+ expect(tracker).to contain_exactly('foo', 'bar', 'helper')
50
+ end
51
+
52
+ it 'loads files in deterministic (sorted) order' do
53
+ write_service('b_service.rb', 'b')
54
+ write_service('a_service.rb', 'a')
55
+ write_service('c_service.rb', 'c')
56
+
57
+ described_class.load_services(@services_dir)
58
+
59
+ expect(tracker).to eq(%w[a b c])
60
+ end
61
+
62
+ it 'does not execute a file a second time on later calls' do
63
+ write_service('once_service.rb', 'one')
64
+
65
+ described_class.load_services(@services_dir)
66
+ described_class.load_services(@services_dir)
67
+
68
+ expect(tracker).to eq(%w[one])
69
+ end
70
+
71
+ it 'accepts a Pathname for the path' do
72
+ write_service('path_service.rb', 'path')
73
+
74
+ described_class.load_services(Pathname.new(@services_dir))
75
+
76
+ expect(tracker).to eq(['path'])
77
+ end
78
+
79
+ it 'honors a custom glob' do
80
+ write_service('foo_handler.rb', 'handler')
81
+ write_service('bar_service.rb', 'service')
82
+
83
+ described_class.load_services(@services_dir, '**/*_handler.rb')
84
+
85
+ expect(tracker).to eq(['handler'])
86
+ end
87
+ end
88
+ end
metadata CHANGED
@@ -1,17 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.8
4
+ version: 3.10.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - BJ Neilsen
8
8
  - Brandon Dewitt
9
9
  - Devin Christensen
10
10
  - Adam Hutchison
11
- autorequire:
12
11
  bindir: bin
13
12
  cert_chain: []
14
- date: 2023-11-27 00:00:00.000000000 Z
13
+ date: 2026-11-05 00:00:00.000000000 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: activesupport
@@ -19,14 +18,14 @@ dependencies:
19
18
  requirements:
20
19
  - - ">="
21
20
  - !ruby/object:Gem::Version
22
- version: '3.2'
21
+ version: '6.0'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- version: '3.2'
28
+ version: '6.0'
30
29
  - !ruby/object:Gem::Dependency
31
30
  name: middleware
32
31
  requirement: !ruby/object:Gem::Requirement
@@ -70,7 +69,7 @@ dependencies:
70
69
  - !ruby/object:Gem::Version
71
70
  version: '0'
72
71
  - !ruby/object:Gem::Dependency
73
- name: benchmark-ips
72
+ name: benchmark
74
73
  requirement: !ruby/object:Gem::Requirement
75
74
  requirements:
76
75
  - - ">="
@@ -84,7 +83,7 @@ dependencies:
84
83
  - !ruby/object:Gem::Version
85
84
  version: '0'
86
85
  - !ruby/object:Gem::Dependency
87
- name: ffi-rzmq
86
+ name: benchmark-ips
88
87
  requirement: !ruby/object:Gem::Requirement
89
88
  requirements:
90
89
  - - ">="
@@ -98,119 +97,77 @@ dependencies:
98
97
  - !ruby/object:Gem::Version
99
98
  version: '0'
100
99
  - !ruby/object:Gem::Dependency
101
- name: rake
102
- requirement: !ruby/object:Gem::Requirement
103
- requirements:
104
- - - "<"
105
- - !ruby/object:Gem::Version
106
- version: '11.0'
107
- type: :development
108
- prerelease: false
109
- version_requirements: !ruby/object:Gem::Requirement
110
- requirements:
111
- - - "<"
112
- - !ruby/object:Gem::Version
113
- version: '11.0'
114
- - !ruby/object:Gem::Dependency
115
- name: rspec
100
+ name: ffi-rzmq
116
101
  requirement: !ruby/object:Gem::Requirement
117
102
  requirements:
118
103
  - - ">="
119
104
  - !ruby/object:Gem::Version
120
- version: '3.0'
105
+ version: '0'
121
106
  type: :development
122
107
  prerelease: false
123
108
  version_requirements: !ruby/object:Gem::Requirement
124
109
  requirements:
125
110
  - - ">="
126
111
  - !ruby/object:Gem::Version
127
- version: '3.0'
128
- - !ruby/object:Gem::Dependency
129
- name: rubocop
130
- requirement: !ruby/object:Gem::Requirement
131
- requirements:
132
- - - "~>"
133
- - !ruby/object:Gem::Version
134
- version: 0.38.0
135
- type: :development
136
- prerelease: false
137
- version_requirements: !ruby/object:Gem::Requirement
138
- requirements:
139
- - - "~>"
140
- - !ruby/object:Gem::Version
141
- version: 0.38.0
142
- - !ruby/object:Gem::Dependency
143
- name: parser
144
- requirement: !ruby/object:Gem::Requirement
145
- requirements:
146
- - - '='
147
- - !ruby/object:Gem::Version
148
- version: 2.3.0.6
149
- type: :development
150
- prerelease: false
151
- version_requirements: !ruby/object:Gem::Requirement
152
- requirements:
153
- - - '='
154
- - !ruby/object:Gem::Version
155
- version: 2.3.0.6
112
+ version: '0'
156
113
  - !ruby/object:Gem::Dependency
157
- name: simplecov
114
+ name: railties
158
115
  requirement: !ruby/object:Gem::Requirement
159
116
  requirements:
160
117
  - - ">="
161
118
  - !ruby/object:Gem::Version
162
- version: '0'
119
+ version: '6.0'
163
120
  type: :development
164
121
  prerelease: false
165
122
  version_requirements: !ruby/object:Gem::Requirement
166
123
  requirements:
167
124
  - - ">="
168
125
  - !ruby/object:Gem::Version
169
- version: '0'
126
+ version: '6.0'
170
127
  - !ruby/object:Gem::Dependency
171
- name: timecop
128
+ name: rake
172
129
  requirement: !ruby/object:Gem::Requirement
173
130
  requirements:
174
- - - ">="
131
+ - - "~>"
175
132
  - !ruby/object:Gem::Version
176
- version: '0'
133
+ version: '13.0'
177
134
  type: :development
178
135
  prerelease: false
179
136
  version_requirements: !ruby/object:Gem::Requirement
180
137
  requirements:
181
- - - ">="
138
+ - - "~>"
182
139
  - !ruby/object:Gem::Version
183
- version: '0'
140
+ version: '13.0'
184
141
  - !ruby/object:Gem::Dependency
185
- name: yard
142
+ name: rspec
186
143
  requirement: !ruby/object:Gem::Requirement
187
144
  requirements:
188
- - - ">="
145
+ - - "~>"
189
146
  - !ruby/object:Gem::Version
190
- version: '0'
147
+ version: '3.5'
191
148
  type: :development
192
149
  prerelease: false
193
150
  version_requirements: !ruby/object:Gem::Requirement
194
151
  requirements:
195
- - - ">="
152
+ - - "~>"
196
153
  - !ruby/object:Gem::Version
197
- version: '0'
154
+ version: '3.5'
198
155
  - !ruby/object:Gem::Dependency
199
- name: pry-byebug
156
+ name: rubocop
200
157
  requirement: !ruby/object:Gem::Requirement
201
158
  requirements:
202
- - - ">="
159
+ - - "~>"
203
160
  - !ruby/object:Gem::Version
204
- version: '0'
161
+ version: 0.81.0
205
162
  type: :development
206
163
  prerelease: false
207
164
  version_requirements: !ruby/object:Gem::Requirement
208
165
  requirements:
209
- - - ">="
166
+ - - "~>"
210
167
  - !ruby/object:Gem::Version
211
- version: '0'
168
+ version: 0.81.0
212
169
  - !ruby/object:Gem::Dependency
213
- name: pry-stack_explorer
170
+ name: simplecov
214
171
  requirement: !ruby/object:Gem::Requirement
215
172
  requirements:
216
173
  - - ">="
@@ -224,7 +181,7 @@ dependencies:
224
181
  - !ruby/object:Gem::Version
225
182
  version: '0'
226
183
  - !ruby/object:Gem::Dependency
227
- name: varint
184
+ name: timecop
228
185
  requirement: !ruby/object:Gem::Requirement
229
186
  requirements:
230
187
  - - ">="
@@ -238,7 +195,7 @@ dependencies:
238
195
  - !ruby/object:Gem::Version
239
196
  version: '0'
240
197
  - !ruby/object:Gem::Dependency
241
- name: ruby-prof
198
+ name: yard
242
199
  requirement: !ruby/object:Gem::Requirement
243
200
  requirements:
244
201
  - - ">="
@@ -328,6 +285,8 @@ files:
328
285
  - lib/protobuf/message/fields.rb
329
286
  - lib/protobuf/message/serialization.rb
330
287
  - lib/protobuf/optionable.rb
288
+ - lib/protobuf/railtie.rb
289
+ - lib/protobuf/rpc/application_service.rb
331
290
  - lib/protobuf/rpc/buffer.rb
332
291
  - lib/protobuf/rpc/client.rb
333
292
  - lib/protobuf/rpc/connectors/base.rb
@@ -361,6 +320,7 @@ files:
361
320
  - lib/protobuf/rpc/service_dispatcher.rb
362
321
  - lib/protobuf/rpc/service_filters.rb
363
322
  - lib/protobuf/rpc/stat.rb
323
+ - lib/protobuf/service_loader.rb
364
324
  - lib/protobuf/socket.rb
365
325
  - lib/protobuf/tasks.rb
366
326
  - lib/protobuf/tasks/compile.rake
@@ -379,8 +339,11 @@ files:
379
339
  - spec/bin/protoc-gen-ruby_spec.rb
380
340
  - spec/encoding/all_types_spec.rb
381
341
  - spec/encoding/extreme_values_spec.rb
342
+ - spec/encoding/packed_decoding_spec.rb
343
+ - spec/encoding/wire_compat_decoding_spec.rb
382
344
  - spec/functional/class_inheritance_spec.rb
383
345
  - spec/functional/code_generator_spec.rb
346
+ - spec/functional/railtie_boot_spec.rb
384
347
  - spec/functional/socket_server_spec.rb
385
348
  - spec/functional/zmq_server_spec.rb
386
349
  - spec/lib/protobuf/cli_spec.rb
@@ -415,6 +378,8 @@ files:
415
378
  - spec/lib/protobuf/lifecycle_spec.rb
416
379
  - spec/lib/protobuf/message_spec.rb
417
380
  - spec/lib/protobuf/optionable_spec.rb
381
+ - spec/lib/protobuf/railtie_spec.rb
382
+ - spec/lib/protobuf/rpc/application_service_spec.rb
418
383
  - spec/lib/protobuf/rpc/client_spec.rb
419
384
  - spec/lib/protobuf/rpc/connectors/base_spec.rb
420
385
  - spec/lib/protobuf/rpc/connectors/ping_spec.rb
@@ -430,9 +395,11 @@ files:
430
395
  - spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb
431
396
  - spec/lib/protobuf/rpc/service_directory_spec.rb
432
397
  - spec/lib/protobuf/rpc/service_dispatcher_spec.rb
398
+ - spec/lib/protobuf/rpc/service_filters_inheritance_spec.rb
433
399
  - spec/lib/protobuf/rpc/service_filters_spec.rb
434
400
  - spec/lib/protobuf/rpc/service_spec.rb
435
401
  - spec/lib/protobuf/rpc/stat_spec.rb
402
+ - spec/lib/protobuf/service_loader_spec.rb
436
403
  - spec/lib/protobuf/varint_spec.rb
437
404
  - spec/lib/protobuf_spec.rb
438
405
  - spec/spec_helper.rb
@@ -471,7 +438,6 @@ homepage: https://github.com/localshred/protobuf
471
438
  licenses:
472
439
  - MIT
473
440
  metadata: {}
474
- post_install_message:
475
441
  rdoc_options: []
476
442
  require_paths:
477
443
  - lib
@@ -479,15 +445,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
479
445
  requirements:
480
446
  - - ">="
481
447
  - !ruby/object:Gem::Version
482
- version: '0'
448
+ version: '3.1'
483
449
  required_rubygems_version: !ruby/object:Gem::Requirement
484
450
  requirements:
485
451
  - - ">="
486
452
  - !ruby/object:Gem::Version
487
453
  version: '0'
488
454
  requirements: []
489
- rubygems_version: 3.2.33
490
- signing_key:
455
+ rubygems_version: 3.6.9
491
456
  specification_version: 4
492
457
  summary: Google Protocol Buffers serialization and RPC implementation for Ruby.
493
458
  test_files:
@@ -495,8 +460,11 @@ test_files:
495
460
  - spec/bin/protoc-gen-ruby_spec.rb
496
461
  - spec/encoding/all_types_spec.rb
497
462
  - spec/encoding/extreme_values_spec.rb
463
+ - spec/encoding/packed_decoding_spec.rb
464
+ - spec/encoding/wire_compat_decoding_spec.rb
498
465
  - spec/functional/class_inheritance_spec.rb
499
466
  - spec/functional/code_generator_spec.rb
467
+ - spec/functional/railtie_boot_spec.rb
500
468
  - spec/functional/socket_server_spec.rb
501
469
  - spec/functional/zmq_server_spec.rb
502
470
  - spec/lib/protobuf/cli_spec.rb
@@ -531,6 +499,8 @@ test_files:
531
499
  - spec/lib/protobuf/lifecycle_spec.rb
532
500
  - spec/lib/protobuf/message_spec.rb
533
501
  - spec/lib/protobuf/optionable_spec.rb
502
+ - spec/lib/protobuf/railtie_spec.rb
503
+ - spec/lib/protobuf/rpc/application_service_spec.rb
534
504
  - spec/lib/protobuf/rpc/client_spec.rb
535
505
  - spec/lib/protobuf/rpc/connectors/base_spec.rb
536
506
  - spec/lib/protobuf/rpc/connectors/ping_spec.rb
@@ -546,9 +516,11 @@ test_files:
546
516
  - spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb
547
517
  - spec/lib/protobuf/rpc/service_directory_spec.rb
548
518
  - spec/lib/protobuf/rpc/service_dispatcher_spec.rb
519
+ - spec/lib/protobuf/rpc/service_filters_inheritance_spec.rb
549
520
  - spec/lib/protobuf/rpc/service_filters_spec.rb
550
521
  - spec/lib/protobuf/rpc/service_spec.rb
551
522
  - spec/lib/protobuf/rpc/stat_spec.rb
523
+ - spec/lib/protobuf/service_loader_spec.rb
552
524
  - spec/lib/protobuf/varint_spec.rb
553
525
  - spec/lib/protobuf_spec.rb
554
526
  - spec/spec_helper.rb