protobuf 2.0.0.rc2 → 2.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/.gitignore +1 -0
  2. data/ext/ruby_generator/Makefile +10 -0
  3. data/ext/ruby_generator/RubyGenerator.cpp +85 -70
  4. data/ext/ruby_generator/RubyGenerator.h +23 -4
  5. data/lib/protobuf.rb +33 -26
  6. data/lib/protobuf/cli.rb +18 -13
  7. data/lib/protobuf/enum.rb +39 -34
  8. data/lib/protobuf/enum_value.rb +29 -0
  9. data/lib/protobuf/field/base_field.rb +34 -5
  10. data/lib/protobuf/field/enum_field.rb +6 -14
  11. data/lib/protobuf/field/extension_fields.rb +13 -5
  12. data/lib/protobuf/field/field_array.rb +17 -7
  13. data/lib/protobuf/field/varint_field.rb +4 -6
  14. data/lib/protobuf/message.rb +44 -148
  15. data/lib/protobuf/rpc/server.rb +2 -2
  16. data/lib/protobuf/version.rb +1 -1
  17. data/spec/benchmark/tasks.rb +7 -8
  18. data/spec/functional/evented_server_spec.rb +9 -9
  19. data/spec/functional/socket_server_spec.rb +8 -8
  20. data/spec/functional/zmq_server_spec.rb +8 -8
  21. data/spec/lib/protobuf/cli_spec.rb +30 -11
  22. data/spec/lib/protobuf/enum_spec.rb +90 -0
  23. data/spec/lib/protobuf/enum_value_spec.rb +13 -0
  24. data/spec/lib/protobuf/message/encoder_spec.rb +1 -1
  25. data/spec/lib/protobuf/message_spec.rb +50 -0
  26. data/spec/lib/protobuf/rpc/client_spec.rb +23 -23
  27. data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +1 -1
  28. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
  29. data/spec/lib/protobuf/rpc/service_spec.rb +18 -18
  30. data/spec/lib/protobuf_spec.rb +62 -0
  31. data/spec/spec_helper.rb +12 -1
  32. data/spec/support/all.rb +0 -1
  33. data/spec/support/server.rb +1 -1
  34. data/spec/support/test/enum.pb.rb +32 -0
  35. data/spec/support/test/enum.proto +12 -0
  36. data/spec/support/test/resource.pb.rb +52 -0
  37. data/spec/{proto/test.proto → support/test/resource.proto} +2 -2
  38. data/spec/support/test/resource_service.rb +14 -0
  39. metadata +51 -48
  40. data/ext/Makefile +0 -11
  41. data/spec/lib/protobuf/message/enum_spec.rb +0 -13
  42. data/spec/lib/protobuf/message/message_spec.rb +0 -67
  43. data/spec/proto/test.pb.rb +0 -54
  44. data/spec/proto/test_service.rb +0 -30
  45. data/spec/proto/test_service_impl.rb +0 -18
  46. data/spec/support/silent_constants.rb +0 -44
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ Gemfile.lock
14
14
  tmp/*
15
15
  ext/defs
16
16
  ext/out
17
+ ext/ruby_generator/protoc-ruby
@@ -0,0 +1,10 @@
1
+ all: \
2
+ RubyGenerator.h \
3
+ RubyGenerator.cpp
4
+ g++ -Wall -I/code/src/utilities/protobuf-2.4.1/src -lprotoc -lprotobuf -lpthread -o protoc-ruby RubyGenerator.cpp
5
+
6
+ test:
7
+ rm -rf test/out/*
8
+ ./protoc-ruby --proto_path=../defs --ruby_out=../out ../defs/atlas/util.proto ../defs/atlas/newman/*.proto
9
+
10
+ .PHONY: all test
@@ -42,9 +42,7 @@ bool RubyGenerator::Generate(const FileDescriptor* file,
42
42
  PrintNewLine();
43
43
 
44
44
  PrintEnumsForFileDescriptor(file_, true);
45
- PrintNewLine();
46
45
  PrintMessagesForFileDescriptor(file_, true);
47
- PrintNewLine();
48
46
 
49
47
  PrintServices();
50
48
 
@@ -100,60 +98,42 @@ void RubyGenerator::PrintMessagesForFileDescriptor(const FileDescriptor* descrip
100
98
  }
101
99
 
102
100
  for (int i = 0; i < descriptor->message_type_count(); i++) {
103
- if (print_fields) {
104
- PrintMessageFields(descriptor->message_type(i));
105
- }
106
- else {
107
- PrintMessageClass(descriptor->message_type(i));
108
- }
101
+ PrintMessage(descriptor->message_type(i), print_fields);
109
102
  }
110
103
  }
111
104
  }
112
105
 
113
106
  void RubyGenerator::PrintMessagesForDescriptor(const Descriptor* descriptor, bool print_fields) const {
114
107
  for (int i = 0; i < descriptor->nested_type_count(); i++) {
115
- if (print_fields) {
116
- PrintMessageFields(descriptor->nested_type(i));
117
- }
118
- else {
119
- PrintMessageClass(descriptor->nested_type(i));
120
- }
108
+ PrintMessage(descriptor->nested_type(i), print_fields);
121
109
  }
122
110
  }
123
111
  //
124
112
  // Print out the given descriptor message as a Ruby class.
125
- void RubyGenerator::PrintMessageClass(const Descriptor* descriptor) const {
113
+ void RubyGenerator::PrintMessage(const Descriptor* descriptor, bool print_fields) const {
126
114
  map<string,string> data;
127
115
  data["class_name"] = descriptor->name();
128
116
 
129
- printer_->Print(data, "class $class_name$ < ::Protobuf::Message; end");
130
- PrintNewLine();
117
+ if (print_fields) {
118
+ printer_->Print(data, "class $class_name$");
119
+ PrintNewLine();
120
+ printer_->Indent();
131
121
 
132
- PrintEnumsForDescriptor(descriptor, false);
133
- PrintMessagesForDescriptor(descriptor, false);
134
- }
122
+ if (descriptor->enum_type_count() > 0) {
123
+ PrintEnumsForDescriptor(descriptor, true);
124
+ }
135
125
 
136
- void RubyGenerator::PrintExtensionRangesForDescriptor(const Descriptor* descriptor) const {
137
- if (descriptor->extension_range_count() > 0) {
138
- for (int i = 0; i < descriptor->extension_range_count(); i++) {
139
- const Descriptor::ExtensionRange* range = descriptor->extension_range(i);
140
- map<string,string> data;
141
- data["message_class"] = Constantize(descriptor->full_name());
142
- data["start"] = SimpleItoa(range->start);
143
- data["end"] = SimpleItoa(range->end);
144
- printer_->Print(data, "$message_class$.extensions $start$...$end$");
145
- PrintNewLine();
126
+ if (descriptor->nested_type_count() > 0) {
127
+ PrintMessagesForDescriptor(descriptor, true);
146
128
  }
147
- }
148
- }
149
129
 
150
- // Print out the given descriptor message as a Ruby class.
151
- void RubyGenerator::PrintMessageFields(const Descriptor* descriptor) const {
152
- PrintExtensionRangesForDescriptor(descriptor);
130
+ PrintExtensionRangesForDescriptor(descriptor);
153
131
 
154
- if (descriptor->field_count() > 0) {
155
- for (int i = 0; i < descriptor->field_count(); i++) {
156
- PrintMessageField(descriptor->field(i));
132
+ // Print Fields
133
+ if (descriptor->field_count() > 0) {
134
+ for (int i = 0; i < descriptor->field_count(); i++) {
135
+ PrintMessageField(descriptor->field(i));
136
+ }
157
137
  }
158
138
 
159
139
  // Print Extension Fields
@@ -162,17 +142,53 @@ void RubyGenerator::PrintMessageFields(const Descriptor* descriptor) const {
162
142
  PrintMessageField(descriptor->extension(i));
163
143
  }
164
144
  }
145
+
146
+ printer_->Outdent();
147
+ printer_->Print(data, "end");
165
148
  PrintNewLine();
166
149
  }
150
+ else if (DescriptorHasNestedTypes(descriptor)) {
151
+ printer_->Print(data, "class $class_name$ < ::Protobuf::Message");
152
+ PrintNewLine();
153
+ printer_->Indent();
154
+
155
+ if (descriptor->enum_type_count() > 0) {
156
+ PrintEnumsForDescriptor(descriptor, false);
157
+ }
158
+
159
+ if (descriptor->nested_type_count() > 0) {
160
+ PrintMessagesForDescriptor(descriptor, false);
161
+ }
167
162
 
168
- PrintEnumsForDescriptor(descriptor, true);
169
- PrintMessagesForDescriptor(descriptor, true);
163
+ printer_->Outdent();
164
+ printer_->Print(data, "end");
165
+ PrintNewLine();
166
+ }
167
+ else {
168
+ printer_->Print(data, "class $class_name$ < ::Protobuf::Message; end");
169
+ }
170
+
171
+ PrintNewLine();
172
+ }
173
+
174
+ void RubyGenerator::PrintExtensionRangesForDescriptor(const Descriptor* descriptor) const {
175
+ if (descriptor->extension_range_count() > 0) {
176
+ for (int i = 0; i < descriptor->extension_range_count(); i++) {
177
+ const Descriptor::ExtensionRange* range = descriptor->extension_range(i);
178
+ map<string,string> data;
179
+ data["message_class"] = Constantize(descriptor->full_name());
180
+ data["start"] = SimpleItoa(range->start);
181
+ data["end"] = SimpleItoa(range->end);
182
+ printer_->Print(data, "extensions $start$...$end$");
183
+ PrintNewLine();
184
+ }
185
+ }
170
186
  }
171
187
 
172
188
  // Print the given FieldDescriptor to the Message DSL methods.
173
189
  void RubyGenerator::PrintMessageField(const FieldDescriptor* descriptor) const {
174
190
  map<string,string> data;
175
- data["message_class"] = Constantize(descriptor->containing_type()->full_name());
191
+ data["field_presence"] = "";
176
192
  data["field_name"] = descriptor->lowercase_name();
177
193
  data["tag_number"] = SimpleItoa(descriptor->number());
178
194
  data["data_type"] = "";
@@ -182,13 +198,13 @@ void RubyGenerator::PrintMessageField(const FieldDescriptor* descriptor) const {
182
198
  data["extension_opt"] = "";
183
199
 
184
200
  if (descriptor->is_required()) {
185
- data["field_label"] = "required";
201
+ data["field_presence"] = "required";
186
202
  }
187
203
  else if (descriptor->is_optional()) {
188
- data["field_label"] = "optional";
204
+ data["field_presence"] = "optional";
189
205
  }
190
206
  else if (descriptor->is_repeated()) {
191
- data["field_label"] = "repeated";
207
+ data["field_presence"] = "repeated";
192
208
  }
193
209
 
194
210
  switch (descriptor->type()) {
@@ -232,7 +248,7 @@ void RubyGenerator::PrintMessageField(const FieldDescriptor* descriptor) const {
232
248
  case FieldDescriptor::CPPTYPE_DOUBLE: value = SimpleDtoa(descriptor->default_value_double()); break;
233
249
  case FieldDescriptor::CPPTYPE_FLOAT: value = SimpleFtoa(descriptor->default_value_float()); break;
234
250
  case FieldDescriptor::CPPTYPE_BOOL: value = descriptor->default_value_bool() ? "true" : "false"; break;
235
- case FieldDescriptor::CPPTYPE_ENUM: value = Constantize(descriptor->default_value_enum()->full_name()); break;
251
+ case FieldDescriptor::CPPTYPE_ENUM: value = FullEnumNamespace(descriptor->default_value_enum()); break;
236
252
  case FieldDescriptor::CPPTYPE_STRING: value = "\"" + descriptor->default_value_string() + "\""; break;
237
253
  default: break;
238
254
  }
@@ -254,15 +270,15 @@ void RubyGenerator::PrintMessageField(const FieldDescriptor* descriptor) const {
254
270
  }
255
271
 
256
272
  printer_->Print(data,
257
- "$message_class$.$field_label$("
273
+ "$field_presence$ "
258
274
  "$data_type$, "
259
275
  ":$field_name$, "
260
276
  "$tag_number$"
261
277
  "$default_opt$"
262
278
  "$packed_opt$"
263
279
  "$deprecated_opt$"
264
- "$extension_opt$"
265
- ")\n");
280
+ "$extension_opt$");
281
+ PrintNewLine();
266
282
  }
267
283
 
268
284
 
@@ -272,12 +288,7 @@ void RubyGenerator::PrintMessageField(const FieldDescriptor* descriptor) const {
272
288
 
273
289
  void RubyGenerator::PrintEnumsForDescriptor(const Descriptor* descriptor, bool print_values) const {
274
290
  for (int i = 0; i < descriptor->enum_type_count(); i++) {
275
- if (print_values) {
276
- PrintEnumValues(descriptor->enum_type(i));
277
- }
278
- else {
279
- PrintEnumClass(descriptor->enum_type(i));
280
- }
291
+ PrintEnum(descriptor->enum_type(i), print_values);
281
292
  }
282
293
  }
283
294
 
@@ -291,39 +302,43 @@ void RubyGenerator::PrintEnumsForFileDescriptor(const FileDescriptor* descriptor
291
302
  }
292
303
 
293
304
  for (int i = 0; i < descriptor->enum_type_count(); i++) {
294
- if (print_values) {
295
- PrintEnumValues(descriptor->enum_type(i));
296
- }
297
- else {
298
- PrintEnumClass(descriptor->enum_type(i));
299
- }
305
+ PrintEnum(descriptor->enum_type(i), print_values);
300
306
  }
301
307
  }
302
308
  }
303
309
 
304
310
  // Print the given enum descriptor as a Ruby class.
305
- void RubyGenerator::PrintEnumClass(const EnumDescriptor* descriptor) const {
311
+ void RubyGenerator::PrintEnum(const EnumDescriptor* descriptor, bool print_values) const {
306
312
  map<string,string> data;
307
313
  data["class_name"] = descriptor->name();
308
- printer_->Print(data, "class $class_name$ < ::Protobuf::Enum; end");
309
- PrintNewLine();
310
- }
311
314
 
312
- // Print the given enum descriptor as a Ruby class.
313
- void RubyGenerator::PrintEnumValues(const EnumDescriptor* descriptor) const {
314
- for (int i = 0; i < descriptor->value_count(); i++) {
315
- PrintEnumValue(descriptor->value(i));
315
+ if (print_values) {
316
+ printer_->Print(data, "class $class_name$");
317
+ printer_->Indent();
318
+ PrintNewLine();
319
+
320
+ for (int i = 0; i < descriptor->value_count(); i++) {
321
+ PrintEnumValue(descriptor->value(i));
322
+ }
323
+
324
+ printer_->Outdent();
325
+ printer_->Print(data, "end");
326
+ PrintNewLine();
316
327
  }
328
+ else {
329
+ printer_->Print(data, "class $class_name$ < ::Protobuf::Enum; end");
330
+ }
331
+
317
332
  PrintNewLine();
318
333
  }
319
334
 
320
335
  // Print the given enum value to the Enum class DSL methods.
321
336
  void RubyGenerator::PrintEnumValue(const EnumValueDescriptor* descriptor) const {
322
337
  map<string,string> data;
323
- data["enum_class"] = Constantize(descriptor->type()->full_name());
324
338
  data["name"] = descriptor->name();
325
339
  data["number"] = ConvertIntToString(descriptor->number());
326
- printer_->Print(data, "$enum_class$.define :$name$, $number$\n");
340
+ printer_->Print(data, "define :$name$, $number$");
341
+ PrintNewLine();
327
342
  }
328
343
 
329
344
  //
@@ -46,15 +46,13 @@ class LIBPROTOC_EXPORT RubyGenerator : public CodeGenerator {
46
46
 
47
47
  void PrintMessagesForDescriptor(const Descriptor* descriptor, bool print_fields) const;
48
48
  void PrintMessagesForFileDescriptor(const FileDescriptor* descriptor, bool print_fields) const;
49
- void PrintMessageClass(const Descriptor* descriptor) const;
49
+ void PrintMessage(const Descriptor* descriptor, bool print_fields) const;
50
50
  void PrintExtensionRangesForDescriptor(const Descriptor* descriptor) const;
51
- void PrintMessageFields(const Descriptor* descriptor) const;
52
51
  void PrintMessageField(const FieldDescriptor* descriptor) const;
53
52
 
54
53
  void PrintEnumsForDescriptor(const Descriptor* descriptor, bool print_values) const;
55
54
  void PrintEnumsForFileDescriptor(const FileDescriptor* descriptor, bool print_values) const;
56
- void PrintEnumClass(const EnumDescriptor* descriptor) const;
57
- void PrintEnumValues(const EnumDescriptor* descriptor) const;
55
+ void PrintEnum(const EnumDescriptor* descriptor, bool print_values) const;
58
56
  void PrintEnumValue(const EnumValueDescriptor* descriptor) const;
59
57
 
60
58
  void PrintServices() const;
@@ -152,6 +150,17 @@ class LIBPROTOC_EXPORT RubyGenerator : public CodeGenerator {
152
150
  return underscored.str();
153
151
  }
154
152
 
153
+ static string FullEnumNamespace(const EnumValueDescriptor* descriptor) {
154
+ string parent_enum_type = Constantize(descriptor->type()->full_name());
155
+ string enum_name = descriptor->name();
156
+
157
+ return strings::Substitute("$0::$1", parent_enum_type, enum_name);
158
+ }
159
+
160
+ static bool DescriptorHasNestedTypes(const Descriptor* descriptor) {
161
+ return (descriptor->enum_type_count() > 0 || descriptor->nested_type_count() > 0);
162
+ }
163
+
155
164
  }; // class RubyGenerator
156
165
 
157
166
  } // namespace ruby
@@ -173,6 +182,16 @@ int _rprotoc_extern(int argc, char* argv[]) {
173
182
  return cli.Run(argc, argv);
174
183
  }
175
184
 
185
+ /*
186
+
187
+ Use for testing:
188
+
189
+ int main(int argc, char* argv[]) {
190
+ return _rprotoc_extern(argc, argv);
191
+ }
192
+
193
+ */
194
+
176
195
  #ifdef __cplusplus
