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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -3
  3. data/.simplecov +1 -0
  4. data/Rakefile +0 -27
  5. data/lib/contrast/agent/assess/policy/propagation_method.rb +0 -2
  6. data/lib/contrast/agent/assess/policy/trigger_method.rb +1 -1
  7. data/lib/contrast/agent/version.rb +1 -1
  8. data/lib/contrast/api/dtm.pb.rb +1 -1
  9. data/lib/contrast/api/settings.pb.rb +1 -1
  10. data/lib/contrast/utils/patching/policy/patch_utils.rb +5 -22
  11. data/lib/contrast.rb +34 -0
  12. data/lib/protobuf/code_generator.rb +129 -0
  13. data/lib/protobuf/decoder.rb +28 -0
  14. data/lib/protobuf/deprecation.rb +117 -0
  15. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +79 -0
  16. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +360 -0
  17. data/lib/protobuf/descriptors.rb +3 -0
  18. data/lib/protobuf/encoder.rb +11 -0
  19. data/lib/protobuf/enum.rb +365 -0
  20. data/lib/protobuf/exceptions.rb +9 -0
  21. data/lib/protobuf/field/base_field.rb +380 -0
  22. data/lib/protobuf/field/base_field_object_definitions.rb +504 -0
  23. data/lib/protobuf/field/bool_field.rb +64 -0
  24. data/lib/protobuf/field/bytes_field.rb +67 -0
  25. data/lib/protobuf/field/double_field.rb +25 -0
  26. data/lib/protobuf/field/enum_field.rb +56 -0
  27. data/lib/protobuf/field/field_array.rb +102 -0
  28. data/lib/protobuf/field/field_hash.rb +122 -0
  29. data/lib/protobuf/field/fixed32_field.rb +25 -0
  30. data/lib/protobuf/field/fixed64_field.rb +28 -0
  31. data/lib/protobuf/field/float_field.rb +43 -0
  32. data/lib/protobuf/field/int32_field.rb +21 -0
  33. data/lib/protobuf/field/int64_field.rb +34 -0
  34. data/lib/protobuf/field/integer_field.rb +23 -0
  35. data/lib/protobuf/field/message_field.rb +51 -0
  36. data/lib/protobuf/field/sfixed32_field.rb +27 -0
  37. data/lib/protobuf/field/sfixed64_field.rb +28 -0
  38. data/lib/protobuf/field/signed_integer_field.rb +29 -0
  39. data/lib/protobuf/field/sint32_field.rb +21 -0
  40. data/lib/protobuf/field/sint64_field.rb +21 -0
  41. data/lib/protobuf/field/string_field.rb +51 -0
  42. data/lib/protobuf/field/uint32_field.rb +21 -0
  43. data/lib/protobuf/field/uint64_field.rb +21 -0
  44. data/lib/protobuf/field/varint_field.rb +77 -0
  45. data/lib/protobuf/field.rb +74 -0
  46. data/lib/protobuf/generators/base.rb +85 -0
  47. data/lib/protobuf/generators/enum_generator.rb +39 -0
  48. data/lib/protobuf/generators/extension_generator.rb +27 -0
  49. data/lib/protobuf/generators/field_generator.rb +193 -0
  50. data/lib/protobuf/generators/file_generator.rb +262 -0
  51. data/lib/protobuf/generators/group_generator.rb +122 -0
  52. data/lib/protobuf/generators/message_generator.rb +104 -0
  53. data/lib/protobuf/generators/option_generator.rb +17 -0
  54. data/lib/protobuf/generators/printable.rb +160 -0
  55. data/lib/protobuf/generators/service_generator.rb +50 -0
  56. data/lib/protobuf/lifecycle.rb +33 -0
  57. data/lib/protobuf/logging.rb +39 -0
  58. data/lib/protobuf/message/fields.rb +233 -0
  59. data/lib/protobuf/message/serialization.rb +85 -0
  60. data/lib/protobuf/message.rb +241 -0
  61. data/lib/protobuf/optionable.rb +72 -0
  62. data/lib/protobuf/tasks/compile.rake +80 -0
  63. data/lib/protobuf/tasks.rb +1 -0
  64. data/lib/protobuf/varint.rb +20 -0
  65. data/lib/protobuf/varint_pure.rb +31 -0
  66. data/lib/protobuf/version.rb +3 -0
  67. data/lib/protobuf/wire_type.rb +10 -0
  68. data/lib/protobuf.rb +91 -0
  69. data/proto/dynamic_discovery.proto +46 -0
  70. data/proto/google/protobuf/compiler/plugin.proto +183 -0
  71. data/proto/google/protobuf/descriptor.proto +911 -0
  72. data/proto/rpc.proto +71 -0
  73. data/ruby-agent.gemspec +1 -1
  74. 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