protobuf 3.10.0.pre0 → 3.10.4

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: 5f251d88d7525ca68f3757e5d15b3bf553f23e16c22b67f0cb501b4b7c57f9cf
4
- data.tar.gz: 78bba5d0b84d72805c158498b0c707975b2b81c4e1a2f3537ba5eeca9c5f3b67
3
+ metadata.gz: a36764aa2113c15a2dbc5e12f1bdfd04a69af8d19dd3e34d761ceaf1f875d81b
4
+ data.tar.gz: 1b790a1156812f2ca1f904ff70344d4bde7f15eea73384cc2b6f23d459ddf7e2
5
5
  SHA512:
6
- metadata.gz: 98f9d860e46359e348313e2c6e1093c39911b40ff7227d3b2e953e3fa574234f8c518427f9e26797ca50de2d7d5599a8ba78232826288f2255600bc27ad58ad9
7
- data.tar.gz: 80643f875d7736c5883ce43b1903a61e08c78d9d11459621ca94f502f4f2e84748f85fbb6df2604886de0a708d11c0e6b7e80df9e03aa3bac7f65075cd795c2c
6
+ metadata.gz: 989876600d8b6c89657e8224850eb64cfa0f0537c37843716d9df4742fde61feef6e4c278d8665ccf70be0cbe5d5006a61a2a8b36c718331bd25b3446d4125cf
7
+ data.tar.gz: 9975ca67caf38e5a0098d78e28b928353aa2b5d776d431102d7884e2002c8f88a97f2e5d5398b540dcf6205b6a4057be3c8dadfab6dbad73b05ab2368d9a589b
@@ -0,0 +1,48 @@
1
+ version: 2.1
2
+
3
+ jobs:
4
+ # skipping build step because Gemfile.lock is not included in the source
5
+ # this makes the bundler caching step a noop
6
+ test:
7
+ parameters:
8
+ ruby-image:
9
+ type: string
10
+ docker:
11
+ - image: << parameters.ruby-image >>
12
+ steps:
13
+ - run:
14
+ name: Install protobuf compiler
15
+ command: |
16
+ archive=protoc-3.16.0-linux-x86_64
17
+ curl -O -L https://github.com/protocolbuffers/protobuf/releases/download/v3.16.0/$archive.zip
18
+ sudo unzip -d '/usr/local' $archive.zip 'bin/*' 'include/*'
19
+ sudo chown -R $(whoami) /usr/local/bin/protoc /usr/local/include/google
20
+ rm -rf $archive.zip
21
+ - run:
22
+ command: protoc --version
23
+ - run:
24
+ command: sudo apt-get update
25
+ - run:
26
+ message: Install ZeroMQ
27
+ command: sudo apt-get -y install libzmq3-dev
28
+ - checkout
29
+ - run:
30
+ command: gem install bundler
31
+ - run:
32
+ command: bundle install
33
+ - run:
34
+ command: bundle exec rake
35
+
36
+ workflows:
37
+ build_and_test:
38
+ jobs:
39
+ - test:
40
+ matrix:
41
+ parameters:
42
+ ruby-image:
43
+ - circleci/jruby:9.2.6.0-jdk
44
+ - circleci/jruby:9.1.17.0-jdk
45
+ - circleci/jruby:9.2-jdk8
46
+ - circleci/ruby:2.4
47
+ - circleci/ruby:2.5
48
+ - circleci/ruby:2.7
data/CHANGES.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Stable (3.8.x)
2
2
 
3
+
4
+ 3.10.0
5
+ ------
6
+ - Add headers to request proto
7
+ - Add support for compiling v3 protos with optional fields as v2 optional fields
8
+
9
+ 3.9.0
10
+ -----
11
+ - Performance improvements
12
+
3
13
  3.8.0
4
14
  -----