177
196
  }
178
197
  #endif
data/lib/protobuf.rb CHANGED
@@ -14,13 +14,31 @@ module Protobuf
14
14
 
15
15
  module_function
16
16
 
17
+ # Connector Type
18
+ #
19
+ # Default: socket
20
+ #
21
+ # Symbol value which denotes the type of connector to use
22
+ # during client requests to an RPC server.
23
+ def self.connector_type
24
+ @_connector_type ||= DEFAULT_CONNECTOR_TYPE
25
+ end
26
+
27
+ def self.connector_type=(type)
28
+ raise ArgumentError, 'Invalid connector type given' unless VALID_CONNECTOR_TYPES.include?(type)
29
+ @_connector_type = type
30
+ end
31
+
32
+
17
33
  # GC Pause during server requests
18
34
  #
35
+ # Default: false
36
+ #
19
37
  # Boolean value to tell the server to disable
20
38
  # the Garbage Collector when handling an rpc request.
21
39
  # Once the request is completed, the GC is enabled again.
22
40
  # This optomization provides a huge boost in speed to rpc requests.
23
- def self.gc_pause_server_request
41
+ def self.gc_pause_server_request?
24
42
  return @_gc_pause_server_request unless @_gc_pause_server_request.nil?
25
43
  gc_pause_server_request = false
