deimos-ruby 2.0.4 → 2.0.5
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/CHANGELOG.md +4 -0
- data/lib/deimos/schema_backends/avro_schema_coercer.rb +39 -1
- data/lib/deimos/version.rb +1 -1
- data/lib/generators/deimos/schema_class/templates/schema_record.rb.tt +18 -0
- data/lib/generators/deimos/schema_class_generator.rb +17 -2
- data/spec/active_record_producer_spec.rb +111 -5
- data/spec/schemas/com/my-namespace/MySchemaWithUnionType.avsc +91 -0
- data/spec/schemas/my_namespace/my_schema_with_union_type.rb +185 -0
- data/spec/snapshots/consumers-no-nest.snap +232 -0
- data/spec/snapshots/consumers.snap +202 -0
- data/spec/snapshots/consumers_and_producers-no-nest.snap +232 -0
- data/spec/snapshots/consumers_and_producers.snap +202 -0
- data/spec/snapshots/consumers_circular-no-nest.snap +232 -0
- data/spec/snapshots/consumers_circular.snap +202 -0
- data/spec/snapshots/consumers_complex_types-no-nest.snap +232 -0
- data/spec/snapshots/consumers_complex_types.snap +202 -0
- data/spec/snapshots/consumers_nested-no-nest.snap +232 -0
- data/spec/snapshots/consumers_nested.snap +202 -0
- data/spec/snapshots/namespace_folders.snap +202 -0
- data/spec/snapshots/namespace_map.snap +202 -0
- data/spec/snapshots/producers_with_key-no-nest.snap +232 -0
- data/spec/snapshots/producers_with_key.snap +202 -0
- data/spec/spec_helper.rb +25 -0
- metadata +6 -2
@@ -1059,6 +1059,208 @@ module Schemas
|
|
1059
1059
|
end
|
1060
1060
|
|
1061
1061
|
|
1062
|
+
spec/app/lib/schema_classes/my_schema_with_union_type.rb:
|
1063
|
+
# frozen_string_literal: true
|
1064
|
+
|
1065
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
1066
|
+
module Schemas
|
1067
|
+
### Primary Schema Class ###
|
1068
|
+
# Autogenerated Schema for Record at com.my-namespace.MySchemaWithUnionType
|
1069
|
+
class MySchemaWithUnionType < Deimos::SchemaClass::Record
|
1070
|
+
|
1071
|
+
### Secondary Schema Classes ###
|
1072
|
+
# Autogenerated Schema for Record at com.flipp.content.Record1
|
1073
|
+
class Record1 < Deimos::SchemaClass::Record
|
1074
|
+
|
1075
|
+
### Attribute Accessors ###
|
1076
|
+
# @return [Hash<String, Integer>]
|
1077
|
+
attr_accessor :record1_map
|
1078
|
+
# @return [Integer]
|
1079
|
+
attr_accessor :record1_id
|
1080
|
+
|
1081
|
+
# @override
|
1082
|
+
def initialize(record1_map: {},
|
1083
|
+
record1_id: 0)
|
1084
|
+
super
|
1085
|
+
self.record1_map = record1_map
|
1086
|
+
self.record1_id = record1_id
|
1087
|
+
end
|
1088
|
+
|
1089
|
+
# @override
|
1090
|
+
def schema
|
1091
|
+
'Record1'
|
1092
|
+
end
|
1093
|
+
|
1094
|
+
# @override
|
1095
|
+
def namespace
|
1096
|
+
'com.flipp.content'
|
1097
|
+
end
|
1098
|
+
|
1099
|
+
# @override
|
1100
|
+
def as_json(_opts={})
|
1101
|
+
{
|
1102
|
+
'record1_map' => @record1_map,
|
1103
|
+
'record1_id' => @record1_id
|
1104
|
+
}
|
1105
|
+
end
|
1106
|
+
end
|
1107
|
+
|
1108
|
+
# Autogenerated Schema for Record at com.flipp.content.Record2
|
1109
|
+
class Record2 < Deimos::SchemaClass::Record
|
1110
|
+
|
1111
|
+
### Attribute Accessors ###
|
1112
|
+
# @return [String]
|
1113
|
+
attr_accessor :record2_id
|
1114
|
+
|
1115
|
+
# @override
|
1116
|
+
def initialize(record2_id: "")
|
1117
|
+
super
|
1118
|
+
self.record2_id = record2_id
|
1119
|
+
end
|
1120
|
+
|
1121
|
+
# @override
|
1122
|
+
def schema
|
1123
|
+
'Record2'
|
1124
|
+
end
|
1125
|
+
|
1126
|
+
# @override
|
1127
|
+
def namespace
|
1128
|
+
'com.flipp.content'
|
1129
|
+
end
|
1130
|
+
|
1131
|
+
# @override
|
1132
|
+
def as_json(_opts={})
|
1133
|
+
{
|
1134
|
+
'record2_id' => @record2_id
|
1135
|
+
}
|
1136
|
+
end
|
1137
|
+
end
|
1138
|
+
|
1139
|
+
# Autogenerated Schema for Record at com.flipp.content.Record3
|
1140
|
+
class Record3 < Deimos::SchemaClass::Record
|
1141
|
+
|
1142
|
+
### Attribute Accessors ###
|
1143
|
+
# @return [Float]
|
1144
|
+
attr_accessor :record3_id
|
1145
|
+
|
1146
|
+
# @override
|
1147
|
+
def initialize(record3_id: 0.0)
|
1148
|
+
super
|
1149
|
+
self.record3_id = record3_id
|
1150
|
+
end
|
1151
|
+
|
1152
|
+
# @override
|
1153
|
+
def schema
|
1154
|
+
'Record3'
|
1155
|
+
end
|
1156
|
+
|
1157
|
+
# @override
|
1158
|
+
def namespace
|
1159
|
+
'com.flipp.content'
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
# @override
|
1163
|
+
def as_json(_opts={})
|
1164
|
+
{
|
1165
|
+
'record3_id' => @record3_id
|
1166
|
+
}
|
1167
|
+
end
|
1168
|
+
end
|
1169
|
+
|
1170
|
+
# Autogenerated Schema for Record at com.flipp.content.Record4
|
1171
|
+
class Record4 < Deimos::SchemaClass::Record
|
1172
|
+
|
1173
|
+
### Attribute Accessors ###
|
1174
|
+
# @return [Integer]
|
1175
|
+
attr_accessor :record4_id
|
1176
|
+
|
1177
|
+
# @override
|
1178
|
+
def initialize(record4_id: 0)
|
1179
|
+
super
|
1180
|
+
self.record4_id = record4_id
|
1181
|
+
end
|
1182
|
+
|
1183
|
+
# @override
|
1184
|
+
def schema
|
1185
|
+
'Record4'
|
1186
|
+
end
|
1187
|
+
|
1188
|
+
# @override
|
1189
|
+
def namespace
|
1190
|
+
'com.flipp.content'
|
1191
|
+
end
|
1192
|
+
|
1193
|
+
# @override
|
1194
|
+
def as_json(_opts={})
|
1195
|
+
{
|
1196
|
+
'record4_id' => @record4_id
|
1197
|
+
}
|
1198
|
+
end
|
1199
|
+
end
|
1200
|
+
|
1201
|
+
|
1202
|
+
### Attribute Readers ###
|
1203
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
1204
|
+
attr_reader :test_union_type
|
1205
|
+
|
1206
|
+
### Attribute Accessors ###
|
1207
|
+
# @return [String]
|
1208
|
+
attr_accessor :test_id
|
1209
|
+
# @return [nil, Integer]
|
1210
|
+
attr_accessor :test_long
|
1211
|
+
|
1212
|
+
### Attribute Writers ###
|
1213
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
1214
|
+
def test_union_type=(value)
|
1215
|
+
@test_union_type = initialize_test_union_type_type(value)
|
1216
|
+
end
|
1217
|
+
|
1218
|
+
# Helper method to determine which schema type to use for test_union_type
|
1219
|
+
# @param value [Hash, nil]
|
1220
|
+
# @return [Object, nil]
|
1221
|
+
def initialize_test_union_type_type(value)
|
1222
|
+
return nil if value.nil?
|
1223
|
+
|
1224
|
+
klass = [Record1, Record2, Record3, Record4].find do |candidate|
|
1225
|
+
fields = candidate.new.as_json.keys
|
1226
|
+
(value.keys - fields).empty?
|
1227
|
+
end
|
1228
|
+
|
1229
|
+
klass.initialize_from_value(value)
|
1230
|
+
end
|
1231
|
+
|
1232
|
+
# @override
|
1233
|
+
def initialize(test_id: "",
|
1234
|
+
test_long: nil,
|
1235
|
+
test_union_type: nil)
|
1236
|
+
super
|
1237
|
+
self.test_id = test_id
|
1238
|
+
self.test_long = test_long
|
1239
|
+
self.test_union_type = test_union_type
|
1240
|
+
end
|
1241
|
+
|
1242
|
+
# @override
|
1243
|
+
def schema
|
1244
|
+
'MySchemaWithUnionType'
|
1245
|
+
end
|
1246
|
+
|
1247
|
+
# @override
|
1248
|
+
def namespace
|
1249
|
+
'com.my-namespace'
|
1250
|
+
end
|
1251
|
+
|
1252
|
+
# @override
|
1253
|
+
def as_json(_opts={})
|
1254
|
+
{
|
1255
|
+
'test_id' => @test_id,
|
1256
|
+
'test_long' => @test_long,
|
1257
|
+
'test_union_type' => @test_union_type&.as_json
|
1258
|
+
}
|
1259
|
+
end
|
1260
|
+
end
|
1261
|
+
end
|
1262
|
+
|
1263
|
+
|
1062
1264
|
spec/app/lib/schema_classes/my_schema_with_unique_id.rb:
|
1063
1265
|
# frozen_string_literal: true
|
1064
1266
|
|
@@ -964,6 +964,208 @@ module Schemas; module Com; module MyNamespace
|
|
964
964
|
end; end; end
|
965
965
|
|
966
966
|
|
967
|
+
spec/app/lib/schema_classes/schemas/com/my_namespace/my_schema_with_union_type.rb:
|
968
|
+
# frozen_string_literal: true
|
969
|
+
|
970
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
971
|
+
module Schemas; module Com; module MyNamespace
|
972
|
+
### Primary Schema Class ###
|
973
|
+
# Autogenerated Schema for Record at com.my-namespace.MySchemaWithUnionType
|
974
|
+
class MySchemaWithUnionType < Deimos::SchemaClass::Record
|
975
|
+
|
976
|
+
### Secondary Schema Classes ###
|
977
|
+
# Autogenerated Schema for Record at com.flipp.content.Record1
|
978
|
+
class Record1 < Deimos::SchemaClass::Record
|
979
|
+
|
980
|
+
### Attribute Accessors ###
|
981
|
+
# @return [Hash<String, Integer>]
|
982
|
+
attr_accessor :record1_map
|
983
|
+
# @return [Integer]
|
984
|
+
attr_accessor :record1_id
|
985
|
+
|
986
|
+
# @override
|
987
|
+
def initialize(record1_map: {},
|
988
|
+
record1_id: 0)
|
989
|
+
super
|
990
|
+
self.record1_map = record1_map
|
991
|
+
self.record1_id = record1_id
|
992
|
+
end
|
993
|
+
|
994
|
+
# @override
|
995
|
+
def schema
|
996
|
+
'Record1'
|
997
|
+
end
|
998
|
+
|
999
|
+
# @override
|
1000
|
+
def namespace
|
1001
|
+
'com.flipp.content'
|
1002
|
+
end
|
1003
|
+
|
1004
|
+
# @override
|
1005
|
+
def as_json(_opts={})
|
1006
|
+
{
|
1007
|
+
'record1_map' => @record1_map,
|
1008
|
+
'record1_id' => @record1_id
|
1009
|
+
}
|
1010
|
+
end
|
1011
|
+
end
|
1012
|
+
|
1013
|
+
# Autogenerated Schema for Record at com.flipp.content.Record2
|
1014
|
+
class Record2 < Deimos::SchemaClass::Record
|
1015
|
+
|
1016
|
+
### Attribute Accessors ###
|
1017
|
+
# @return [String]
|
1018
|
+
attr_accessor :record2_id
|
1019
|
+
|
1020
|
+
# @override
|
1021
|
+
def initialize(record2_id: "")
|
1022
|
+
super
|
1023
|
+
self.record2_id = record2_id
|
1024
|
+
end
|
1025
|
+
|
1026
|
+
# @override
|
1027
|
+
def schema
|
1028
|
+
'Record2'
|
1029
|
+
end
|
1030
|
+
|
1031
|
+
# @override
|
1032
|
+
def namespace
|
1033
|
+
'com.flipp.content'
|
1034
|
+
end
|
1035
|
+
|
1036
|
+
# @override
|
1037
|
+
def as_json(_opts={})
|
1038
|
+
{
|
1039
|
+
'record2_id' => @record2_id
|
1040
|
+
}
|
1041
|
+
end
|
1042
|
+
end
|
1043
|
+
|
1044
|
+
# Autogenerated Schema for Record at com.flipp.content.Record3
|
1045
|
+
class Record3 < Deimos::SchemaClass::Record
|
1046
|
+
|
1047
|
+
### Attribute Accessors ###
|
1048
|
+
# @return [Float]
|
1049
|
+
attr_accessor :record3_id
|
1050
|
+
|
1051
|
+
# @override
|
1052
|
+
def initialize(record3_id: 0.0)
|
1053
|
+
super
|
1054
|
+
self.record3_id = record3_id
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
# @override
|
1058
|
+
def schema
|
1059
|
+
'Record3'
|
1060
|
+
end
|
1061
|
+
|
1062
|
+
# @override
|
1063
|
+
def namespace
|
1064
|
+
'com.flipp.content'
|
1065
|
+
end
|
1066
|
+
|
1067
|
+
# @override
|
1068
|
+
def as_json(_opts={})
|
1069
|
+
{
|
1070
|
+
'record3_id' => @record3_id
|
1071
|
+
}
|
1072
|
+
end
|
1073
|
+
end
|
1074
|
+
|
1075
|
+
# Autogenerated Schema for Record at com.flipp.content.Record4
|
1076
|
+
class Record4 < Deimos::SchemaClass::Record
|
1077
|
+
|
1078
|
+
### Attribute Accessors ###
|
1079
|
+
# @return [Integer]
|
1080
|
+
attr_accessor :record4_id
|
1081
|
+
|
1082
|
+
# @override
|
1083
|
+
def initialize(record4_id: 0)
|
1084
|
+
super
|
1085
|
+
self.record4_id = record4_id
|
1086
|
+
end
|
1087
|
+
|
1088
|
+
# @override
|
1089
|
+
def schema
|
1090
|
+
'Record4'
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
# @override
|
1094
|
+
def namespace
|
1095
|
+
'com.flipp.content'
|
1096
|
+
end
|
1097
|
+
|
1098
|
+
# @override
|
1099
|
+
def as_json(_opts={})
|
1100
|
+
{
|
1101
|
+
'record4_id' => @record4_id
|
1102
|
+
}
|
1103
|
+
end
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
|
1107
|
+
### Attribute Readers ###
|
1108
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
1109
|
+
attr_reader :test_union_type
|
1110
|
+
|
1111
|
+
### Attribute Accessors ###
|
1112
|
+
# @return [String]
|
1113
|
+
attr_accessor :test_id
|
1114
|
+
# @return [nil, Integer]
|
1115
|
+
attr_accessor :test_long
|
1116
|
+
|
1117
|
+
### Attribute Writers ###
|
1118
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
1119
|
+
def test_union_type=(value)
|
1120
|
+
@test_union_type = initialize_test_union_type_type(value)
|
1121
|
+
end
|
1122
|
+
|
1123
|
+
# Helper method to determine which schema type to use for test_union_type
|
1124
|
+
# @param value [Hash, nil]
|
1125
|
+
# @return [Object, nil]
|
1126
|
+
def initialize_test_union_type_type(value)
|
1127
|
+
return nil if value.nil?
|
1128
|
+
|
1129
|
+
klass = [Record1, Record2, Record3, Record4].find do |candidate|
|
1130
|
+
fields = candidate.new.as_json.keys
|
1131
|
+
(value.keys - fields).empty?
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
klass.initialize_from_value(value)
|
1135
|
+
end
|
1136
|
+
|
1137
|
+
# @override
|
1138
|
+
def initialize(test_id: "",
|
1139
|
+
test_long: nil,
|
1140
|
+
test_union_type: nil)
|
1141
|
+
super
|
1142
|
+
self.test_id = test_id
|
1143
|
+
self.test_long = test_long
|
1144
|
+
self.test_union_type = test_union_type
|
1145
|
+
end
|
1146
|
+
|
1147
|
+
# @override
|
1148
|
+
def schema
|
1149
|
+
'MySchemaWithUnionType'
|
1150
|
+
end
|
1151
|
+
|
1152
|
+
# @override
|
1153
|
+
def namespace
|
1154
|
+
'com.my-namespace'
|
1155
|
+
end
|
1156
|
+
|
1157
|
+
# @override
|
1158
|
+
def as_json(_opts={})
|
1159
|
+
{
|
1160
|
+
'test_id' => @test_id,
|
1161
|
+
'test_long' => @test_long,
|
1162
|
+
'test_union_type' => @test_union_type&.as_json
|
1163
|
+
}
|
1164
|
+
end
|
1165
|
+
end
|
1166
|
+
end; end; end
|
1167
|
+
|
1168
|
+
|
967
1169
|
spec/app/lib/schema_classes/schemas/com/my_namespace/my_schema_with_unique_id.rb:
|
968
1170
|
# frozen_string_literal: true
|
969
1171
|
|
@@ -1008,6 +1008,208 @@ module Schemas; module MyNamespace
|
|
1008
1008
|
end; end
|
1009
1009
|
|
1010
1010
|
|
1011
|
+
spec/app/lib/schema_classes/schemas/my_namespace/my_schema_with_union_type.rb:
|
1012
|
+
# frozen_string_literal: true
|
1013
|
+
|
1014
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
1015
|
+
module Schemas; module MyNamespace
|
1016
|
+
### Primary Schema Class ###
|
1017
|
+
# Autogenerated Schema for Record at com.my-namespace.MySchemaWithUnionType
|
1018
|
+
class MySchemaWithUnionType < Deimos::SchemaClass::Record
|
1019
|
+
|
1020
|
+
### Secondary Schema Classes ###
|
1021
|
+
# Autogenerated Schema for Record at com.flipp.content.Record1
|
1022
|
+
class Record1 < Deimos::SchemaClass::Record
|
1023
|
+
|
1024
|
+
### Attribute Accessors ###
|
1025
|
+
# @return [Hash<String, Integer>]
|
1026
|
+
attr_accessor :record1_map
|
1027
|
+
# @return [Integer]
|
1028
|
+
attr_accessor :record1_id
|
1029
|
+
|
1030
|
+
# @override
|
1031
|
+
def initialize(record1_map: {},
|
1032
|
+
record1_id: 0)
|
1033
|
+
super
|
1034
|
+
self.record1_map = record1_map
|
1035
|
+
self.record1_id = record1_id
|
1036
|
+
end
|
1037
|
+
|
1038
|
+
# @override
|
1039
|
+
def schema
|
1040
|
+
'Record1'
|
1041
|
+
end
|
1042
|
+
|
1043
|
+
# @override
|
1044
|
+
def namespace
|
1045
|
+
'com.flipp.content'
|
1046
|
+
end
|
1047
|
+
|
1048
|
+
# @override
|
1049
|
+
def as_json(_opts={})
|
1050
|
+
{
|
1051
|
+
'record1_map' => @record1_map,
|
1052
|
+
'record1_id' => @record1_id
|
1053
|
+
}
|
1054
|
+
end
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
# Autogenerated Schema for Record at com.flipp.content.Record2
|
1058
|
+
class Record2 < Deimos::SchemaClass::Record
|
1059
|
+
|
1060
|
+
### Attribute Accessors ###
|
1061
|
+
# @return [String]
|
1062
|
+
attr_accessor :record2_id
|
1063
|
+
|
1064
|
+
# @override
|
1065
|
+
def initialize(record2_id: "")
|
1066
|
+
super
|
1067
|
+
self.record2_id = record2_id
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
# @override
|
1071
|
+
def schema
|
1072
|
+
'Record2'
|
1073
|
+
end
|
1074
|
+
|
1075
|
+
# @override
|
1076
|
+
def namespace
|
1077
|
+
'com.flipp.content'
|
1078
|
+
end
|
1079
|
+
|
1080
|
+
# @override
|
1081
|
+
def as_json(_opts={})
|
1082
|
+
{
|
1083
|
+
'record2_id' => @record2_id
|
1084
|
+
}
|
1085
|
+
end
|
1086
|
+
end
|
1087
|
+
|
1088
|
+
# Autogenerated Schema for Record at com.flipp.content.Record3
|
1089
|
+
class Record3 < Deimos::SchemaClass::Record
|
1090
|
+
|
1091
|
+
### Attribute Accessors ###
|
1092
|
+
# @return [Float]
|
1093
|
+
attr_accessor :record3_id
|
1094
|
+
|
1095
|
+
# @override
|
1096
|
+
def initialize(record3_id: 0.0)
|
1097
|
+
super
|
1098
|
+
self.record3_id = record3_id
|
1099
|
+
end
|
1100
|
+
|
1101
|
+
# @override
|
1102
|
+
def schema
|
1103
|
+
'Record3'
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
# @override
|
1107
|
+
def namespace
|
1108
|
+
'com.flipp.content'
|
1109
|
+
end
|
1110
|
+
|
1111
|
+
# @override
|
1112
|
+
def as_json(_opts={})
|
1113
|
+
{
|
1114
|
+
'record3_id' => @record3_id
|
1115
|
+
}
|
1116
|
+
end
|
1117
|
+
end
|
1118
|
+
|
1119
|
+
# Autogenerated Schema for Record at com.flipp.content.Record4
|
1120
|
+
class Record4 < Deimos::SchemaClass::Record
|
1121
|
+
|
1122
|
+
### Attribute Accessors ###
|
1123
|
+
# @return [Integer]
|
1124
|
+
attr_accessor :record4_id
|
1125
|
+
|
1126
|
+
# @override
|
1127
|
+
def initialize(record4_id: 0)
|
1128
|
+
super
|
1129
|
+
self.record4_id = record4_id
|
1130
|
+
end
|
1131
|
+
|
1132
|
+
# @override
|
1133
|
+
def schema
|
1134
|
+
'Record4'
|
1135
|
+
end
|
1136
|
+
|
1137
|
+
# @override
|
1138
|
+
def namespace
|
1139
|
+
'com.flipp.content'
|
1140
|
+
end
|
1141
|
+
|
1142
|
+
# @override
|
1143
|
+
def as_json(_opts={})
|
1144
|
+
{
|
1145
|
+
'record4_id' => @record4_id
|
1146
|
+
}
|
1147
|
+
end
|
1148
|
+
end
|
1149
|
+
|
1150
|
+
|
1151
|
+
### Attribute Readers ###
|
1152
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
1153
|
+
attr_reader :test_union_type
|
1154
|
+
|
1155
|
+
### Attribute Accessors ###
|
1156
|
+
# @return [String]
|
1157
|
+
attr_accessor :test_id
|
1158
|
+
# @return [nil, Integer]
|
1159
|
+
attr_accessor :test_long
|
1160
|
+
|
1161
|
+
### Attribute Writers ###
|
1162
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
1163
|
+
def test_union_type=(value)
|
1164
|
+
@test_union_type = initialize_test_union_type_type(value)
|
1165
|
+
end
|
1166
|
+
|
1167
|
+
# Helper method to determine which schema type to use for test_union_type
|
1168
|
+
# @param value [Hash, nil]
|
1169
|
+
# @return [Object, nil]
|
1170
|
+
def initialize_test_union_type_type(value)
|
1171
|
+
return nil if value.nil?
|
1172
|
+
|
1173
|
+
klass = [Record1, Record2, Record3, Record4].find do |candidate|
|
1174
|
+
fields = candidate.new.as_json.keys
|
1175
|
+
(value.keys - fields).empty?
|
1176
|
+
end
|
1177
|
+
|
1178
|
+
klass.initialize_from_value(value)
|
1179
|
+
end
|
1180
|
+
|
1181
|
+
# @override
|
1182
|
+
def initialize(test_id: "",
|
1183
|
+
test_long: nil,
|
1184
|
+
test_union_type: nil)
|
1185
|
+
super
|
1186
|
+
self.test_id = test_id
|
1187
|
+
self.test_long = test_long
|
1188
|
+
self.test_union_type = test_union_type
|
1189
|
+
end
|
1190
|
+
|
1191
|
+
# @override
|
1192
|
+
def schema
|
1193
|
+
'MySchemaWithUnionType'
|
1194
|
+
end
|
1195
|
+
|
1196
|
+
# @override
|
1197
|
+
def namespace
|
1198
|
+
'com.my-namespace'
|
1199
|
+
end
|
1200
|
+
|
1201
|
+
# @override
|
1202
|
+
def as_json(_opts={})
|
1203
|
+
{
|
1204
|
+
'test_id' => @test_id,
|
1205
|
+
'test_long' => @test_long,
|
1206
|
+
'test_union_type' => @test_union_type&.as_json
|
1207
|
+
}
|
1208
|
+
end
|
1209
|
+
end
|
1210
|
+
end; end
|
1211
|
+
|
1212
|
+
|
1011
1213
|
spec/app/lib/schema_classes/schemas/my_namespace/my_schema_with_unique_id.rb:
|
1012
1214
|
# frozen_string_literal: true
|
1013
1215
|
|