contrast-agent 6.3.0 → 6.4.0

Sign up to get free protection for your applications and to get access to all the features.
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