26
44
  end
@@ -29,36 +47,25 @@ module Protobuf
29
47
  @_gc_pause_server_request = !!value
30
48
  end
31
49
 
32
- # GC Pause during serializations (server-side only)
50
+ # Print Deprecation Warnings
33
51
  #
34
- # Boolean value to tell the server to disable
35
- # the Garbage Collector when serializing a response proto.
36
- # Once the serialization is completed, the GC is enabled again.
37
- # This optomization provides a large boost in speed to rpc requests.
38
- # Note that this option is ignored if gc_pause_server_request is
39
- # enabled since serialization is during the request cycle.
40
- def self.gc_pause_server_serialization
41
- return @_gc_pause_server_serialization unless @_gc_pause_server_serialization.nil?
42
- gc_pause_server_serialization = false
52
+ # Default: true
53
+ #
54
+ # Simple boolean to define whether we want field deprecation warnings to
55
+ # be printed to stderr or not. The rpc_server has an option to set this value
56
+ # explicitly, or you can turn this option off by setting
57
+ # ENV['PB_IGNORE_DEPRECATIONS'] to a non-empty value.
58
+ #
59
+ # The rpc_server option will override the ENV setting.
60
+ def self.print_deprecation_warnings?
61
+ return @_print_deprecation_warnings unless @_print_deprecation_warnings.nil?
62
+ print_deprecation_warnings = ENV.key?('PB_IGNORE_DEPRECATIONS') ? false : true
43
63
  end
