protobuf 3.3.6 → 3.4.0
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 +7 -0
- data/.rubocop.yml +48 -0
- data/.rubocop_todo.yml +79 -0
- data/.travis.yml +12 -4
- data/Rakefile +14 -11
- data/bin/protoc-gen-ruby +0 -1
- data/bin/rpc_server +1 -0
- data/install-protobuf.sh +8 -0
- data/lib/protobuf.rb +30 -24
- data/lib/protobuf/cli.rb +35 -35
- data/lib/protobuf/code_generator.rb +11 -8
- data/lib/protobuf/decoder.rb +4 -5
- data/lib/protobuf/deprecation.rb +20 -0
- data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +2 -0
- data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +2 -0
- data/lib/protobuf/encoder.rb +9 -4
- data/lib/protobuf/enum.rb +38 -54
- data/lib/protobuf/field.rb +2 -2
- data/lib/protobuf/field/base_field.rb +28 -32
- data/lib/protobuf/field/bool_field.rb +4 -4
- data/lib/protobuf/field/bytes_field.rb +5 -4
- data/lib/protobuf/field/double_field.rb +0 -1
- data/lib/protobuf/field/enum_field.rb +4 -7
- data/lib/protobuf/field/field_array.rb +3 -4
- data/lib/protobuf/field/fixed32_field.rb +1 -1
- data/lib/protobuf/field/fixed64_field.rb +0 -1
- data/lib/protobuf/field/float_field.rb +0 -1
- data/lib/protobuf/field/int32_field.rb +0 -1
- data/lib/protobuf/field/int64_field.rb +0 -1
- data/lib/protobuf/field/integer_field.rb +0 -1
- data/lib/protobuf/field/message_field.rb +2 -3
- data/lib/protobuf/field/sfixed32_field.rb +0 -1
- data/lib/protobuf/field/sfixed64_field.rb +0 -1
- data/lib/protobuf/field/signed_integer_field.rb +0 -1
- data/lib/protobuf/field/sint32_field.rb +0 -1
- data/lib/protobuf/field/sint64_field.rb +0 -1
- data/lib/protobuf/field/string_field.rb +0 -1
- data/lib/protobuf/field/uint32_field.rb +0 -1
- data/lib/protobuf/field/uint64_field.rb +0 -1
- data/lib/protobuf/field/varint_field.rb +0 -1
- data/lib/protobuf/generators/base.rb +1 -2
- data/lib/protobuf/generators/enum_generator.rb +1 -2
- data/lib/protobuf/generators/extension_generator.rb +1 -2
- data/lib/protobuf/generators/field_generator.rb +4 -5
- data/lib/protobuf/generators/file_generator.rb +22 -27
- data/lib/protobuf/generators/group_generator.rb +15 -16
- data/lib/protobuf/generators/message_generator.rb +13 -14
- data/lib/protobuf/generators/printable.rb +9 -10
- data/lib/protobuf/generators/service_generator.rb +1 -2
- data/lib/protobuf/lifecycle.rb +20 -33
- data/lib/protobuf/logging.rb +4 -6
- data/lib/protobuf/message.rb +22 -16
- data/lib/protobuf/message/fields.rb +14 -17
- data/lib/protobuf/message/serialization.rb +6 -5
- data/lib/protobuf/rpc/buffer.rb +10 -12
- data/lib/protobuf/rpc/client.rb +12 -12
- data/lib/protobuf/rpc/connectors/base.rb +4 -3
- data/lib/protobuf/rpc/connectors/common.rb +15 -17
- data/lib/protobuf/rpc/connectors/socket.rb +2 -2
- data/lib/protobuf/rpc/connectors/zmq.rb +118 -108
- data/lib/protobuf/rpc/dynamic_discovery.pb.rb +2 -0
- data/lib/protobuf/rpc/env.rb +12 -12
- data/lib/protobuf/rpc/error.rb +1 -1
- data/lib/protobuf/rpc/error/client_error.rb +4 -4
- data/lib/protobuf/rpc/error/server_error.rb +6 -6
- data/lib/protobuf/rpc/middleware/exception_handler.rb +1 -1
- data/lib/protobuf/rpc/middleware/logger.rb +3 -3
- data/lib/protobuf/rpc/middleware/request_decoder.rb +5 -5
- data/lib/protobuf/rpc/middleware/response_encoder.rb +3 -3
- data/lib/protobuf/rpc/rpc.pb.rb +2 -0
- data/lib/protobuf/rpc/servers/socket/server.rb +75 -65
- data/lib/protobuf/rpc/servers/socket/worker.rb +2 -2
- data/lib/protobuf/rpc/servers/socket_runner.rb +12 -6
- data/lib/protobuf/rpc/servers/zmq/broker.rb +10 -6
- data/lib/protobuf/rpc/servers/zmq/server.rb +20 -26
- data/lib/protobuf/rpc/servers/zmq/util.rb +7 -7
- data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -7
- data/lib/protobuf/rpc/servers/zmq_runner.rb +14 -3
- data/lib/protobuf/rpc/service.rb +15 -15
- data/lib/protobuf/rpc/service_directory.rb +7 -11
- data/lib/protobuf/rpc/service_dispatcher.rb +3 -3
- data/lib/protobuf/rpc/service_filters.rb +27 -28
- data/lib/protobuf/rpc/stat.rb +4 -7
- data/lib/protobuf/socket.rb +0 -1
- data/lib/protobuf/tasks/compile.rake +2 -2
- data/lib/protobuf/version.rb +1 -1
- data/protobuf.gemspec +20 -4
- data/spec/benchmark/tasks.rb +49 -23
- data/spec/bin/protoc-gen-ruby_spec.rb +11 -6
- data/spec/encoding/all_types_spec.rb +91 -77
- data/spec/encoding/extreme_values_spec.rb +0 -0
- data/spec/functional/socket_server_spec.rb +9 -10
- data/spec/functional/zmq_server_spec.rb +21 -19
- data/spec/lib/protobuf/cli_spec.rb +20 -20
- data/spec/lib/protobuf/code_generator_spec.rb +6 -6
- data/spec/lib/protobuf/enum_spec.rb +57 -31
- data/spec/lib/protobuf/field/float_field_spec.rb +2 -2
- data/spec/lib/protobuf/field/int32_field_spec.rb +1 -1
- data/spec/lib/protobuf/field/string_field_spec.rb +7 -8
- data/spec/lib/protobuf/field_spec.rb +3 -6
- data/spec/lib/protobuf/generators/base_spec.rb +6 -6
- data/spec/lib/protobuf/generators/enum_generator_spec.rb +22 -17
- data/spec/lib/protobuf/generators/extension_generator_spec.rb +8 -9
- data/spec/lib/protobuf/generators/field_generator_spec.rb +14 -11
- data/spec/lib/protobuf/generators/file_generator_spec.rb +7 -4
- data/spec/lib/protobuf/generators/service_generator_spec.rb +14 -11
- data/spec/lib/protobuf/lifecycle_spec.rb +9 -4
- data/spec/lib/protobuf/message_spec.rb +63 -35
- data/spec/lib/protobuf/optionable_spec.rb +3 -3
- data/spec/lib/protobuf/rpc/client_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/connector_spec.rb +1 -1
- data/spec/lib/protobuf/rpc/connectors/base_spec.rb +6 -6
- data/spec/lib/protobuf/rpc/connectors/common_spec.rb +26 -18
- data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +11 -9
- data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +7 -7
- data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +14 -14
- data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +5 -5
- data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
- data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +9 -7
- data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +9 -9
- data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/service_directory_spec.rb +24 -23
- data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/service_filters_spec.rb +84 -51
- data/spec/lib/protobuf/rpc/service_spec.rb +15 -14
- data/spec/lib/protobuf/rpc/stat_spec.rb +1 -1
- data/spec/lib/protobuf_spec.rb +9 -9
- data/spec/spec_helper.rb +7 -19
- data/spec/support/server.rb +29 -59
- data/spec/support/test/defaults.pb.rb +2 -0
- data/spec/support/test/enum.pb.rb +2 -0
- data/spec/support/test/extended.pb.rb +2 -0
- data/spec/support/test/google_unittest_import.pb.rb +2 -0
- data/spec/support/test/google_unittest_import_public.pb.rb +2 -0
- data/spec/support/test/multi_field_extensions.pb.rb +2 -0
- data/spec/support/test/resource.pb.rb +2 -0
- data/spec/support/test/resource_service.rb +17 -20
- metadata +153 -112
- data/lib/protobuf/deprecator.rb +0 -42
@@ -23,7 +23,7 @@ module Protobuf
|
|
23
23
|
|
24
24
|
def compile_declaration
|
25
25
|
run_once(:compile_declaration) do
|
26
|
-
if
|
26
|
+
if printable?
|
27
27
|
print_class(descriptor.name, :message) do
|
28
28
|
group = GroupGenerator.new(current_indent)
|
29
29
|
group.add_enums(descriptor.enum_type, :namespace => type_namespace)
|
@@ -38,7 +38,7 @@ module Protobuf
|
|
38
38
|
|
39
39
|
def compile_message
|
40
40
|
run_once(:compile_message) do
|
41
|
-
if
|
41
|
+
if printable?
|
42
42
|
print_class(descriptor.name, nil) do
|
43
43
|
group = GroupGenerator.new(current_indent)
|
44
44
|
group.add_messages(descriptor.nested_type, :extension_fields => @extension_fields, :namespace => type_namespace)
|
@@ -52,7 +52,7 @@ module Protobuf
|
|
52
52
|
|
53
53
|
group.add_extension_fields(message_extension_fields)
|
54
54
|
|
55
|
-
group.order = [
|
55
|
+
group.order = [:message, :field, :extension_range, :extension_field]
|
56
56
|
print group.to_s
|
57
57
|
end
|
58
58
|
end
|
@@ -61,31 +61,31 @@ module Protobuf
|
|
61
61
|
|
62
62
|
private
|
63
63
|
|
64
|
-
def
|
65
|
-
!
|
64
|
+
def extensions?
|
65
|
+
!message_extension_fields.empty?
|
66
66
|
end
|
67
67
|
|
68
|
-
def
|
68
|
+
def fields?
|
69
69
|
descriptor.field.count > 0
|
70
70
|
end
|
71
71
|
|
72
|
-
def
|
72
|
+
def nested_enums?
|
73
73
|
descriptor.enum_type.count > 0
|
74
74
|
end
|
75
75
|
|
76
|
-
def
|
76
|
+
def nested_messages?
|
77
77
|
descriptor.nested_type.count > 0
|
78
78
|
end
|
79
79
|
|
80
|
-
def
|
81
|
-
|
80
|
+
def nested_types?
|
81
|
+
nested_enums? || nested_messages?
|
82
82
|
end
|
83
83
|
|
84
|
-
def
|
84
|
+
def printable?
|
85
85
|
if @only_declarations
|
86
|
-
|
86
|
+
nested_types?
|
87
87
|
else
|
88
|
-
|
88
|
+
fields? || nested_messages? || extensions?
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -96,4 +96,3 @@ module Protobuf
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
99
|
-
|
@@ -11,9 +11,13 @@ module Protobuf
|
|
11
11
|
#
|
12
12
|
def init_printer(indent_level)
|
13
13
|
@io = ::StringIO.new
|
14
|
-
|
14
|
+
self.current_indent = indent_level.to_i
|
15
15
|
end
|
16
16
|
|
17
|
+
protected
|
18
|
+
|
19
|
+
attr_accessor :current_indent
|
20
|
+
|
17
21
|
private
|
18
22
|
|
19
23
|
# Print a one-line comment.
|
@@ -22,10 +26,6 @@ module Protobuf
|
|
22
26
|
puts "# #{message}"
|
23
27
|
end
|
24
28
|
|
25
|
-
def current_indent
|
26
|
-
@_indent_level
|
27
|
-
end
|
28
|
-
|
29
29
|
# Print a "header" comment.
|
30
30
|
#
|
31
31
|
# header("Lorem ipsum dolor")
|
@@ -43,7 +43,7 @@ module Protobuf
|
|
43
43
|
# (after the block is finished).
|
44
44
|
#
|
45
45
|
def indent
|
46
|
-
|
46
|
+
self.current_indent += 1
|
47
47
|
yield
|
48
48
|
outdent
|
49
49
|
end
|
@@ -68,7 +68,7 @@ module Protobuf
|
|
68
68
|
# Decrease the indent level. Cannot be negative.
|
69
69
|
#
|
70
70
|
def outdent
|
71
|
-
|
71
|
+
self.current_indent -= 1 unless current_indent.zero?
|
72
72
|
end
|
73
73
|
|
74
74
|
# Return the parent class for a given type.
|
@@ -84,7 +84,7 @@ module Protobuf
|
|
84
84
|
when :service then
|
85
85
|
PARENT_CLASS_SERVICE
|
86
86
|
else
|
87
|
-
|
87
|
+
fail "Unknown parent class type #{type}: #{caller[0..5].join("\n")}"
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
@@ -136,7 +136,7 @@ module Protobuf
|
|
136
136
|
#
|
137
137
|
def puts(message = nil)
|
138
138
|
if message
|
139
|
-
@io.puts((" " *
|
139
|
+
@io.puts((" " * current_indent) + message)
|
140
140
|
else
|
141
141
|
@io.puts
|
142
142
|
end
|
@@ -158,4 +158,3 @@ module Protobuf
|
|
158
158
|
end
|
159
159
|
end
|
160
160
|
end
|
161
|
-
|
@@ -18,10 +18,9 @@ module Protobuf
|
|
18
18
|
name = method_descriptor.name
|
19
19
|
request_klass = modulize(method_descriptor.input_type)
|
20
20
|
response_klass = modulize(method_descriptor.output_type)
|
21
|
-
|
21
|
+
"rpc :#{name.underscore}, #{request_klass}, #{response_klass}"
|
22
22
|
end
|
23
23
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
data/lib/protobuf/lifecycle.rb
CHANGED
@@ -1,46 +1,33 @@
|
|
1
1
|
module Protobuf
|
2
2
|
class Lifecycle
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
event_name = normalized_event_name(event_name)
|
3
|
+
class << self
|
4
|
+
def register(event_name, &blk)
|
5
|
+
fail "Lifecycle register must have a block" unless block_given?
|
6
|
+
event_name = normalized_event_name(event_name)
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
Use ::ActiveSupport::Notifications.subscribe('#{event_name}')
|
13
|
-
ERROR
|
8
|
+
::ActiveSupport::Notifications.subscribe(event_name) do |_name, _start, _finish, _id, args|
|
9
|
+
blk.call(*args)
|
10
|
+
end
|
14
11
|
end
|
12
|
+
alias_method :on, :register
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
14
|
+
def trigger(event_name, *args)
|
15
|
+
event_name = normalized_event_name(event_name)
|
20
16
|
|
21
|
-
|
22
|
-
if ::Protobuf.print_deprecation_warnings?
|
23
|
-
$stderr.puts <<-ERROR
|
24
|
-
[DEPRECATED] ::Protobuf::Lifecycle has been deprecated and will be removed in a future version.
|
25
|
-
Use ::ActiveSupport::Notifications.instrument(...)
|
26
|
-
ERROR
|
17
|
+
::ActiveSupport::Notifications.instrument(event_name, args)
|
27
18
|
end
|
28
19
|
|
29
|
-
|
20
|
+
replacement = ::ActiveSupport::Notifications
|
30
21
|
|
31
|
-
::
|
32
|
-
|
22
|
+
::Protobuf.deprecator.deprecate_methods(
|
23
|
+
self,
|
24
|
+
:register => "#{replacement}.#{replacement.method(:subscribe).name}".to_sym,
|
25
|
+
:trigger => "#{replacement}.#{replacement.method(:instrument).name}".to_sym,
|
26
|
+
)
|
33
27
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
class << self
|
39
|
-
attr_accessor :lifecycle_events
|
40
|
-
|
41
|
-
alias_method :on, :register
|
28
|
+
def normalized_event_name(event_name)
|
29
|
+
event_name.to_s.downcase
|
30
|
+
end
|
42
31
|
end
|
43
|
-
|
44
|
-
@lifecycle_events ||= {}
|
45
32
|
end
|
46
33
|
end
|
data/lib/protobuf/logging.rb
CHANGED
@@ -2,9 +2,7 @@ require 'logger'
|
|
2
2
|
|
3
3
|
module Protobuf
|
4
4
|
module Logging
|
5
|
-
def self.initialize_logger(log_target
|
6
|
-
@counter ||= 0
|
7
|
-
@counter = @counter + 1
|
5
|
+
def self.initialize_logger(log_target = $stdout, log_level = ::Logger::INFO)
|
8
6
|
@logger = Logger.new(log_target)
|
9
7
|
@logger.level = log_level
|
10
8
|
@logger
|
@@ -14,8 +12,8 @@ module Protobuf
|
|
14
12
|
defined?(@logger) ? @logger : initialize_logger
|
15
13
|
end
|
16
14
|
|
17
|
-
|
18
|
-
|
15
|
+
class << self
|
16
|
+
attr_writer :logger
|
19
17
|
end
|
20
18
|
|
21
19
|
def logger
|
@@ -29,7 +27,7 @@ module Protobuf
|
|
29
27
|
end
|
30
28
|
|
31
29
|
def log_signature
|
32
|
-
@_log_signature ||= "[#{self.class == Class ?
|
30
|
+
@_log_signature ||= "[#{self.class == Class ? name : self.class.name}]"
|
33
31
|
end
|
34
32
|
|
35
33
|
def sign_message(message)
|
data/lib/protobuf/message.rb
CHANGED
@@ -74,23 +74,28 @@ module Protobuf
|
|
74
74
|
value = @values[field.getter]
|
75
75
|
|
76
76
|
if value.nil?
|
77
|
-
|
77
|
+
fail ::Protobuf::SerializationError, "Required field #{self.class.name}##{field.name} does not have a value."
|
78
78
|
else
|
79
79
|
yield(field, value)
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
-
def
|
85
|
-
@values.
|
84
|
+
def field?(name)
|
85
|
+
@values.key?(name)
|
86
86
|
end
|
87
|
+
::Protobuf.deprecator.define_deprecated_methods(self, :has_field? => :field?)
|
87
88
|
|
88
89
|
def inspect
|
89
|
-
|
90
|
+
attrs = self.class.fields.map do |field|
|
91
|
+
[field.name, send(field.name).inspect].join('=')
|
92
|
+
end.join(' ')
|
93
|
+
|
94
|
+
"#<#{self.class} #{attrs}>"
|
90
95
|
end
|
91
96
|
|
92
97
|
def respond_to_has?(key)
|
93
|
-
respond_to?(key) &&
|
98
|
+
respond_to?(key) && field?(key)
|
94
99
|
end
|
95
100
|
|
96
101
|
def respond_to_has_and_present?(key)
|
@@ -100,7 +105,7 @@ module Protobuf
|
|
100
105
|
|
101
106
|
# Return a hash-representation of the given fields for this message type.
|
102
107
|
def to_hash
|
103
|
-
result =
|
108
|
+
result = {}
|
104
109
|
|
105
110
|
@values.keys.each do |field_name|
|
106
111
|
value = __send__(field_name)
|
@@ -108,7 +113,7 @@ module Protobuf
|
|
108
113
|
result.merge!(field_name => hashed_value)
|
109
114
|
end
|
110
115
|
|
111
|
-
|
116
|
+
result
|
112
117
|
end
|
113
118
|
|
114
119
|
def to_json(options = {})
|
@@ -119,26 +124,26 @@ module Protobuf
|
|
119
124
|
self
|
120
125
|
end
|
121
126
|
|
122
|
-
def ==(
|
123
|
-
return false unless
|
127
|
+
def ==(other)
|
128
|
+
return false unless other.is_a?(self.class)
|
124
129
|
each_field do |field, value|
|
125
|
-
return false unless value ==
|
130
|
+
return false unless value == other.__send__(field.name)
|
126
131
|
end
|
127
132
|
true
|
128
133
|
end
|
129
134
|
|
130
135
|
def [](name)
|
131
|
-
if field = self.class.get_field(name, true)
|
136
|
+
if (field = self.class.get_field(name, true))
|
132
137
|
__send__(field.getter)
|
133
138
|
end
|
134
139
|
end
|
135
140
|
|
136
141
|
def []=(name, value)
|
137
|
-
if field = self.class.get_field(name, true)
|
142
|
+
if (field = self.class.get_field(name, true))
|
138
143
|
__send__(field.setter, value) unless value.nil?
|
139
144
|
else
|
140
145
|
unless ::Protobuf.ignore_unknown_fields?
|
141
|
-
|
146
|
+
fail ::Protobuf::FieldNotDefinedError, name
|
142
147
|
end
|
143
148
|
end
|
144
149
|
end
|
@@ -161,20 +166,21 @@ module Protobuf
|
|
161
166
|
##
|
162
167
|
# Private Instance Methods
|
163
168
|
#
|
169
|
+
|
164
170
|
private
|
165
171
|
|
166
172
|
def copy_to(object, method)
|
167
|
-
duplicate = proc
|
173
|
+
duplicate = proc do |obj|
|
168
174
|
case obj
|
169
175
|
when Message, String then obj.__send__(method)
|
170
176
|
else obj
|
171
177
|
end
|
172
|
-
|
178
|
+
end
|
173
179
|
|
174
180
|
object.__send__(:initialize)
|
175
181
|
@values.each do |name, value|
|
176
182
|
if value.is_a?(::Protobuf::Field::FieldArray)
|
177
|
-
object.__send__(name).replace(value.map {|v| duplicate.call(v)})
|
183
|
+
object.__send__(name).replace(value.map { |v| duplicate.call(v) })
|
178
184
|
else
|
179
185
|
object.__send__("#{name}=", duplicate.call(value))
|
180
186
|
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
require 'protobuf/deprecator'
|
2
|
-
|
3
1
|
module Protobuf
|
4
2
|
class Message
|
5
3
|
module Fields
|
6
4
|
|
7
5
|
def self.extended(other)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
::Protobuf.deprecator.define_deprecated_methods(
|
7
|
+
other.singleton_class,
|
8
|
+
:get_ext_field_by_name => :get_extension_field,
|
9
|
+
:get_ext_field_by_tag => :get_extension_field,
|
10
|
+
:get_field_by_name => :get_field,
|
11
|
+
:get_field_by_tag => :get_field,
|
12
|
+
)
|
13
13
|
end
|
14
14
|
|
15
15
|
##
|
@@ -45,7 +45,7 @@ module Protobuf
|
|
45
45
|
#
|
46
46
|
|
47
47
|
def all_fields
|
48
|
-
@all_fields ||= field_store.values.uniq
|
48
|
+
@all_fields ||= field_store.values.uniq.sort_by(&:tag)
|
49
49
|
end
|
50
50
|
|
51
51
|
def extension_fields
|
@@ -82,7 +82,7 @@ module Protobuf
|
|
82
82
|
name_or_tag = name_or_tag.to_sym if name_or_tag.respond_to?(:to_sym)
|
83
83
|
field = field_store[name_or_tag]
|
84
84
|
|
85
|
-
if field && (allow_extension || !
|
85
|
+
if field && (allow_extension || !field.extension?)
|
86
86
|
field
|
87
87
|
else
|
88
88
|
nil
|
@@ -97,26 +97,23 @@ module Protobuf
|
|
97
97
|
field_store[field_name] = field
|
98
98
|
field_store[tag] = field
|
99
99
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
end
|
104
|
-
RAW_GETTER
|
100
|
+
define_method("#{field_name}!") do
|
101
|
+
@values[field_name]
|
102
|
+
end
|
105
103
|
end
|
106
104
|
|
107
105
|
def raise_if_tag_collision(tag, field_name)
|
108
106
|
if get_field(tag, true)
|
109
|
-
|
107
|
+
fail TagCollisionError, %(Field number #{tag} has already been used in "#{name}" by field "#{field_name}".)
|
110
108
|
end
|
111
109
|
end
|
112
110
|
|
113
111
|
def raise_if_name_collision(field_name)
|
114
112
|
if get_field(field_name, true)
|
115
|
-
|
113
|
+
fail DuplicateFieldNameError, %(Field name #{field_name} has already been used in "#{name}".)
|
116
114
|
end
|
117
115
|
end
|
118
116
|
|
119
117
|
end
|
120
118
|
end
|
121
119
|
end
|
122
|
-
|
@@ -8,12 +8,12 @@ module Protobuf
|
|
8
8
|
|
9
9
|
module ClassMethods
|
10
10
|
def decode(bytes)
|
11
|
-
|
11
|
+
new.decode(bytes)
|
12
12
|
end
|
13
13
|
|
14
14
|
# Create a new object with the given values and return the encoded bytes.
|
15
15
|
def encode(fields = {})
|
16
|
-
|
16
|
+
new(fields).encode
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -44,8 +44,10 @@ module Protobuf
|
|
44
44
|
# Encode this message
|
45
45
|
#
|
46
46
|
def encode
|
47
|
-
stream = ::StringIO.new
|
48
|
-
|
47
|
+
stream = ::StringIO.new
|
48
|
+
stream.set_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
|
49
|
+
encode_to(stream)
|
50
|
+
stream.string
|
49
51
|
end
|
50
52
|
|
51
53
|
# Encode this message to the given stream.
|
@@ -81,4 +83,3 @@ module Protobuf
|
|
81
83
|
end
|
82
84
|
end
|
83
85
|
end
|
84
|
-
|