contrast-agent 6.3.0 → 6.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 +4 -4
- data/.gitignore +0 -3
- data/.simplecov +1 -0
- data/Rakefile +0 -27
- data/lib/contrast/agent/assess/policy/propagation_method.rb +0 -2
- data/lib/contrast/agent/assess/policy/trigger_method.rb +1 -1
- data/lib/contrast/agent/version.rb +1 -1
- data/lib/contrast/api/dtm.pb.rb +1 -1
- data/lib/contrast/api/settings.pb.rb +1 -1
- data/lib/contrast/utils/patching/policy/patch_utils.rb +5 -22
- data/lib/contrast.rb +34 -0
- data/lib/protobuf/code_generator.rb +129 -0
- data/lib/protobuf/decoder.rb +28 -0
- data/lib/protobuf/deprecation.rb +117 -0
- data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +79 -0
- data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +360 -0
- data/lib/protobuf/descriptors.rb +3 -0
- data/lib/protobuf/encoder.rb +11 -0
- data/lib/protobuf/enum.rb +365 -0
- data/lib/protobuf/exceptions.rb +9 -0
- data/lib/protobuf/field/base_field.rb +380 -0
- data/lib/protobuf/field/base_field_object_definitions.rb +504 -0
- data/lib/protobuf/field/bool_field.rb +64 -0
- data/lib/protobuf/field/bytes_field.rb +67 -0
- data/lib/protobuf/field/double_field.rb +25 -0
- data/lib/protobuf/field/enum_field.rb +56 -0
- data/lib/protobuf/field/field_array.rb +102 -0
- data/lib/protobuf/field/field_hash.rb +122 -0
- data/lib/protobuf/field/fixed32_field.rb +25 -0
- data/lib/protobuf/field/fixed64_field.rb +28 -0
- data/lib/protobuf/field/float_field.rb +43 -0
- data/lib/protobuf/field/int32_field.rb +21 -0
- data/lib/protobuf/field/int64_field.rb +34 -0
- data/lib/protobuf/field/integer_field.rb +23 -0
- data/lib/protobuf/field/message_field.rb +51 -0
- data/lib/protobuf/field/sfixed32_field.rb +27 -0
- data/lib/protobuf/field/sfixed64_field.rb +28 -0
- data/lib/protobuf/field/signed_integer_field.rb +29 -0
- data/lib/protobuf/field/sint32_field.rb +21 -0
- data/lib/protobuf/field/sint64_field.rb +21 -0
- data/lib/protobuf/field/string_field.rb +51 -0
- data/lib/protobuf/field/uint32_field.rb +21 -0
- data/lib/protobuf/field/uint64_field.rb +21 -0
- data/lib/protobuf/field/varint_field.rb +77 -0
- data/lib/protobuf/field.rb +74 -0
- data/lib/protobuf/generators/base.rb +85 -0
- data/lib/protobuf/generators/enum_generator.rb +39 -0
- data/lib/protobuf/generators/extension_generator.rb +27 -0
- data/lib/protobuf/generators/field_generator.rb +193 -0
- data/lib/protobuf/generators/file_generator.rb +262 -0
- data/lib/protobuf/generators/group_generator.rb +122 -0
- data/lib/protobuf/generators/message_generator.rb +104 -0
- data/lib/protobuf/generators/option_generator.rb +17 -0
- data/lib/protobuf/generators/printable.rb +160 -0
- data/lib/protobuf/generators/service_generator.rb +50 -0
- data/lib/protobuf/lifecycle.rb +33 -0
- data/lib/protobuf/logging.rb +39 -0
- data/lib/protobuf/message/fields.rb +233 -0
- data/lib/protobuf/message/serialization.rb +85 -0
- data/lib/protobuf/message.rb +241 -0
- data/lib/protobuf/optionable.rb +72 -0
- data/lib/protobuf/tasks/compile.rake +80 -0
- data/lib/protobuf/tasks.rb +1 -0
- data/lib/protobuf/varint.rb +20 -0
- data/lib/protobuf/varint_pure.rb +31 -0
- data/lib/protobuf/version.rb +3 -0
- data/lib/protobuf/wire_type.rb +10 -0
- data/lib/protobuf.rb +91 -0
- data/proto/dynamic_discovery.proto +46 -0
- data/proto/google/protobuf/compiler/plugin.proto +183 -0
- data/proto/google/protobuf/descriptor.proto +911 -0
- data/proto/rpc.proto +71 -0
- data/ruby-agent.gemspec +1 -1
- metadata +71 -10
@@ -0,0 +1,380 @@
|
|
1
|
+
require 'active_support/core_ext/hash/slice'
|
2
|
+
require 'protobuf/field/field_array'
|
3
|
+
require 'protobuf/field/field_hash'
|
4
|
+
require 'protobuf/field/base_field_object_definitions'
|
5
|
+
|
6
|
+
module Protobuf
|
7
|
+
module Field
|
8
|
+
class BaseField
|
9
|
+
include ::Protobuf::Logging
|
10
|
+
::Protobuf::Optionable.inject(self, false) { ::CSGoogle::Protobuf::FieldOptions }
|
11
|
+
|
12
|
+
##
|
13
|
+
# Constants
|
14
|
+
#
|
15
|
+
OBJECT_MODULE = ::Protobuf::Field::BaseFieldObjectDefinitions
|
16
|
+
PACKED_TYPES = [
|
17
|
+
::Protobuf::WireType::VARINT,
|
18
|
+
::Protobuf::WireType::FIXED32,
|
19
|
+
::Protobuf::WireType::FIXED64,
|
20
|
+
].freeze
|
21
|
+
|
22
|
+
##
|
23
|
+
# Attributes
|
24
|
+
#
|
25
|
+
attr_reader :default_value, :message_class, :name, :fully_qualified_name, :options, :rule, :tag, :type_class
|
26
|
+
|
27
|
+
##
|
28
|
+
# Class Methods
|
29
|
+
#
|
30
|
+
|
31
|
+
def self.default
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Constructor
|
37
|
+
#
|
38
|
+
|
39
|
+
def initialize(message_class, rule, type_class, fully_qualified_name, tag, simple_name, options)
|
40
|
+
@message_class = message_class
|
41
|
+
@name = simple_name || fully_qualified_name
|
42
|
+
@fully_qualified_name = fully_qualified_name
|
43
|
+
@rule = rule
|
44
|
+
@tag = tag
|
45
|
+
@type_class = type_class
|
46
|
+
# Populate the option hash with all the original default field options, for backwards compatibility.
|
47
|
+
# However, both default and custom options should ideally be accessed through the Optionable .{get,get!}_option functions.
|
48
|
+
@options = options.slice(:ctype, :packed, :deprecated, :lazy, :jstype, :weak, :uninterpreted_option, :default, :extension)
|
49
|
+
options.each do |option_name, value|
|
50
|
+
set_option(option_name, value)
|
51
|
+
end
|
52
|
+
|
53
|
+
@extension = options.key?(:extension)
|
54
|
+
@deprecated = options.key?(:deprecated)
|
55
|
+
@required = rule == :required
|
56
|
+
@repeated = rule == :repeated
|
57
|
+
@optional = rule == :optional
|
58
|
+
@packed = @repeated && options.key?(:packed)
|
59
|
+
|
60
|
+
validate_packed_field if packed?
|
61
|
+
define_accessor(simple_name, fully_qualified_name) if simple_name
|
62
|
+
set_repeated_message!
|
63
|
+
set_map!
|
64
|
+
@value_from_values = nil
|
65
|
+
@value_from_values_for_serialization = nil
|
66
|
+
@field_predicate = nil
|
67
|
+
@field_and_present_predicate = nil
|
68
|
+
@set_field = nil
|
69
|
+
@set_method = nil
|
70
|
+
@to_message_hash = nil
|
71
|
+
@to_message_hash_string_keys = nil
|
72
|
+
@encode_to_stream = nil
|
73
|
+
|
74
|
+
define_value_from_values!
|
75
|
+
define_value_from_values_for_serialization!
|
76
|
+
define_field_predicate!
|
77
|
+
define_field_and_present_predicate!
|
78
|
+
define_set_field!
|
79
|
+
define_set_method!
|
80
|
+
define_to_message_hash!
|
81
|
+
define_encode_to_stream!
|
82
|
+
set_default_value!
|
83
|
+
end
|
84
|
+
|
85
|
+
##
|
86
|
+
# Public Instance Methods
|
87
|
+
#
|
88
|
+
|
89
|
+
def acceptable?(_value)
|
90
|
+
true
|
91
|
+
end
|
92
|
+
|
93
|
+
def coerce!(value)
|
94
|
+
value
|
95
|
+
end
|
96
|
+
|
97
|
+
def decode(_bytes)
|
98
|
+
fail NotImplementedError, "#{self.class.name}##{__method__}"
|
99
|
+
end
|
100
|
+
|
101
|
+
def default
|
102
|
+
options[:default]
|
103
|
+
end
|
104
|
+
|
105
|
+
def set_default_value!
|
106
|
+
@default_value ||= if optional? || required?
|
107
|
+
typed_default_value
|
108
|
+
elsif map?
|
109
|
+
::Protobuf::Field::FieldHash.new(self).freeze
|
110
|
+
elsif repeated?
|
111
|
+
::Protobuf::Field::FieldArray.new(self).freeze
|
112
|
+
else
|
113
|
+
fail "Unknown field label -- something went very wrong"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def define_encode_to_stream!
|
118
|
+
@encode_to_stream = if repeated? && packed?
|
119
|
+
OBJECT_MODULE::RepeatedPackedEncodeToStream.new(self)
|
120
|
+
elsif repeated?
|
121
|
+
OBJECT_MODULE::RepeatedNotPackedEncodeToStream.new(self)
|
122
|
+
elsif message? || type_class == ::Protobuf::Field::BytesField
|
123
|
+
OBJECT_MODULE::BytesEncodeToStream.new(self)
|
124
|
+
elsif type_class == ::Protobuf::Field::StringField
|
125
|
+
OBJECT_MODULE::StringEncodeToStream.new(self)
|
126
|
+
else
|
127
|
+
OBJECT_MODULE::BaseEncodeToStream.new(self)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def encode_to_stream(value, stream)
|
132
|
+
@encode_to_stream.call(value, stream)
|
133
|
+
end
|
134
|
+
|
135
|
+
def define_field_predicate!
|
136
|
+
@field_predicate = if repeated?
|
137
|
+
OBJECT_MODULE::RepeatedFieldPredicate.new(self)
|
138
|
+
else
|
139
|
+
OBJECT_MODULE::BaseFieldPredicate.new(self)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def field?(values)
|
144
|
+
@field_predicate.call(values)
|
145
|
+
end
|
146
|
+
|
147
|
+
def define_field_and_present_predicate!
|
148
|
+
@field_and_present_predicate = if !repeated? && type_class == ::Protobuf::Field::BoolField # boolean present check
|
149
|
+
OBJECT_MODULE::BoolFieldAndPresentPredicate.new(self)
|
150
|
+
else
|
151
|
+
OBJECT_MODULE::BaseFieldAndPresentPredicate.new(self)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def field_and_present?(values)
|
156
|
+
@field_and_present_predicate.call(values)
|
157
|
+
end
|
158
|
+
|
159
|
+
def define_value_from_values!
|
160
|
+
@value_from_values = if map?
|
161
|
+
OBJECT_MODULE::MapValueFromValues.new(self)
|
162
|
+
elsif repeated?
|
163
|
+
OBJECT_MODULE::RepeatedFieldValueFromValues.new(self)
|
164
|
+
elsif type_class == ::Protobuf::Field::BoolField # boolean present check
|
165
|
+
OBJECT_MODULE::BoolFieldValueFromValues.new(self)
|
166
|
+
else
|
167
|
+
OBJECT_MODULE::BaseFieldValueFromValues.new(self)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def value_from_values(values)
|
172
|
+
@value_from_values.call(values)
|
173
|
+
end
|
174
|
+
|
175
|
+
def define_value_from_values_for_serialization!
|
176
|
+
@value_from_values_for_serialization = if map?
|
177
|
+
OBJECT_MODULE::MapValueFromValuesForSerialization.new(self)
|
178
|
+
elsif repeated?
|
179
|
+
OBJECT_MODULE::RepeatedFieldValueFromValuesForSerialization.new(self)
|
180
|
+
elsif type_class == ::Protobuf::Field::BoolField # boolean present check
|
181
|
+
OBJECT_MODULE::BoolFieldValueFromValuesForSerialization.new(self)
|
182
|
+
else
|
183
|
+
OBJECT_MODULE::BaseFieldValueFromValuesForSerialization.new(self)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def value_from_values_for_serialization(values)
|
188
|
+
@value_from_values_for_serialization.call(values)
|
189
|
+
end
|
190
|
+
|
191
|
+
def define_set_field!
|
192
|
+
@set_field = if map? && required?
|
193
|
+
OBJECT_MODULE::RequiredMapSetField.new(self)
|
194
|
+
elsif repeated? && required?
|
195
|
+
OBJECT_MODULE::RequiredRepeatedSetField.new(self)
|
196
|
+
elsif type_class == ::Protobuf::Field::StringField && required?
|
197
|
+
OBJECT_MODULE::RequiredStringSetField.new(self)
|
198
|
+
elsif required?
|
199
|
+
OBJECT_MODULE::RequiredBaseSetField.new(self)
|
200
|
+
elsif map?
|
201
|
+
OBJECT_MODULE::MapSetField.new(self)
|
202
|
+
elsif repeated?
|
203
|
+
OBJECT_MODULE::RepeatedSetField.new(self)
|
204
|
+
elsif type_class == ::Protobuf::Field::StringField
|
205
|
+
OBJECT_MODULE::StringSetField.new(self)
|
206
|
+
else
|
207
|
+
OBJECT_MODULE::BaseSetField.new(self)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def set_field(values, value, ignore_nil_for_repeated, message_instance)
|
212
|
+
@set_field.call(values, value, ignore_nil_for_repeated, message_instance)
|
213
|
+
end
|
214
|
+
|
215
|
+
def define_to_message_hash!
|
216
|
+
if message? || enum? || repeated? || map?
|
217
|
+
@to_message_hash = OBJECT_MODULE::ToHashValueToMessageHash.new(self)
|
218
|
+
@to_message_hash_string_keys = OBJECT_MODULE::ToHashValueToMessageHashWithStringKey.new(self)
|
219
|
+
else
|
220
|
+
@to_message_hash = OBJECT_MODULE::BaseToMessageHash.new(self)
|
221
|
+
@to_message_hash_string_keys = OBJECT_MODULE::BaseToMessageHashWithStringKey.new(self)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def to_message_hash(values, result)
|
226
|
+
@to_message_hash.call(values, result)
|
227
|
+
end
|
228
|
+
|
229
|
+
def to_message_hash_with_string_key(values, result)
|
230
|
+
@to_message_hash_string_keys.call(values, result)
|
231
|
+
end
|
232
|
+
|
233
|
+
def deprecated?
|
234
|
+
@deprecated
|
235
|
+
end
|
236
|
+
|
237
|
+
def encode(_value)
|
238
|
+
fail NotImplementedError, "#{self.class.name}##{__method__}"
|
239
|
+
end
|
240
|
+
|
241
|
+
def extension?
|
242
|
+
@extension
|
243
|
+
end
|
244
|
+
|
245
|
+
def enum?
|
246
|
+
false
|
247
|
+
end
|
248
|
+
|
249
|
+
def message?
|
250
|
+
false
|
251
|
+
end
|
252
|
+
|
253
|
+
def set_map!
|
254
|
+
set_repeated_message!
|
255
|
+
@is_map = repeated_message? && type_class.get_option!(:map_entry)
|
256
|
+
end
|
257
|
+
|
258
|
+
def map?
|
259
|
+
@is_map
|
260
|
+
end
|
261
|
+
|
262
|
+
def optional?
|
263
|
+
@optional
|
264
|
+
end
|
265
|
+
|
266
|
+
def packed?
|
267
|
+
@packed
|
268
|
+
end
|
269
|
+
|
270
|
+
def repeated?
|
271
|
+
@repeated
|
272
|
+
end
|
273
|
+
|
274
|
+
def set_repeated_message!
|
275
|
+
@repeated_message = repeated? && message?
|
276
|
+
end
|
277
|
+
|
278
|
+
def repeated_message?
|
279
|
+
@repeated_message
|
280
|
+
end
|
281
|
+
|
282
|
+
def required?
|
283
|
+
@required
|
284
|
+
end
|
285
|
+
|
286
|
+
def define_set_method!
|
287
|
+
@set_method = if map?
|
288
|
+
OBJECT_MODULE::MapSetMethod.new(self)
|
289
|
+
elsif repeated? && packed?
|
290
|
+
OBJECT_MODULE::RepeatedPackedSetMethod.new(self)
|
291
|
+
elsif repeated?
|
292
|
+
OBJECT_MODULE::RepeatedNotPackedSetMethod.new(self)
|
293
|
+
else
|
294
|
+
OBJECT_MODULE::BaseSetMethod.new(self)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
def set(message_instance, bytes)
|
299
|
+
@set_method.call(message_instance, bytes)
|
300
|
+
end
|
301
|
+
|
302
|
+
def tag_encoded
|
303
|
+
@tag_encoded ||= begin
|
304
|
+
case
|
305
|
+
when repeated? && packed?
|
306
|
+
::Protobuf::Field::VarintField.encode((tag << 3) | ::Protobuf::WireType::LENGTH_DELIMITED)
|
307
|
+
else
|
308
|
+
::Protobuf::Field::VarintField.encode((tag << 3) | wire_type)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
# FIXME: add packed, deprecated, extension options to to_s output
|
314
|
+
def to_s
|
315
|
+
"#{rule} #{type_class} #{name} = #{tag} #{default ? "[default=#{default.inspect}]" : ''}"
|
316
|
+
end
|
317
|
+
|
318
|
+
::Protobuf.deprecator.define_deprecated_methods(self, :type => :type_class)
|
319
|
+
|
320
|
+
def wire_type
|
321
|
+
::Protobuf::WireType::VARINT
|
322
|
+
end
|
323
|
+
|
324
|
+
def fully_qualified_name_only!
|
325
|
+
@name = @fully_qualified_name
|
326
|
+
|
327
|
+
##
|
328
|
+
# Recreate all of the meta methods as they may have used the original `name` value
|
329
|
+
#
|
330
|
+
define_value_from_values!
|
331
|
+
define_value_from_values_for_serialization!
|
332
|
+
define_field_predicate!
|
333
|
+
define_field_and_present_predicate!
|
334
|
+
define_set_field!
|
335
|
+
define_set_method!
|
336
|
+
define_to_message_hash!
|
337
|
+
define_encode_to_stream!
|
338
|
+
end
|
339
|
+
|
340
|
+
private
|
341
|
+
|
342
|
+
##
|
343
|
+
# Private Instance Methods
|
344
|
+
#
|
345
|
+
|
346
|
+
def define_accessor(simple_field_name, fully_qualified_field_name)
|
347
|
+
message_class.class_eval do
|
348
|
+
define_method("#{simple_field_name}!") do
|
349
|
+
@values[fully_qualified_field_name] if field?(fully_qualified_field_name)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
message_class.class_eval do
|
354
|
+
define_method(simple_field_name) { self[fully_qualified_field_name] }
|
355
|
+
define_method("#{simple_field_name}=") { |v| set_field(fully_qualified_field_name, v, false) }
|
356
|
+
end
|
357
|
+
|
358
|
+
return unless deprecated?
|
359
|
+
|
360
|
+
::Protobuf.field_deprecator.deprecate_method(message_class, simple_field_name)
|
361
|
+
::Protobuf.field_deprecator.deprecate_method(message_class, "#{simple_field_name}!")
|
362
|
+
::Protobuf.field_deprecator.deprecate_method(message_class, "#{simple_field_name}=")
|
363
|
+
end
|
364
|
+
|
365
|
+
def typed_default_value
|
366
|
+
if default.nil?
|
367
|
+
self.class.default
|
368
|
+
else
|
369
|
+
default
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def validate_packed_field
|
374
|
+
if packed? && ! ::Protobuf::Field::BaseField::PACKED_TYPES.include?(wire_type)
|
375
|
+
fail "Can't use packed encoding for '#{type_class}' type"
|
376
|
+
end
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
end
|