44
64
 
45
- def self.gc_pause_server_serialization=(value)
46
- @_gc_pause_server_serialization = !!value
65
+ def self.print_deprecation_warnings=(value)
66
+ @_print_deprecation_warnings = !!value
47
67
  end
48
68
 
49
- # Connector Type
50
- #
51
- # Symbol value which denotes the type of connector to use
52
- # during client requests to an RPC server.
53
- def self.connector_type
54
- @_connector_type ||= DEFAULT_CONNECTOR_TYPE
55
- end
56
-
57
- def self.connector_type=(type)
58
- raise 'Invalid connector type given' unless VALID_CONNECTOR_TYPES.include?(type)
59
- @_connector_type = type
60
- end
61
-
62
69
  end
63
70
 
64
71
  require 'protobuf/rpc/client'
data/lib/protobuf/cli.rb CHANGED
@@ -16,22 +16,22 @@ module Protobuf
16
16
 
17
17
  desc 'start APP_FILE', 'Run the RPC server in the given mode, preloading the given APP_FILE. This is the default task.'
18
18
 
19
- option :host, :type => :string, :default => '127.0.0.1', :aliases => %w(-o), :desc => 'Host to bind.'
20
- option :port, :type => :numeric, :default => 9595, :aliases => %w(-p), :desc => 'Port to bind.'
19
+ option :host, :type => :string, :default => '127.0.0.1', :aliases => %w(-o), :desc => 'Host to bind.'
20
+ option :port, :type => :numeric, :default => 9595, :aliases => %w(-p), :desc => 'Port to bind.'
21
21
 
