protobuf 2.8.13 → 3.0.0.rc1

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 (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +84 -5
  3. data/CONTRIBUTING.md +3 -3
  4. data/Rakefile +46 -7
  5. data/lib/protobuf/cli.rb +2 -20
  6. data/lib/protobuf/decoder.rb +74 -0
  7. data/lib/protobuf/deprecator.rb +42 -0
  8. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +17 -16
  9. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +86 -85
  10. data/lib/protobuf/encoder.rb +62 -0
  11. data/lib/protobuf/enum.rb +298 -37
  12. data/lib/protobuf/field/base_field.rb +41 -27
  13. data/lib/protobuf/field/bool_field.rb +22 -4
  14. data/lib/protobuf/field/bytes_field.rb +36 -15
  15. data/lib/protobuf/field/double_field.rb +10 -3
  16. data/lib/protobuf/field/enum_field.rb +21 -18
  17. data/lib/protobuf/field/field_array.rb +26 -16
  18. data/lib/protobuf/field/fixed32_field.rb +10 -4
  19. data/lib/protobuf/field/fixed64_field.rb +10 -3
  20. data/lib/protobuf/field/float_field.rb +18 -5
  21. data/lib/protobuf/field/int32_field.rb +14 -4
  22. data/lib/protobuf/field/int64_field.rb +14 -4
  23. data/lib/protobuf/field/integer_field.rb +9 -4
  24. data/lib/protobuf/field/message_field.rb +16 -7
  25. data/lib/protobuf/field/sfixed32_field.rb +10 -3
  26. data/lib/protobuf/field/sfixed64_field.rb +12 -7
  27. data/lib/protobuf/field/signed_integer_field.rb +7 -0
  28. data/lib/protobuf/field/sint32_field.rb +14 -4
  29. data/lib/protobuf/field/sint64_field.rb +14 -4
  30. data/lib/protobuf/field/string_field.rb +11 -1
  31. data/lib/protobuf/field/uint32_field.rb +14 -4
  32. data/lib/protobuf/field/uint64_field.rb +14 -4
  33. data/lib/protobuf/field/varint_field.rb +11 -9
  34. data/lib/protobuf/field.rb +42 -25
  35. data/lib/protobuf/generators/enum_generator.rb +12 -1
  36. data/lib/protobuf/generators/field_generator.rb +1 -1
  37. data/lib/protobuf/lifecycle.rb +3 -4
  38. data/lib/protobuf/message/fields.rb +122 -0
  39. data/lib/protobuf/message/serialization.rb +84 -0
  40. data/lib/protobuf/message.rb +21 -221
  41. data/lib/protobuf/optionable.rb +23 -0
  42. data/lib/protobuf/rpc/client.rb +2 -4
  43. data/lib/protobuf/rpc/connector.rb +0 -2
  44. data/lib/protobuf/rpc/connectors/common.rb +2 -2
  45. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +14 -16
  46. data/lib/protobuf/rpc/env.rb +58 -0
  47. data/lib/protobuf/rpc/error.rb +8 -5
  48. data/lib/protobuf/rpc/middleware/exception_handler.rb +36 -0
  49. data/lib/protobuf/rpc/middleware/logger.rb +91 -0
  50. data/lib/protobuf/rpc/middleware/request_decoder.rb +83 -0
  51. data/lib/protobuf/rpc/middleware/response_encoder.rb +88 -0
  52. data/lib/protobuf/rpc/middleware/runner.rb +18 -0
  53. data/lib/protobuf/rpc/middleware.rb +25 -0
  54. data/lib/protobuf/rpc/rpc.pb.rb +15 -16
  55. data/lib/protobuf/rpc/server.rb +14 -64
  56. data/lib/protobuf/rpc/servers/socket/server.rb +0 -2
  57. data/lib/protobuf/rpc/servers/socket/worker.rb +11 -15
  58. data/lib/protobuf/rpc/servers/zmq/util.rb +4 -1
  59. data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -13
  60. data/lib/protobuf/rpc/servers/zmq_runner.rb +1 -1
  61. data/lib/protobuf/rpc/service.rb +38 -72
  62. data/lib/protobuf/rpc/service_dispatcher.rb +20 -108
  63. data/lib/protobuf/version.rb +1 -2
  64. data/lib/protobuf.rb +5 -13
  65. data/protobuf.gemspec +5 -5
  66. data/spec/benchmark/tasks.rb +2 -77
  67. data/spec/functional/zmq_server_spec.rb +13 -21
  68. data/spec/lib/protobuf/cli_spec.rb +5 -43
  69. data/spec/lib/protobuf/enum_spec.rb +194 -61
  70. data/spec/lib/protobuf/field_spec.rb +194 -0
  71. data/spec/lib/protobuf/generators/enum_generator_spec.rb +24 -1
  72. data/spec/lib/protobuf/generators/field_generator_spec.rb +6 -6
  73. data/spec/lib/protobuf/message_spec.rb +52 -70
  74. data/spec/lib/protobuf/optionable_spec.rb +46 -0
  75. data/spec/lib/protobuf/rpc/client_spec.rb +1 -93
  76. data/spec/lib/protobuf/rpc/connector_spec.rb +1 -7
  77. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +8 -0
  78. data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +62 -0
  79. data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +49 -0
  80. data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +115 -0
  81. data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +75 -0
  82. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +0 -6
  83. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +10 -0
  84. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +30 -105
  85. data/spec/lib/protobuf/rpc/service_filters_spec.rb +4 -4
  86. data/spec/lib/protobuf/rpc/service_spec.rb +20 -24
  87. data/spec/lib/protobuf_spec.rb +3 -3
  88. data/spec/spec_helper.rb +5 -4
  89. data/spec/support/packed_field.rb +15 -14
  90. data/spec/support/server.rb +4 -21
  91. data/spec/support/test/defaults.pb.rb +4 -4
  92. data/spec/support/test/enum.pb.rb +13 -1
  93. data/spec/support/test/enum.proto +15 -0
  94. data/spec/support/test/extended.pb.rb +1 -1
  95. data/spec/support/test/google_unittest.pb.rb +239 -241
  96. data/spec/support/test/google_unittest_import.pb.rb +2 -2
  97. data/spec/support/test/multi_field_extensions.pb.rb +2 -2
  98. data/spec/support/test/resource.pb.rb +19 -18
  99. data/spec/support/test/resource.proto +1 -0
  100. data/spec/support/test/resource_service.rb +5 -0
  101. metadata +78 -57
  102. data/bin/rprotoc +0 -8
  103. data/lib/protobuf/enum_value.rb +0 -85
  104. data/lib/protobuf/evented.rb +0 -37
  105. data/lib/protobuf/ext/eventmachine.rb +0 -14
  106. data/lib/protobuf/field/extension_fields.rb +0 -32
  107. data/lib/protobuf/message/decoder.rb +0 -72
  108. data/lib/protobuf/message/message.rb +0 -1
  109. data/lib/protobuf/rpc/connectors/em_client.rb +0 -84
  110. data/lib/protobuf/rpc/connectors/eventmachine.rb +0 -87
  111. data/lib/protobuf/rpc/servers/evented/server.rb +0 -36
  112. data/lib/protobuf/rpc/servers/evented_runner.rb +0 -31
  113. data/spec/functional/embedded_service_spec.rb +0 -7
  114. data/spec/functional/evented_server_spec.rb +0 -64
  115. data/spec/lib/protobuf/enum_value_spec.rb +0 -29
  116. data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +0 -19
@@ -4,9 +4,8 @@
4
4
  require 'protobuf/message'
5
5
 
6
6
  module Google
7
-
8
7
  module Protobuf
9
-
8
+
10
9
  ##
11
10
  # Message Classes
12
11
  #
@@ -14,7 +13,9 @@ module Google
14
13
  class FileDescriptorProto < ::Protobuf::Message; end
15
14
  class DescriptorProto < ::Protobuf::Message
16
15
  class ExtensionRange < ::Protobuf::Message; end
16
+
17
17
  end
18
+
18
19
  class FieldDescriptorProto < ::Protobuf::Message
19
20
  class Type < ::Protobuf::Enum
20
21
  define :TYPE_DOUBLE, 1
@@ -36,14 +37,15 @@ module Google
36
37
  define :TYPE_SINT32, 17
37
38
  define :TYPE_SINT64, 18
38
39
  end
39
-
40
+
40
41
  class Label < ::Protobuf::Enum
41
42
  define :LABEL_OPTIONAL, 1
42
43
  define :LABEL_REQUIRED, 2
43
44
  define :LABEL_REPEATED, 3
44
45
  end
45
-
46
+
46
47
  end
48
+
47
49
  class EnumDescriptorProto < ::Protobuf::Message; end
48
50
  class EnumValueDescriptorProto < ::Protobuf::Message; end
49
51
  class ServiceDescriptorProto < ::Protobuf::Message; end
@@ -54,8 +56,9 @@ module Google
54
56
  define :CODE_SIZE, 2
55
57
  define :LITE_RUNTIME, 3
56
58
  end
57
-
59
+
58
60
  end
61
+
59
62
  class MessageOptions < ::Protobuf::Message; end
60
63
  class FieldOptions < ::Protobuf::Message
61
64
  class CType < ::Protobuf::Enum
@@ -63,32 +66,38 @@ module Google
63
66
  define :CORD, 1
64
67
  define :STRING_PIECE, 2
65
68
  end
66
-
69
+
67
70
  end
71
+
68
72
  class EnumOptions < ::Protobuf::Message; end
69
73
  class EnumValueOptions < ::Protobuf::Message; end
70
74
  class ServiceOptions < ::Protobuf::Message; end
71
75
  class MethodOptions < ::Protobuf::Message; end
72
76
  class UninterpretedOption < ::Protobuf::Message
73
77
  class NamePart < ::Protobuf::Message; end
78
+
74
79
  end
80
+
75
81
  class SourceCodeInfo < ::Protobuf::Message
76
82
  class Location < ::Protobuf::Message; end
83
+
77
84
  end
78
-
85
+
86
+
87
+
79
88
  ##
80
89
  # Message Fields
81
90
  #
82
91
  class FileDescriptorSet
83
92
  repeated ::Google::Protobuf::FileDescriptorProto, :file, 1
84
93
  end
85
-
94
+
86
95
  class FileDescriptorProto
87
- optional ::Protobuf::Field::StringField, :name, 1
88
- optional ::Protobuf::Field::StringField, :package, 2
89
- repeated ::Protobuf::Field::StringField, :dependency, 3
90
- repeated ::Protobuf::Field::Int32Field, :public_dependency, 10
91
- repeated ::Protobuf::Field::Int32Field, :weak_dependency, 11
96
+ optional :string, :name, 1
97
+ optional :string, :package, 2
98
+ repeated :string, :dependency, 3
99
+ repeated :int32, :public_dependency, 10
100
+ repeated :int32, :weak_dependency, 11
92
101
  repeated ::Google::Protobuf::DescriptorProto, :message_type, 4
93
102
  repeated ::Google::Protobuf::EnumDescriptorProto, :enum_type, 5
94
103
  repeated ::Google::Protobuf::ServiceDescriptorProto, :service, 6
@@ -96,14 +105,14 @@ module Google
96
105
  optional ::Google::Protobuf::FileOptions, :options, 8
97
106
  optional ::Google::Protobuf::SourceCodeInfo, :source_code_info, 9
98
107
  end
99
-
108
+
100
109
  class DescriptorProto
101
110
  class ExtensionRange
102
- optional ::Protobuf::Field::Int32Field, :start, 1
103
- optional ::Protobuf::Field::Int32Field, :end, 2
111
+ optional :int32, :start, 1
112
+ optional :int32, :end, 2
104
113
  end
105
-
106
- optional ::Protobuf::Field::StringField, :name, 1
114
+
115
+ optional :string, :name, 1
107
116
  repeated ::Google::Protobuf::FieldDescriptorProto, :field, 2
108
117
  repeated ::Google::Protobuf::FieldDescriptorProto, :extension, 6
109
118
  repeated ::Google::Protobuf::DescriptorProto, :nested_type, 3
@@ -111,138 +120,130 @@ module Google
111
120
  repeated ::Google::Protobuf::DescriptorProto::ExtensionRange, :extension_range, 5
112
121
  optional ::Google::Protobuf::MessageOptions, :options, 7
113
122
  end
114
-
123
+
115
124
  class FieldDescriptorProto
116
- optional ::Protobuf::Field::StringField, :name, 1
117
- optional ::Protobuf::Field::Int32Field, :number, 3
125
+ optional :string, :name, 1
126
+ optional :int32, :number, 3
118
127
  optional ::Google::Protobuf::FieldDescriptorProto::Label, :label, 4
119
128
  optional ::Google::Protobuf::FieldDescriptorProto::Type, :type, 5
120
- optional ::Protobuf::Field::StringField, :type_name, 6
121
- optional ::Protobuf::Field::StringField, :extendee, 2
122
- optional ::Protobuf::Field::StringField, :default_value, 7
129
+ optional :string, :type_name, 6
130
+ optional :string, :extendee, 2
131
+ optional :string, :default_value, 7
123
132
  optional ::Google::Protobuf::FieldOptions, :options, 8
124
133
  end
125
-
134
+
126
135
  class EnumDescriptorProto
127
- optional ::Protobuf::Field::StringField, :name, 1
136
+ optional :string, :name, 1
128
137
  repeated ::Google::Protobuf::EnumValueDescriptorProto, :value, 2
129
138
  optional ::Google::Protobuf::EnumOptions, :options, 3
130
139
  end
131
-
140
+
132
141
  class EnumValueDescriptorProto
133
- optional ::Protobuf::Field::StringField, :name, 1
134
- optional ::Protobuf::Field::Int32Field, :number, 2
142
+ optional :string, :name, 1
143
+ optional :int32, :number, 2
135
144
  optional ::Google::Protobuf::EnumValueOptions, :options, 3
136
145
  end
137
-
146
+
138
147
  class ServiceDescriptorProto
139
- optional ::Protobuf::Field::StringField, :name, 1
148
+ optional :string, :name, 1
140
149
  repeated ::Google::Protobuf::MethodDescriptorProto, :method, 2
141
150
  optional ::Google::Protobuf::ServiceOptions, :options, 3
142
151
  end
143
-
152
+
144
153
  class MethodDescriptorProto
145
- optional ::Protobuf::Field::StringField, :name, 1
146
- optional ::Protobuf::Field::StringField, :input_type, 2
147
- optional ::Protobuf::Field::StringField, :output_type, 3
154
+ optional :string, :name, 1
155
+ optional :string, :input_type, 2
156
+ optional :string, :output_type, 3
148
157
  optional ::Google::Protobuf::MethodOptions, :options, 4
149
158
  end
150
-
159
+
151
160
  class FileOptions
152
- optional ::Protobuf::Field::StringField, :java_package, 1
153
- optional ::Protobuf::Field::StringField, :java_outer_classname, 8
154
- optional ::Protobuf::Field::BoolField, :java_multiple_files, 10, :default => false
155
- optional ::Protobuf::Field::BoolField, :java_generate_equals_and_hash, 20, :default => false
161
+ optional :string, :java_package, 1
162
+ optional :string, :java_outer_classname, 8
163
+ optional :bool, :java_multiple_files, 10, :default => false
164
+ optional :bool, :java_generate_equals_and_hash, 20, :default => false
156
165
  optional ::Google::Protobuf::FileOptions::OptimizeMode, :optimize_for, 9, :default => ::Google::Protobuf::FileOptions::OptimizeMode::SPEED
157
- optional ::Protobuf::Field::StringField, :go_package, 11
158
- optional ::Protobuf::Field::BoolField, :cc_generic_services, 16, :default => false
159
- optional ::Protobuf::Field::BoolField, :java_generic_services, 17, :default => false
160
- optional ::Protobuf::Field::BoolField, :py_generic_services, 18, :default => false
166
+ optional :string, :go_package, 11
167
+ optional :bool, :cc_generic_services, 16, :default => false
168
+ optional :bool, :java_generic_services, 17, :default => false
169
+ optional :bool, :py_generic_services, 18, :default => false
161
170
  repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
162
-
163
171
  # Extension Fields
164
172
  extensions 1000...536870912
165
173
  end
166
-
174
+
167
175
  class MessageOptions
168
- optional ::Protobuf::Field::BoolField, :message_set_wire_format, 1, :default => false
169
- optional ::Protobuf::Field::BoolField, :no_standard_descriptor_accessor, 2, :default => false
176
+ optional :bool, :message_set_wire_format, 1, :default => false
177
+ optional :bool, :no_standard_descriptor_accessor, 2, :default => false
170
178
  repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
171
-
172
179
  # Extension Fields
173
180
  extensions 1000...536870912
174
181
  end
175
-
182
+
176
183
  class FieldOptions
177
184
  optional ::Google::Protobuf::FieldOptions::CType, :ctype, 1, :default => ::Google::Protobuf::FieldOptions::CType::STRING
178
- optional ::Protobuf::Field::BoolField, :packed, 2
179
- optional ::Protobuf::Field::BoolField, :lazy, 5, :default => false
180
- optional ::Protobuf::Field::BoolField, :deprecated, 3, :default => false
181
- optional ::Protobuf::Field::StringField, :experimental_map_key, 9
182
- optional ::Protobuf::Field::BoolField, :weak, 10, :default => false
185
+ optional :bool, :packed, 2
186
+ optional :bool, :lazy, 5, :default => false
187
+ optional :bool, :deprecated, 3, :default => false
188
+ optional :string, :experimental_map_key, 9
189
+ optional :bool, :weak, 10, :default => false
183
190
  repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
184
-
185
191
  # Extension Fields
186
192
  extensions 1000...536870912
187
193
  end
188
-
194
+
189
195
  class EnumOptions
190
- optional ::Protobuf::Field::BoolField, :allow_alias, 2, :default => true
196
+ optional :bool, :allow_alias, 2, :default => true
191
197
  repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
192
-
193
198
  # Extension Fields
194
199
  extensions 1000...536870912
195
200
  end
196
-
201
+
197
202
  class EnumValueOptions
198
203
  repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
199
-
200
204
  # Extension Fields
201
205
  extensions 1000...536870912
202
206
  end
203
-
207
+
204
208
  class ServiceOptions
205
209
  repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
206
-
207
210
  # Extension Fields
208
211
  extensions 1000...536870912
209
212
  end
210
-
213
+
211
214
  class MethodOptions
212
215
  repeated ::Google::Protobuf::UninterpretedOption, :uninterpreted_option, 999
213
-
214
216
  # Extension Fields
215
217
  extensions 1000...536870912
216
218
  end
217
-
219
+
218
220
  class UninterpretedOption
219
221
  class NamePart
220
- required ::Protobuf::Field::StringField, :name_part, 1
221
- required ::Protobuf::Field::BoolField, :is_extension, 2
222
+ required :string, :name_part, 1
223
+ required :bool, :is_extension, 2
222
224
  end
223
-
225
+
224
226
  repeated ::Google::Protobuf::UninterpretedOption::NamePart, :name, 2
225
- optional ::Protobuf::Field::StringField, :identifier_value, 3
226
- optional ::Protobuf::Field::Uint64Field, :positive_int_value, 4
227
- optional ::Protobuf::Field::Int64Field, :negative_int_value, 5
228
- optional ::Protobuf::Field::DoubleField, :double_value, 6
229
- optional ::Protobuf::Field::BytesField, :string_value, 7
230
- optional ::Protobuf::Field::StringField, :aggregate_value, 8
231
- end
232
-
227
+ optional :string, :identifier_value, 3
228
+ optional :uint64, :positive_int_value, 4
229
+ optional :int64, :negative_int_value, 5
230
+ optional :double, :double_value, 6
231
+ optional :bytes, :string_value, 7
232
+ optional :string, :aggregate_value, 8
233
+ end
234
+
233
235
  class SourceCodeInfo
234
236
  class Location
235
- repeated ::Protobuf::Field::Int32Field, :path, 1, :packed => true
236
- repeated ::Protobuf::Field::Int32Field, :span, 2, :packed => true
237
- optional ::Protobuf::Field::StringField, :leading_comments, 3
238
- optional ::Protobuf::Field::StringField, :trailing_comments, 4
237
+ repeated :int32, :path, 1, :packed => true
238
+ repeated :int32, :span, 2, :packed => true
239
+ optional :string, :leading_comments, 3
240
+ optional :string, :trailing_comments, 4
239
241
  end
240
-
242
+
241
243
  repeated ::Google::Protobuf::SourceCodeInfo::Location, :location, 1
242
244
  end
243
-
244
-
245
+
245
246
  end
246
-
247
+
247
248
  end
248
249
 
@@ -0,0 +1,62 @@
1
+ module Protobuf
2
+ class Encoder
3
+
4
+ def self.encode(stream, message)
5
+ new(stream, message).encode
6
+ end
7
+
8
+ attr_reader :message, :stream
9
+
10
+ def initialize(message, stream)
11
+ unless message.respond_to?(:each_field_for_serialization)
12
+ raise ArgumentError, "Message instance must respond to :each_field_for_serialization"
13
+ end
14
+
15
+ @message = message
16
+ @stream = stream
17
+ end
18
+
19
+ def encode
20
+ message.each_field_for_serialization do |field, value|
21
+ encode_field(field, value)
22
+ end
23
+
24
+ stream
25
+ end
26
+
27
+ private
28
+
29
+ def encode_field(field, value)
30
+ if field.repeated?
31
+ encode_repeated_field(field, value)
32
+ else
33
+ write_pair(field, value)
34
+ end
35
+ end
36
+
37
+ def encode_packed_field(field, value)
38
+ key = (field.tag << 3) | ::Protobuf::WireType::LENGTH_DELIMITED
39
+ packed_value = value.map { |val| field.encode(val) }.join
40
+ stream << ::Protobuf::Field::VarintField.encode(key)
41
+ stream << ::Protobuf::Field::VarintField.encode(packed_value.size)
42
+ stream << packed_value
43
+ end
44
+
45
+ def encode_repeated_field(field, value)
46
+ if field.packed?
47
+ encode_packed_field(field, value)
48
+ else
49
+ value.each { |val| write_pair(field, val) }
50
+ end
51
+ end
52
+
53
+ # Encode key and value, and write to +stream+.
54
+ def write_pair(field, value)
55
+ key = (field.tag << 3) | field.wire_type
56
+ stream << ::Protobuf::Field::VarintField.encode(key)
57
+ stream << field.encode(value)
58
+ end
59
+
60
+ end
61
+ end
62
+