5
15
  - Map types now supported (#367)
data/Rakefile CHANGED
@@ -22,10 +22,12 @@ namespace :compile do
22
22
  task :spec do
23
23
  proto_path = ::File.expand_path('../spec/support/', __FILE__)
24
24
  proto_files = Dir[File.join(proto_path, '**', '*.proto')]
25
- cmd = %(protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{proto_path} -I #{proto_path} #{proto_files.join(' ')})
26
25
 
27
- puts cmd
28
- system(cmd)
26
+ proto_files.each do |proto_file|
27
+ cmd = %(protoc --plugin=protoc-gen-ruby-protobuf=./bin/protoc-gen-ruby --ruby-protobuf_out=#{proto_path} -I #{proto_path} #{proto_file})
28
+ puts cmd
29
+ system(cmd) || fail("Failed to compile spec proto: #{proto_file}")
30
+ end
29
31
  end
30
32
 
31
33
  desc 'Compile rpc protos in protos/ directory'
@@ -35,10 +37,10 @@ namespace :compile do
35
37
  output_dir = ::File.expand_path('../tmp/rpc', __FILE__)
36
38
  ::FileUtils.mkdir_p(output_dir)
37
39
 
38
- cmd = %(protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{output_dir} -I #{proto_path} #{proto_files.join(' ')})
40
+ cmd = %(protoc --plugin=protoc-gen-ruby-protobuf=./bin/protoc-gen-ruby --ruby-protobuf_out=#{output_dir} -I #{proto_path} #{proto_files.join(' ')})
39
41
 
40
42
  puts cmd
41
- system(cmd)
43
+ system(cmd) || fail("Failed to compile rpc protos!")
42
44
 
43
45
  files = {
44
46
  'tmp/rpc/dynamic_discovery.pb.rb' => 'lib/protobuf/rpc',
data/lib/protobuf.rb CHANGED
@@ -54,6 +54,18 @@ module Protobuf
54
54
  attr_writer :client_host
55
55
  end
56
56
 
57
+ def self.after_server_bind(&block)
58
+ ::ActiveSupport::Notifications.subscribe('after_server_bind') do |*args|
59
+ block.call(*args)
60
+ end
61
+ end
62
+
63
+ def self.before_server_bind(&block)
64
+ ::ActiveSupport::Notifications.subscribe('before_server_bind') do |*args|
65
+ block.call(*args)
66
+ end
67
+ end
68
+
57
69
  def self.client_host
58
70
  @client_host ||= Socket.gethostname
59
71
  end
data/lib/protobuf/cli.rb CHANGED
@@ -240,6 +240,8 @@ module Protobuf
240
240
  def start_server
241
241
  debug_say('Running server')
242
242
 
243
+ ::ActiveSupport::Notifications.instrument("before_server_bind")
244
+
243
245
  runner.run do
244
246
  logger.info do
245
247
  "pid #{::Process.pid} -- #{mode} RPC Server listening at #{options.host}:#{options.port}"
@@ -46,7 +46,16 @@ module Protobuf
46
46
  generate_file(file_descriptor)
47
47
  end
48
48
 
49
- ::Google::Protobuf::Compiler::CodeGeneratorResponse.encode(:file => generated_files)
49
+ ::Google::Protobuf::Compiler::CodeGeneratorResponse.encode(
50
+ :file => generated_files,
51
+ :supported_features => supported_features,
52
+ )
53
+ end
54
+
55
+ def supported_features
56
+ # The only available feature is proto3 with optional fields.
57
+ # This is backwards compatible with proto2 optional fields.
58
+ ::Google::Protobuf::Compiler::CodeGeneratorResponse::Feature::FEATURE_PROTO3_OPTIONAL.to_i
50
59
  end
51
60
 
52
61
  Protobuf::Field::BaseField.module_eval do
@@ -21,6 +21,11 @@ module Google
21
21
  #
22
22
  class CodeGeneratorRequest < ::Protobuf::Message; end
23
23
  class CodeGeneratorResponse < ::Protobuf::Message
24
+ class Feature < ::Protobuf::Enum
25
+ define :FEATURE_NONE, 0
26
+ define :FEATURE_PROTO3_OPTIONAL, 1
27
+ end
28
+
24
29
  class File < ::Protobuf::Message; end
25
30
 
26
31
  end
@@ -51,6 +56,7 @@ module Google
51
56
  end
52
57
 
53
58
  optional :string, :error, 1
59
+ optional :uint64, :supported_features, 2
54
60
  repeated ::Google::Protobuf::Compiler::CodeGeneratorResponse::File, :file, 15
55
61
  end
56
62
 
@@ -63,8 +63,9 @@ module Protobuf
63
63
  # @param [String] message The error message
64
64
  def failure(code, message)
65
65
  @error = ClientError.new
66
- @error.code = ::Protobuf::Socketrpc::ErrorReason.fetch(code)
66
+ @stats.status = @error.code = ::Protobuf::Socketrpc::ErrorReason.fetch(code)
67
67
  @error.message = message
68
+
68
69
  logger.debug { sign_message("Server failed request (invoking on_failure): #{@error.inspect}") }
69
70
 
70
71
  @failure_cb.call(@error) unless @failure_cb.nil?
@@ -139,12 +140,7 @@ module Protobuf
139
140
 
140
141
  def request_bytes
141
142
  validate_request_type!
142
- fields = { :service_name => @options[:service].name,
143
- :method_name => @options[:method].to_s,
144
- :request_proto => @options[:request],
145
- :caller => request_caller }
146
-
147
- return ::Protobuf::Socketrpc::Request.encode(fields)
143
+ return ::Protobuf::Socketrpc::Request.encode(request_fields)
148
144
  rescue => e
149
145
  failure(:INVALID_REQUEST_PROTO, "Could not set request proto: #{e.message}")
150
146
  end
@@ -153,6 +149,13 @@ module Protobuf
153
149
  @options[:client_host] || ::Protobuf.client_host
154
150
  end
155
151
 
152
+ def request_fields
153
+ { :service_name => @options[:service].name,
154
+ :method_name => @options[:method].to_s,
155
+ :request_proto => @options[:request],
156
+ :caller => request_caller }
157
+ end
158
+
156
159
  def send_request
157
160
  fail 'If you inherit a Connector from Base you must implement send_request'
158
161
  end
@@ -1,16 +1,30 @@
1
1
  require 'date'
2
2
  require 'time'
3
3
  require 'protobuf/logging'
4
+ require 'protobuf/rpc/rpc.pb'
4
5
 
5
6
  module Protobuf
6
7
  module Rpc
7
8
  class Stat
8
9
  attr_accessor :mode, :start_time, :end_time, :request_size, :dispatcher
9
- attr_accessor :response_size, :client, :service, :method_name
10
+ attr_accessor :response_size, :client, :service, :method_name, :status
10
11
  attr_reader :server
11
12
 
12
13
  MODES = [:SERVER, :CLIENT].freeze
13
14
 
15
+ ERROR_TRANSLATIONS = {
16
+ ::Protobuf::Socketrpc::ErrorReason::BAD_REQUEST_DATA => "BAD_REQUEST_DATA",
17
+ ::Protobuf::Socketrpc::ErrorReason::BAD_REQUEST_PROTO => "BAD_REQUEST_PROTO",
18
+ ::Protobuf::Socketrpc::ErrorReason::SERVICE_NOT_FOUND => "SERVICE_NOT_FOUND",
19
+ ::Protobuf::Socketrpc::ErrorReason::METHOD_NOT_FOUND => "METHOD_NOT_FOUND",
20
+ ::Protobuf::Socketrpc::ErrorReason::RPC_ERROR => "RPC_ERROR",
21
+ ::Protobuf::Socketrpc::ErrorReason::RPC_FAILED => "RPC_FAILED",
22
+ ::Protobuf::Socketrpc::ErrorReason::INVALID_REQUEST_PROTO => "INVALID_REQUEST_PROTO",
23
+ ::Protobuf::Socketrpc::ErrorReason::BAD_RESPONSE_PROTO => "BAD_RESPONSE_PROTO",
24
+ ::Protobuf::Socketrpc::ErrorReason::UNKNOWN_HOST => "UNKNOWN_HOST",
25
+ ::Protobuf::Socketrpc::ErrorReason::IO_ERROR => "IO_ERROR",
26
+ }.freeze
27
+
14
28
  def initialize(mode = :SERVER)
15
29
  @mode = mode
16
30
  @request_size = 0
@@ -78,6 +92,12 @@ module Protobuf
78
92
  @mode == :CLIENT
79
93
  end
80
94
 
95
+ def status_string
96
+ return "OK" if status.nil?
97
+
98
+ ERROR_TRANSLATIONS.fetch(status, "UNKNOWN_ERROR")
99
+ end
100
+
81
101
  def to_s
82
102
  [
83
103
  server? ? "[SRV]" : "[CLT]",
@@ -86,6 +106,7 @@ module Protobuf
86
106
  rpc,
87
107
  sizes,
88
108
  elapsed_time,
109
+ status_string,
89
110
  @end_time.try(:iso8601),
90
111
  ].compact.join(' - ')
91
112
  end
@@ -93,7 +114,6 @@ module Protobuf
93
114
  def trace_id
94
115
  ::Thread.current.object_id.to_s(16)
95
116
  end
96
-
97
117
  end
98
118
  end
99
119
  end
@@ -1,3 +1,3 @@
1
1
  module Protobuf
2
- VERSION = '3.10.0.pre0' # rubocop:disable Style/MutableConstant
2
+ VERSION = '3.10.4' # rubocop:disable Style/MutableConstant
3
3
  end
@@ -22,6 +22,8 @@
22
22
  //
23
23
  // Protobufs needed for dynamic discovery zmq server and client.
24
24
 
25
+ syntax = "proto2";
26
+
25
27
  package protobuf.rpc.dynamicDiscovery;
26
28
 
27
29
  enum BeaconType {
@@ -44,6 +44,8 @@
44
44
  // plugin should be named "protoc-gen-$NAME", and will then be used when the
45
45
  // flag "--${NAME}_out" is passed to protoc.
46
46
 
47
+ syntax = "proto2";
48
+
47
49
  package google.protobuf.compiler;
48
50
  option java_package = "com.google.protobuf.compiler";
49
51
  option java_outer_classname = "PluginProtos";
@@ -86,6 +88,16 @@ message CodeGeneratorResponse {
86
88
  // exiting with a non-zero status code.
87
89
  optional string error = 1;
88
90
 
91
+ // A bitmask of supported features that the code generator supports.
92
+ // This is a bitwise "or" of values from the Feature enum.
93
+ optional uint64 supported_features = 2;
94
+
95
+ // Sync with code_generator.h.
96
+ enum Feature {
97
+ FEATURE_NONE = 0;
98
+ FEATURE_PROTO3_OPTIONAL = 1;
99
+ }
100
+
89
101
  // Represents a single generated file.
90
102
  message File {
91
103
  // The file name, relative to the output directory. The name must not
data/proto/rpc.proto CHANGED
@@ -22,6 +22,8 @@
22
22
  //
23
23
  // Protobufs needed for socket rpcs.
24
24
 
25
+ syntax = "proto2";
26
+
25
27
  package protobuf.socketrpc;
26
28
 
27
29
  message Request
@@ -17,7 +17,7 @@ RSpec.describe 'code generation' do
17
17
  end
18
18
 
19
19
  expected_output =
20
- ::Google::Protobuf::Compiler::CodeGeneratorResponse.encode(:file => expected_file_descriptors)
20
+ ::Google::Protobuf::Compiler::CodeGeneratorResponse.encode(:file => expected_file_descriptors, :supported_features => 1)
21
21
 
22
22
  code_generator = ::Protobuf::CodeGenerator.new(bytes)
23
23
  code_generator.eval_unknown_extensions!
@@ -37,7 +37,7 @@ RSpec.describe 'code generation' do
37
37
  :name => file_name, :content => file_content)
38
38
 
39
39
  expected_response =
40
- ::Google::Protobuf::Compiler::CodeGeneratorResponse.encode(:file => [expected_file_output])
40
+ ::Google::Protobuf::Compiler::CodeGeneratorResponse.encode(:file => [expected_file_output], :supported_features => 1)
41
41
 
42
42
  code_generator = ::Protobuf::CodeGenerator.new(request.encode)
43
43
  code_generator.eval_unknown_extensions!
@@ -275,6 +275,41 @@ RSpec.describe ::Protobuf::CLI do
275
275
  end
276
276
  end
277
277
 
278
+ context 'after server bind' do
279
+ let(:sock_runner) { double("FakeRunner", :run => nil) }
280
+
281
+ before { allow(sock_runner).to receive(:run).and_yield }
282
+
283
+ it 'publishes when using the lib/protobuf callback' do
284
+ message_after_bind = false
285
+ ::Protobuf.after_server_bind do
286
+ message_after_bind = true
287
+ end
288
+ described_class.start(args)
289
+ expect(message_after_bind).to eq(true)
290
+ end
291
+ end
292
+
293
+ context 'before server bind' do
294
+ it 'publishes a message before the runner runs' do
295
+ message_before_bind = false
296
+ ::ActiveSupport::Notifications.subscribe('before_server_bind') do
297
+ message_before_bind = true
298
+ end
299
+ described_class.start(args)
300
+ expect(message_before_bind).to eq(true)
301
+ end
302
+
303
+ it 'publishes when using the lib/protobuf callback' do
304
+ message_before_bind = false
305
+ ::Protobuf.before_server_bind do
306
+ message_before_bind = true
307
+ end
308
+ described_class.start(args)
309
+ expect(message_before_bind).to eq(true)
310
+ end
311
+ end
312
+
278
313
  end
279
314
 
280
315
  end
@@ -23,7 +23,7 @@ RSpec.describe ::Protobuf::CodeGenerator do
23
23
  end
24
24
 
25
25
  let(:expected_response_bytes) do
26
- COMPILER::CodeGeneratorResponse.encode(:file => [output_file1, output_file2])
26
+ COMPILER::CodeGeneratorResponse.encode(:file => [output_file1, output_file2], :supported_features => 1)
27
27
  end
28
28
 
29
29
  before do
@@ -187,14 +187,14 @@ RSpec.describe Protobuf::Rpc::Connectors::Base do
187
187
  shared_examples "a ConnectorDisposition" do |meth, cb, *args|
188
188
 
189
189
  it "calls #complete before exit" do
190
- subject.stats = double("Object", :stop => true)
190
+ subject.stats = ::Protobuf::Rpc::Stat.new(:stop => true)
191
191
 
192
192
  expect(subject).to receive(:complete)
193
193
  subject.method(meth).call(*args)
194
194
  end
195
195
 
196
196
  it "calls the #{cb} callback when provided" do
197
- stats = double("Object")
197
+ stats = ::Protobuf::Rpc::Stat.new
198
198
  allow(stats).to receive(:stop).and_return(true)
199
199
  subject.stats = stats
200
200
  some_cb = double("Object")
@@ -205,7 +205,7 @@ RSpec.describe Protobuf::Rpc::Connectors::Base do
205
205
  end
206
206
 
207
207
  it "calls the complete callback when provided" do
208
- stats = double("Object")
208
+ stats = ::Protobuf::Rpc::Stat.new
209
209
  allow(stats).to receive(:stop).and_return(true)
210
210
  subject.stats = stats
211
211
  comp_cb = double("Object")
@@ -217,8 +217,8 @@ RSpec.describe Protobuf::Rpc::Connectors::Base do
217
217
 
218
218
  end
219
219
 
220
- it_behaves_like("a ConnectorDisposition", :failure, "failure_cb", "code", "message")
221
- it_behaves_like("a ConnectorDisposition", :failure, "complete_cb", "code", "message")
220
+ it_behaves_like("a ConnectorDisposition", :failure, "failure_cb", :RPC_ERROR, "message")
221
+ it_behaves_like("a ConnectorDisposition", :failure, "complete_cb", :RPC_ERROR, "message")
222
222
  it_behaves_like("a ConnectorDisposition", :succeed, "complete_cb", "response")
223
223
  it_behaves_like("a ConnectorDisposition", :succeed, "success_cb", "response")
224
224
  it_behaves_like("a ConnectorDisposition", :complete, "complete_cb")
@@ -33,7 +33,7 @@ RSpec.describe ::Protobuf::Rpc::Stat do
33
33
 
34
34
  ::Timecop.freeze(1.62.seconds.from_now) do
35
35
  stats.stop
36
- expect(stats.to_s).to eq "[SRV] - myserver1 - #{stats.trace_id} - BarService#find_bars - 43B/1302B - 1.62s - #{::Time.now.iso8601}"
36
+ expect(stats.to_s).to eq "[SRV] - myserver1 - #{stats.trace_id} - BarService#find_bars - 43B/1302B - 1.62s - OK - #{::Time.now.iso8601}"
37
37
  end
38
38
  end
39
39
  end
@@ -44,7 +44,7 @@ RSpec.describe ::Protobuf::Rpc::Stat do
44
44
  stats.client = 'myserver1'
45
45
  stats.dispatcher = double('dispatcher', :service => BarService.new(:find_bars))
46
46
  stats.request_size = 43
47
- expect(stats.to_s).to eq "[SRV] - myserver1 - #{stats.trace_id} - BarService#find_bars - 43B/-"
47
+ expect(stats.to_s).to eq "[SRV] - myserver1 - #{stats.trace_id} - BarService#find_bars - 43B/- - OK"
48
48
  end
49
49
  end
50
50
  end
@@ -61,12 +61,31 @@ RSpec.describe ::Protobuf::Rpc::Stat do
61
61
 
62
62
  ::Timecop.freeze(0.832.seconds.from_now) do
63
63
  stats.stop
64
- expect(stats.to_s).to eq "[CLT] - myserver1.myhost.com:30000 - #{stats.trace_id} - Foo::BarService#find_bars - 37B/12345B - 0.832s - #{::Time.now.iso8601}"
64
+ expect(stats.to_s).to eq "[CLT] - myserver1.myhost.com:30000 - #{stats.trace_id} - Foo::BarService#find_bars - 37B/12345B - 0.832s - OK - #{::Time.now.iso8601}"
65
65
  end
66
66
 
67
67
  end
68
68
  end
69
69
 
70
+ describe 'error log' do
71
+ it 'resolves error to a string' do
72
+ ::Timecop.freeze(10.minutes.ago) do
73
+ stats = ::Protobuf::Rpc::Stat.new(:CLIENT)
74
+ stats.server = ['30000', 'myserver1.myhost.com']
75
+ stats.service = 'Foo::BarService'
76
+ stats.status = ::Protobuf::Socketrpc::ErrorReason::RPC_ERROR
77
+ stats.method_name = 'find_bars'
78
+ stats.request_size = 37
79
+ stats.response_size = 12345
80
+
81
+ ::Timecop.freeze(0.832.seconds.from_now) do
82
+ stats.stop
83
+ expect(stats.to_s).to eq "[CLT] - myserver1.myhost.com:30000 - #{stats.trace_id} - Foo::BarService#find_bars - 37B/12345B - 0.832s - RPC_ERROR - #{::Time.now.iso8601}"
84
+ end
85
+ end
86
+ end
87
+ end
88
+
70
89
  context 'when request is still running' do
71
90
  it 'omits response size, duration, and timestamp' do
72
91
  stats = ::Protobuf::Rpc::Stat.new(:CLIENT)
@@ -74,7 +93,7 @@ RSpec.describe ::Protobuf::Rpc::Stat do
74
93
  stats.service = 'Foo::BarService'
75
94
  stats.method_name = 'find_bars'
76
95
  stats.request_size = 37
77
- expect(stats.to_s).to eq "[CLT] - myserver1.myhost.com:30000 - #{stats.trace_id} - Foo::BarService#find_bars - 37B/-"
96
+ expect(stats.to_s).to eq "[CLT] - myserver1.myhost.com:30000 - #{stats.trace_id} - Foo::BarService#find_bars - 37B/- - OK"
78
97
  end
79
98
  end
80
99
  end
@@ -0,0 +1,360 @@
1
+ # encoding: utf-8
2
+
3
+ ##
4
+ # This file is auto-generated. DO NOT EDIT!
5
+ #
6
+ require 'protobuf'
7
+
8
+ module Google
9
+ module Protobuf
10
+ ::Protobuf::Optionable.inject(self) { ::Google::Protobuf::FileOptions }
11
+
12
+ ##
13
+ # Message Classes
14
+ #
15
+ class FileDescriptorSet < ::Protobuf::Message; end
16
+ class FileDescriptorProto < ::Protobuf::Message; end
17
+ class DescriptorProto < ::Protobuf::Message
18
+ class ExtensionRange < ::Protobuf::Message; end
19
+ class ReservedRange < ::Protobuf::Message; end
20
+
21
+ end
22
+
23
+ class ExtensionRangeOptions < ::Protobuf::Message; end
24
+ class FieldDescriptorProto < ::Protobuf::Message
25
+ class Type < ::Protobuf::Enum
26
+ define :TYPE_DOUBLE, 1
27
+ define :TYPE_FLOAT, 2
28
+ define :TYPE_INT64, 3
29
+ define :TYPE_UINT64, 4
30
+ define :TYPE_INT32, 5
31
+ define :TYPE_FIXED64, 6
32
+ define :TYPE_FIXED32, 7
33
+ define :TYPE_BOOL, 8
34
+ define :TYPE_STRING, 9
35
+ define :TYPE_GROUP, 10
36
+ define :TYPE_MESSAGE, 11
37
+ define :TYPE_BYTES, 12
38
+ define :TYPE_UINT32, 13
39
+ define :TYPE_ENUM, 14
40
+ define :TYPE_SFIXED32, 15
41
+ define :TYPE_SFIXED64, 16
42
+ define :TYPE_SINT32, 17
43
+ define :TYPE_SINT64, 18
44
+ end
45
+
46
+ class Label < ::Protobuf::Enum
47
+ define :LABEL_OPTIONAL, 1
48
+ define :LABEL_REQUIRED, 2
49
+ define :LABEL_REPEATED, 3
50
+ end
51
+
52
+ end
53
+
54
+ class OneofDescriptorProto < ::Protobuf::Message; end
55
+ class EnumDescriptorProto < ::Protobuf::Message
56
+ class EnumReservedRange < ::Protobuf::Message; end
57
+
58
+ end
59
+
60
+ class EnumValueDescriptorProto < ::Protobuf::Message; end
61
+ class ServiceDescriptorProto < ::Protobuf::Message; end
62
+ class MethodDescriptorProto < ::Protobuf::Message; end
63
+ class FileOptions < ::Protobuf::Message
64
+ class OptimizeMode < ::Protobuf::Enum
65
+ define :SPEED, 1
66
+ define :CODE_SIZE, 2
67
+ define :LITE_RUNTIME, 3
68
+ end
69
+
70
+ end
71
+
72
+ class MessageOptions < ::Protobuf::Message; end
73
+ class FieldOptions < ::Protobuf::Message
74
+ class CType < ::Protobuf::Enum
75
+ define :STRING, 0
76
+ define :CORD, 1
77
+ define :STRING_PIECE, 2
78
+ end
79
+
80
+ class JSType < ::Protobuf::Enum
81
+ define :JS_NORMAL, 0
82
+ define :JS_STRING, 1
83
+ define :JS_NUMBER, 2
84
+ end
85
+
86
+ end
87
+
88
+ class OneofOptions < ::Protobuf::Message; end
89
+ class EnumOptions < ::Protobuf::Message; end
90
+ class EnumValueOptions < ::Protobuf::Message; end
91
+ class ServiceOptions < ::Protobuf::Message; end
92
+ class MethodOptions < ::Protobuf::Message
93
+ class IdempotencyLevel < ::Protobuf::Enum
94
+ define :IDEMPOTENCY_UNKNOWN, 0
95
+ define :NO_SIDE_EFFECTS, 1
96
+ define :IDEMPOTENT, 2
97
+ end
98
+
99
+ end
100
+
101
+ class UninterpretedOption < ::Protobuf::Message
102
+ class NamePart < ::Protobuf::Message; end
103
+
104
+ end
105
+
106
+ class SourceCodeInfo < ::Protobuf::Message
107
+ class Location < ::Protobuf::Message; end
108
+
109
+ end
110
+
111
+ class GeneratedCodeInfo < ::Protobuf::Message
112
+ class Annotation < ::Protobuf::Message; end
113
+
114
+ end
115
+
116
+
117
+
118
+ ##
119
+ # File Options
120
+ #
121
+ set_option :java_package, "com.google.protobuf"
122
+ set_option :java_outer_classname, "DescriptorProtos"
123
+ set_option :optimize_for, ::Google::Protobuf::FileOptions::OptimizeMode::SPEED
124
+ set_option :go_package, "google.golang.org/protobuf/types/descriptorpb"
125
+ set_option :cc_enable_arenas, true
126
+ set_option :objc_class_prefix, "GPB"
127
+ set_option :csharp_namespace, "Google.Protobuf.Reflection"
128
+
129
+
130
+ ##
131
+ # Message Fields
132
+ #
133
+ class FileDescriptorSet
134
+ repeated ::Google::Protobuf::FileDescriptorProto, :file, 1
135
+ end
136
+
137
+ class FileDescriptorProto
138
+ optional :string, :name, 1
139
+ optional :string, :package, 2
140
+ repeated :string, :dependency, 3
141
+ repeated :int32, :public_dependency, 10
142
+ repeated :int32, :weak_dependency, 11
143
+ repeated ::Google::Protobuf::DescriptorProto, :message_type, 4
144
+ repeated ::Google::Protobuf::EnumDescriptorProto, :enum_type, 5
145
+ repeated ::Google::Protobuf::ServiceDescriptorProto, :service, 6
146
+ repeated ::Google::Protobuf::FieldDescriptorProto, :extension, 7
147
+ optional ::Google::Protobuf::FileOptions, :options, 8
148
+ optional ::Google::Protobuf::SourceCodeInfo, :source_code_info, 9
149
+ optional :string, :syntax, 12
150
+ end
151
+
152
+ class DescriptorProto
153
+ class ExtensionRange
154
+ optional :int32, :start, 1
155
+ optional :int32, :end, 2
156
+ optional ::Google::Protobuf::ExtensionRangeOptions, :options, 3
157
+ end
158
+
159
+ class ReservedRange
160
+ optional :int32, :start, 1
161
+ optional :int32, :end, 2
162
+ end
163
+
164
+ optional :string, :name, 1
165
+ repeated ::Google::Protobuf::FieldDescriptorProto, :field, 2
166
+ repeated ::Google::Protobuf::FieldDescriptorProto, :extension, 6
167
+ repeated ::Google::Protobuf::DescriptorProto, :nested_type, 3
168
+ repeated ::Google::Protobuf::EnumDescriptorProto, :enum_type, 4
169
+ repeated ::Google::Protobuf::DescriptorProto::ExtensionRange, :extension_range, 5
170
+ repeated ::Google::Protobuf::OneofDescriptorProto, :oneof_decl, 8
171
+ optional ::Google::Protobuf::MessageOptions, :options, 7
172
+ repeated ::Google::Protobuf::DescriptorProto::ReservedRange, :reserved_range, 9
173
+ repeated :string, :reserved_name, 10
174
+ end
175
+
176
+ class ExtensionRangeOptions
177
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
178
+ # Extension Fields
179
+ extensions 1000...536870912
180
+ end
181
+
182
+ class FieldDescriptorProto
183
+ optional :string, :name, 1
184
+ optional :int32, :number, 3
185
+ optional ::Google::Protobuf::FieldDescriptorProto::Label, :label, 4
186
+ optional ::Google::Protobuf::FieldDescriptorProto::Type, :type, 5
187
+ optional :string, :type_name, 6
188
+ optional :string, :extendee, 2
189
+ optional :string, :default_value, 7
190
+ optional :int32, :oneof_index, 9
191
+ optional :string, :json_name, 10
192
+ optional ::Google::Protobuf::FieldOptions, :options, 8
193
+ optional :bool, :proto3_optional, 17
194
+ end
195
+
196
+ class OneofDescriptorProto
197
+ optional :string, :name, 1
198
+ optional ::Google::Protobuf::OneofOptions, :options, 2
199
+ end
200
+
201
+ class EnumDescriptorProto
202
+ class EnumReservedRange
203
+ optional :int32, :start, 1
204
+ optional :int32, :end, 2
205
+ end
206
+
207
+ optional :string, :name, 1
208
+ repeated ::Google::Protobuf::EnumValueDescriptorProto, :value, 2
209
+ optional ::Google::Protobuf::EnumOptions, :options, 3
210
+ repeated ::Google::Protobuf::EnumDescriptorProto::EnumReservedRange, :reserved_range, 4
211
+ repeated :string, :reserved_name, 5
212
+ end
213
+
214
+ class EnumValueDescriptorProto
215
+ optional :string, :name, 1
216
+ optional :int32, :number, 2
217
+ optional ::Google::Protobuf::EnumValueOptions, :options, 3
218
+ end
219
+
220
+ class ServiceDescriptorProto
221
+ optional :string, :name, 1
222
+ repeated ::Google::Protobuf::MethodDescriptorProto, :method, 2
223
+ optional ::Google::Protobuf::ServiceOptions, :options, 3
224
+ end
225
+
226
+ class MethodDescriptorProto
227
+ optional :string, :name, 1
228
+ optional :string, :input_type, 2
229
+ optional :string, :output_type, 3
230
+ optional ::Google::Protobuf::MethodOptions, :options, 4
231
+ optional :bool, :client_streaming, 5, :default => false
232
+ optional :bool, :server_streaming, 6, :default => false
233
+ end
234
+
235
+ class FileOptions
236
+ optional :string, :java_package, 1
237
+ optional :string, :java_outer_classname, 8
238
+ optional :bool, :java_multiple_files, 10, :default => false
239
+ optional :bool, :java_generate_equals_and_hash, 20, :deprecated => true
240
+ optional :bool, :java_string_check_utf8, 27, :default => false
241
+ optional ::Google::Protobuf::FileOptions::OptimizeMode, :optimize_for, 9, :default => ::Google::Protobuf::FileOptions::OptimizeMode::SPEED
242
+ optional :string, :go_package, 11
243
+ optional :bool, :cc_generic_services, 16, :default => false
244
+ optional :bool, :java_generic_services, 17, :default => false
245
+ optional :bool, :py_generic_services, 18, :default => false
246
+ optional :bool, :php_generic_services, 42, :default => false
247
+ optional :bool, :deprecated, 23, :default => false
248
+ optional :bool, :cc_enable_arenas, 31, :default => true
249
+ optional :string, :objc_class_prefix, 36
250
+ optional :string, :csharp_namespace, 37
251
+ optional :string, :swift_prefix, 39
252
+ optional :string, :php_class_prefix, 40
253
+ optional :string, :php_namespace, 41
254
+ optional :string, :php_metadata_namespace, 44
255
+ optional :string, :ruby_package, 45
256
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
257
+ # Extension Fields
258
+ extensions 1000...536870912
259
+ end
260
+
261
+ class MessageOptions
262
+ optional :bool, :message_set_wire_format, 1, :default => false
263
+ optional :bool, :no_standard_descriptor_accessor, 2, :default => false
264
+ optional :bool, :deprecated, 3, :default => false
265
+ optional :bool, :map_entry, 7
266
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
267
+ # Extension Fields
268
+ extensions 1000...536870912
269
+ end
270
+
271
+ class FieldOptions
272
+ optional ::Google::Protobuf::FieldOptions::CType, :ctype, 1, :default => ::Google::Protobuf::FieldOptions::CType::STRING
273
+ optional :bool, :packed, 2
274
+ optional ::Google::Protobuf::FieldOptions::JSType, :jstype, 6, :default => ::Google::Protobuf::FieldOptions::JSType::JS_NORMAL
275
+ optional :bool, :lazy, 5, :default => false
276
+ optional :bool, :deprecated, 3, :default => false
277
+ optional :bool, :weak, 10, :default => false
278
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
279
+ # Extension Fields
280
+ extensions 1000...536870912
281
+ end
282
+
283
+ class OneofOptions
284
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
285
+ # Extension Fields
286
+ extensions 1000...536870912
287
+ end
288
+
289
+ class EnumOptions
290
+ optional :bool, :allow_alias, 2
291
+ optional :bool, :deprecated, 3, :default => false
292
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
293
+ # Extension Fields
294
+ extensions 1000...536870912
295
+ end
296
+
297
+ class EnumValueOptions
298
+ optional :bool, :deprecated, 1, :default => false
299
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
300
+ # Extension Fields
301
+ extensions 1000...536870912
302
+ end
303
+
304
+ class ServiceOptions
305
+ optional :bool, :deprecated, 33, :default => false
306
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
307
+ # Extension Fields
308
+ extensions 1000...536870912
309
+ end
310
+
311
+ class MethodOptions
312
+ optional :bool, :deprecated, 33, :default => false
313
+ optional ::Google::Protobuf::MethodOptions::IdempotencyLevel, :idempotency_level, 34, :default => ::Google::Protobuf::MethodOptions::IdempotencyLevel::IDEMPOTENCY_UNKNOWN
314
+ repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
315
+ # Extension Fields
316
+ extensions 1000...536870912
317
+ end
318
+
319
+ class UninterpretedOption
320
+ class NamePart
321
+ required :string, :name_part, 1
322
+ required :bool, :is_extension, 2
323
+ end
324
+
325
+ repeated ::Google::Protobuf::UninterpretedOption::NamePart, :name, 2
326
+ optional :string, :identifier_value, 3
327
+ optional :uint64, :positive_int_value, 4
328
+ optional :int64, :negative_int_value, 5
329
+ optional :double, :double_value, 6
330
+ optional :bytes, :string_value, 7
331
+ optional :string, :aggregate_value, 8
332
+ end
333
+
334
+ class SourceCodeInfo
335
+ class Location
336
+ repeated :int32, :path, 1, :packed => true
337
+ repeated :int32, :span, 2, :packed => true
338
+ optional :string, :leading_comments, 3
339
+ optional :string, :trailing_comments, 4
340
+ repeated :string, :leading_detached_comments, 6
341
+ end
342
+
343
+ repeated ::Google::Protobuf::SourceCodeInfo::Location, :location, 1
344
+ end
345
+
346
+ class GeneratedCodeInfo
347
+ class Annotation
348
+ repeated :int32, :path, 1, :packed => true
349
+ optional :string, :source_file, 2
350
+ optional :int32, :begin, 3
351
+ optional :int32, :end, 4
352
+ end
353
+
354
+ repeated ::Google::Protobuf::GeneratedCodeInfo::Annotation, :annotation, 1
355
+ end
356
+
357
+ end
358
+
359
+ end
360
+
Binary file
@@ -12,8 +12,8 @@ module Foo
12
12
  # Enum Classes
13
13
  #
14
14
  class Frobnitz < ::Protobuf::Enum
15
- define :FROB, 1
16
- define :NITZ, 2
15
+ define :FROB, 0
16
+ define :NITZ, 1
17
17
  end
18
18
 
19
19
 
@@ -1,13 +1,13 @@
1
1
  // Use protoc v3.0.0 to compile this file into map-test.bin:
2
- // protoc --descriptor_set_out=map-test.bin map-test.proto
2
+ // protoc --descriptor_set_out=map-test.bin map-test.proto
3
3
 
4
4
  syntax = "proto2";
5
5
 
6
6
  package foo;
7
7
 
8
8
  enum Frobnitz {
9
- FROB = 1;
10
- NITZ = 2;
9
+ FROB = 0;
10
+ NITZ = 1;
11
11
  }
12
12
 
13
13
  message Baz {
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ ##
4
+ # This file is auto-generated. DO NOT EDIT!
5
+ #
6
+ require 'protobuf'
7
+
8
+
9
+ ##
10
+ # Message Classes
11
+ #
12
+ class SomethingWithOptionalFields < ::Protobuf::Message; end
13
+
14
+
15
+ ##
16
+ # Message Fields
17
+ #
18
+ class SomethingWithOptionalFields
19
+ optional :string, :i_am_optional, 1
20
+ optional :string, :i_am_not_optional, 2
21
+ end
22
+
@@ -0,0 +1,6 @@
1
+ syntax = "proto3";
2
+
3
+ message SomethingWithOptionalFields {
4
+ optional string i_am_optional = 1;
5
+ string i_am_not_optional = 2;
6
+ }
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.0.pre0
4
+ version: 3.10.4
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:
11
+ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2019-02-08 00:00:00.000000000 Z
14
+ date: 2021-06-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -263,10 +263,10 @@ executables:
263
263
  extensions: []
264
264
  extra_rdoc_files: []
265
265
  files:
266
+ - ".circleci/config.yml"
266
267
  - ".gitignore"
267
268
  - ".rubocop.yml"
268
269
  - ".rubocop_todo.yml"
269
- - ".travis.yml"
270
270
  - ".yardopts"
271
271
  - CHANGES.md
272
272
  - CONTRIBUTING.md
@@ -276,7 +276,6 @@ files:
276
276
  - Rakefile
277
277
  - bin/protoc-gen-ruby
278
278
  - bin/rpc_server
279
- - install-protobuf.sh
280
279
  - lib/protobuf.rb
281
280
  - lib/protobuf/cli.rb
282
281
  - lib/protobuf/code_generator.rb
@@ -438,6 +437,7 @@ files:
438
437
  - spec/lib/protobuf_spec.rb
439
438
  - spec/spec_helper.rb
440
439
  - spec/support/all.rb
440
+ - spec/support/google/protobuf/descriptor.pb.rb
441
441
  - spec/support/packed_field.rb
442
442
  - spec/support/protos/all_types.data.bin
443
443
  - spec/support/protos/all_types.data.txt
@@ -459,6 +459,8 @@ files:
459
459
  - spec/support/protos/map-test.proto
460
460
  - spec/support/protos/multi_field_extensions.pb.rb
461
461
  - spec/support/protos/multi_field_extensions.proto
462
+ - spec/support/protos/optional_v3_fields.pb.rb
463
+ - spec/support/protos/optional_v3_fields.proto
462
464
  - spec/support/protos/resource.pb.rb
463
465
  - spec/support/protos/resource.proto
464
466
  - spec/support/resource_service.rb
@@ -469,7 +471,7 @@ homepage: https://github.com/localshred/protobuf
469
471
  licenses:
470
472
  - MIT
471
473
  metadata: {}
472
- post_install_message:
474
+ post_install_message:
473
475
  rdoc_options: []
474
476
  require_paths:
475
477
  - lib
@@ -480,13 +482,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
480
482
  version: '0'
481
483
  required_rubygems_version: !ruby/object:Gem::Requirement
482
484
  requirements:
483
- - - ">"
485
+ - - ">="
484
486
  - !ruby/object:Gem::Version
485
- version: 1.3.1
487
+ version: '0'
486
488
  requirements: []
487
- rubyforge_project:
488
- rubygems_version: 2.7.6
489
- signing_key:
489
+ rubygems_version: 3.0.3
490
+ signing_key:
490
491
  specification_version: 4
491
492
  summary: Google Protocol Buffers serialization and RPC implementation for Ruby.
492
493
  test_files:
@@ -552,6 +553,7 @@ test_files:
552
553
  - spec/lib/protobuf_spec.rb
553
554
  - spec/spec_helper.rb
554
555
  - spec/support/all.rb
556
+ - spec/support/google/protobuf/descriptor.pb.rb
555
557
  - spec/support/packed_field.rb
556
558
  - spec/support/protos/all_types.data.bin
557
559
  - spec/support/protos/all_types.data.txt
@@ -573,6 +575,8 @@ test_files:
573
575
  - spec/support/protos/map-test.proto
574
576
  - spec/support/protos/multi_field_extensions.pb.rb
575
577
  - spec/support/protos/multi_field_extensions.proto
578
+ - spec/support/protos/optional_v3_fields.pb.rb
579
+ - spec/support/protos/optional_v3_fields.proto
576
580
  - spec/support/protos/resource.pb.rb
577
581
  - spec/support/protos/resource.proto
578
582
  - spec/support/resource_service.rb
data/.travis.yml DELETED
@@ -1,40 +0,0 @@
1
- before_install:
2
- - wget https://github.com/zeromq/libzmq/releases/download/v4.2.1/zeromq-4.2.1.tar.gz
3
- - tar xvf zeromq-4.2.1.tar.gz
4
- - cd zeromq-4.2.1
5
- - ./configure
6
- - make -j4
7
- - sudo make install
8
- # Retrun to project directory
9
- - cd ..
10
- - sudo -E ./install-protobuf.sh
11
- - java -Xmx1g -version
12
- - javac -J-Xmx1g -version
13
- - export JRUBY_OPTS=-J-Xmx1g
14
- - gem update bundler
15
- language: ruby
16
- rvm:
17
- - 1.9.3
18
- - 2.0.0
19
- - 2.1
20
- - 2.2
21
- - 2.3
22
- - 2.4
23
- - 2.5
24
- - jruby-9.1.17.0
25
- - jruby-9.2.5.0
26
- - rbx-2
27
- env:
28
- - PROTOBUF_VERSION=2.6.1
29
- - PROTOBUF_VERSION=3.0.0-alpha-2
30
- matrix:
31
- allow_failures:
32
- - rvm: rbx-2
33
- - env: PROTOBUF_VERSION=3.0.0-alpha-2
34
- notifications:
35
- webhooks:
36
- urls:
37
- - https://webhooks.gitter.im/e/51a956bcd2b1854d6756
38
- on_success: change # options: [always|never|change] default: always
39
- on_failure: always # options: [always|never|change] default: always
40
- on_start: false # default: false
data/install-protobuf.sh DELETED
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env sh
2
-
3
- set -ex
4
-
5
- gdie() {
6
- echo "$@" >&2
7
- exit 1
8
- }
9
-
10
- test -n "$PROTOBUF_VERSION" || die "PROTOBUF_VERSION env var is undefined"
11
-
12
- case "$PROTOBUF_VERSION" in
13
- 2*)
14
- basename=protobuf-$PROTOBUF_VERSION
15
- ;;
16
- 3*)
17
- basename=protobuf-cpp-$PROTOBUF_VERSION
18
- ;;
19
- *)
20
- die "unknown protobuf version: $PROTOBUF_VERSION"
21
- ;;
22
- esac
23
-
24
- curl -sL https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/$basename.tar.gz | tar zx
25
-
26
- cd protobuf-$PROTOBUF_VERSION
27
-
28
- ./configure --prefix=/usr && make -j2 && make install