22
- option :backlog, :type => :numeric, :default => 100, :aliases => %w(-b), :desc => 'Backlog for listening socket when using Socket Server.'
23
- option :threshold, :type => :numeric, :default => 100, :aliases => %w(-t), :desc => 'Multi-threaded Socket Server cleanup threshold.'
22
+ option :backlog, :type => :numeric, :default => 100, :aliases => %w(-b), :desc => 'Backlog for listening socket when using Socket Server.'
23
+ option :threshold, :type => :numeric, :default => 100, :aliases => %w(-t), :desc => 'Multi-threaded Socket Server cleanup threshold.'
24
24
 
25
- option :log, :type => :string, :aliases => %w(-l), :desc => 'Log file or device. Default is STDOUT.'
26
- option :level, :type => :numeric, :default => ::Logger::INFO, :aliases => %w(-v), :desc => 'Log level to use, 0-5 (see http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/)'
25
+ option :log, :type => :string, :aliases => %w(-l), :desc => 'Log file or device. Default is STDOUT.'
26
+ option :level, :type => :numeric, :default => ::Logger::INFO, :aliases => %w(-v), :desc => 'Log level to use, 0-5 (see http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/)'
27
27
 
28
- option :socket, :type => :boolean, :aliases => %w(-s), :desc => 'Socket Mode for server and client connections.'
29
- option :evented, :type => :boolean, :aliases => %w(-m), :desc => 'Evented Mode for server and client connections (uses EventMachine).'
30
- option :zmq, :type => :boolean, :aliases => %w(-z), :desc => 'ZeroMQ Socket Mode for server and client connections.'
28
+ option :socket, :type => :boolean, :aliases => %w(-s), :desc => 'Socket Mode for server and client connections.'
29
+ option :evented, :type => :boolean, :aliases => %w(-m), :desc => 'Evented Mode for server and client connections (uses EventMachine).'
30
+ option :zmq, :type => :boolean, :aliases => %w(-z), :desc => 'ZeroMQ Socket Mode for server and client connections.'
31
31
 
32
- option :debug, :type => :boolean, :default => false, :aliases => %w(-d), :desc => 'Debug Mode. Override log level to DEBUG.'
33
- option :gc_pause_request, :type => :boolean, :default => false, :desc => 'Enable/Disable GC pause during request.'
34
- option :gc_pause_serialization, :type => :boolean, :default => false, :desc => 'Enable/Disable GC pause during serialization.'
32
+ option :debug, :type => :boolean, :default => false, :aliases => %w(-d), :desc => 'Debug Mode. Override log level to DEBUG.'
33
+ option :gc_pause_request, :type => :boolean, :default => false, :desc => 'Enable/Disable GC pause during request.'
34
+ option :print_deprecation_warnings, :type => :boolean, :default => true, :desc => 'Cause use of deprecated fields to be printed or ignored.'
35
35
 
36
36
  def start(app_file)
37
37
  debug_say 'Configuring the rpc_server process'
@@ -42,6 +42,7 @@ module Protobuf
42
42
  configure_server_mode
43
43
  require_protobuf!
44
44
  configure_gc
45
+ configure_deprecation_warnings
45
46
 
46
47
  run_if_no_abort { require_application!(app_file) }
47
48
  run_if_no_abort { configure_process_name(app_file) }
@@ -58,11 +59,15 @@ module Protobuf
58
59
 
59
60
  no_tasks do
60
61
 
62
+ # Tell protobuf how to handle the printing of deprecated field usage.
63
+ def configure_deprecation_warnings
64
+ ::Protobuf.print_deprecation_warnings = options.print_deprecation_warnings?
65
+ end
66
+
61
67
  # If we pause during request we don't need to pause in serialization
62
68
  def configure_gc
63
69
  debug_say 'Configuring gc'
64
70
  ::Protobuf.gc_pause_server_request = options.gc_pause_request?
65
- ::Protobuf.gc_pause_server_serialization = (!options.gc_pause_request? && options.gc_pause_serialization?)
66
71
  end
67
72
 
68
73
  # Setup the protobuf logger.