deimos-ruby 2.0.3 → 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 +8 -0
- data/docs/CONFIGURATION.md +6 -5
- data/lib/deimos/config/configuration.rb +4 -0
- data/lib/deimos/kafka_source.rb +14 -4
- 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/kafka_source_spec.rb +49 -1
- 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
|
@@ -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
|
|
|
@@ -1012,6 +1012,77 @@ module Schemas
|
|
|
1012
1012
|
end
|
|
1013
1013
|
|
|
1014
1014
|
|
|
1015
|
+
spec/app/lib/schema_classes/my_schema_with_union_type.rb:
|
|
1016
|
+
# frozen_string_literal: true
|
|
1017
|
+
|
|
1018
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
|
1019
|
+
module Schemas
|
|
1020
|
+
### Primary Schema Class ###
|
|
1021
|
+
# Autogenerated Schema for Record at com.my-namespace.MySchemaWithUnionType
|
|
1022
|
+
class MySchemaWithUnionType < Deimos::SchemaClass::Record
|
|
1023
|
+
|
|
1024
|
+
### Attribute Readers ###
|
|
1025
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
|
1026
|
+
attr_reader :test_union_type
|
|
1027
|
+
|
|
1028
|
+
### Attribute Accessors ###
|
|
1029
|
+
# @return [String]
|
|
1030
|
+
attr_accessor :test_id
|
|
1031
|
+
# @return [nil, Integer]
|
|
1032
|
+
attr_accessor :test_long
|
|
1033
|
+
|
|
1034
|
+
### Attribute Writers ###
|
|
1035
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
|
1036
|
+
def test_union_type=(value)
|
|
1037
|
+
@test_union_type = initialize_test_union_type_type(value)
|
|
1038
|
+
end
|
|
1039
|
+
|
|
1040
|
+
# Helper method to determine which schema type to use for test_union_type
|
|
1041
|
+
# @param value [Hash, nil]
|
|
1042
|
+
# @return [Object, nil]
|
|
1043
|
+
def initialize_test_union_type_type(value)
|
|
1044
|
+
return nil if value.nil?
|
|
1045
|
+
|
|
1046
|
+
klass = [Record1, Record2, Record3, Record4].find do |candidate|
|
|
1047
|
+
fields = candidate.new.as_json.keys
|
|
1048
|
+
(value.keys - fields).empty?
|
|
1049
|
+
end
|
|
1050
|
+
|
|
1051
|
+
klass.initialize_from_value(value)
|
|
1052
|
+
end
|
|
1053
|
+
|
|
1054
|
+
# @override
|
|
1055
|
+
def initialize(test_id: "",
|
|
1056
|
+
test_long: nil,
|
|
1057
|
+
test_union_type: nil)
|
|
1058
|
+
super
|
|
1059
|
+
self.test_id = test_id
|
|
1060
|
+
self.test_long = test_long
|
|
1061
|
+
self.test_union_type = test_union_type
|
|
1062
|
+
end
|
|
1063
|
+
|
|
1064
|
+
# @override
|
|
1065
|
+
def schema
|
|
1066
|
+
'MySchemaWithUnionType'
|
|
1067
|
+
end
|
|
1068
|
+
|
|
1069
|
+
# @override
|
|
1070
|
+
def namespace
|
|
1071
|
+
'com.my-namespace'
|
|
1072
|
+
end
|
|
1073
|
+
|
|
1074
|
+
# @override
|
|
1075
|
+
def as_json(_opts={})
|
|
1076
|
+
{
|
|
1077
|
+
'test_id' => @test_id,
|
|
1078
|
+
'test_long' => @test_long,
|
|
1079
|
+
'test_union_type' => @test_union_type&.as_json
|
|
1080
|
+
}
|
|
1081
|
+
end
|
|
1082
|
+
end
|
|
1083
|
+
end
|
|
1084
|
+
|
|
1085
|
+
|
|
1015
1086
|
spec/app/lib/schema_classes/my_schema_with_unique_id.rb:
|
|
1016
1087
|
# frozen_string_literal: true
|
|
1017
1088
|
|
|
@@ -1110,6 +1181,167 @@ module Schemas
|
|
|
1110
1181
|
end
|
|
1111
1182
|
|
|
1112
1183
|
|
|
1184
|
+
spec/app/lib/schema_classes/record1.rb:
|
|
1185
|
+
# frozen_string_literal: true
|
|
1186
|
+
|
|
1187
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
|
1188
|
+
module Schemas
|
|
1189
|
+
### Primary Schema Class ###
|
|
1190
|
+
# Autogenerated Schema for Record at com.flipp.content.Record1
|
|
1191
|
+
class Record1 < Deimos::SchemaClass::Record
|
|
1192
|
+
|
|
1193
|
+
### Attribute Accessors ###
|
|
1194
|
+
# @return [Hash<String, Integer>]
|
|
1195
|
+
attr_accessor :record1_map
|
|
1196
|
+
# @return [Integer]
|
|
1197
|
+
attr_accessor :record1_id
|
|
1198
|
+
|
|
1199
|
+
# @override
|
|
1200
|
+
def initialize(record1_map: {},
|
|
1201
|
+
record1_id: 0)
|
|
1202
|
+
super
|
|
1203
|
+
self.record1_map = record1_map
|
|
1204
|
+
self.record1_id = record1_id
|
|
1205
|
+
end
|
|
1206
|
+
|
|
1207
|
+
# @override
|
|
1208
|
+
def schema
|
|
1209
|
+
'Record1'
|
|
1210
|
+
end
|
|
1211
|
+
|
|
1212
|
+
# @override
|
|
1213
|
+
def namespace
|
|
1214
|
+
'com.flipp.content'
|
|
1215
|
+
end
|
|
1216
|
+
|
|
1217
|
+
# @override
|
|
1218
|
+
def as_json(_opts={})
|
|
1219
|
+
{
|
|
1220
|
+
'record1_map' => @record1_map,
|
|
1221
|
+
'record1_id' => @record1_id
|
|
1222
|
+
}
|
|
1223
|
+
end
|
|
1224
|
+
end
|
|
1225
|
+
end
|
|
1226
|
+
|
|
1227
|
+
|
|
1228
|
+
spec/app/lib/schema_classes/record2.rb:
|
|
1229
|
+
# frozen_string_literal: true
|
|
1230
|
+
|
|
1231
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
|
1232
|
+
module Schemas
|
|
1233
|
+
### Primary Schema Class ###
|
|
1234
|
+
# Autogenerated Schema for Record at com.flipp.content.Record2
|
|
1235
|
+
class Record2 < Deimos::SchemaClass::Record
|
|
1236
|
+
|
|
1237
|
+
### Attribute Accessors ###
|
|
1238
|
+
# @return [String]
|
|
1239
|
+
attr_accessor :record2_id
|
|
1240
|
+
|
|
1241
|
+
# @override
|
|
1242
|
+
def initialize(record2_id: "")
|
|
1243
|
+
super
|
|
1244
|
+
self.record2_id = record2_id
|
|
1245
|
+
end
|
|
1246
|
+
|
|
1247
|
+
# @override
|
|
1248
|
+
def schema
|
|
1249
|
+
'Record2'
|
|
1250
|
+
end
|
|
1251
|
+
|
|
1252
|
+
# @override
|
|
1253
|
+
def namespace
|
|
1254
|
+
'com.flipp.content'
|
|
1255
|
+
end
|
|
1256
|
+
|
|
1257
|
+
# @override
|
|
1258
|
+
def as_json(_opts={})
|
|
1259
|
+
{
|
|
1260
|
+
'record2_id' => @record2_id
|
|
1261
|
+
}
|
|
1262
|
+
end
|
|
1263
|
+
end
|
|
1264
|
+
end
|
|
1265
|
+
|
|
1266
|
+
|
|
1267
|
+
spec/app/lib/schema_classes/record3.rb:
|
|
1268
|
+
# frozen_string_literal: true
|
|
1269
|
+
|
|
1270
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
|
1271
|
+
module Schemas
|
|
1272
|
+
### Primary Schema Class ###
|
|
1273
|
+
# Autogenerated Schema for Record at com.flipp.content.Record3
|
|
1274
|
+
class Record3 < Deimos::SchemaClass::Record
|
|
1275
|
+
|
|
1276
|
+
### Attribute Accessors ###
|
|
1277
|
+
# @return [Float]
|
|
1278
|
+
attr_accessor :record3_id
|
|
1279
|
+
|
|
1280
|
+
# @override
|
|
1281
|
+
def initialize(record3_id: 0.0)
|
|
1282
|
+
super
|
|
1283
|
+
self.record3_id = record3_id
|
|
1284
|
+
end
|
|
1285
|
+
|
|
1286
|
+
# @override
|
|
1287
|
+
def schema
|
|
1288
|
+
'Record3'
|
|
1289
|
+
end
|
|
1290
|
+
|
|
1291
|
+
# @override
|
|
1292
|
+
def namespace
|
|
1293
|
+
'com.flipp.content'
|
|
1294
|
+
end
|
|
1295
|
+
|
|
1296
|
+
# @override
|
|
1297
|
+
def as_json(_opts={})
|
|
1298
|
+
{
|
|
1299
|
+
'record3_id' => @record3_id
|
|
1300
|
+
}
|
|
1301
|
+
end
|
|
1302
|
+
end
|
|
1303
|
+
end
|
|
1304
|
+
|
|
1305
|
+
|
|
1306
|
+
spec/app/lib/schema_classes/record4.rb:
|
|
1307
|
+
# frozen_string_literal: true
|
|
1308
|
+
|
|
1309
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
|
1310
|
+
module Schemas
|
|
1311
|
+
### Primary Schema Class ###
|
|
1312
|
+
# Autogenerated Schema for Record at com.flipp.content.Record4
|
|
1313
|
+
class Record4 < Deimos::SchemaClass::Record
|
|
1314
|
+
|
|
1315
|
+
### Attribute Accessors ###
|
|
1316
|
+
# @return [Integer]
|
|
1317
|
+
attr_accessor :record4_id
|
|
1318
|
+
|
|
1319
|
+
# @override
|
|
1320
|
+
def initialize(record4_id: 0)
|
|
1321
|
+
super
|
|
1322
|
+
self.record4_id = record4_id
|
|
1323
|
+
end
|
|
1324
|
+
|
|
1325
|
+
# @override
|
|
1326
|
+
def schema
|
|
1327
|
+
'Record4'
|
|
1328
|
+
end
|
|
1329
|
+
|
|
1330
|
+
# @override
|
|
1331
|
+
def namespace
|
|
1332
|
+
'com.flipp.content'
|
|
1333
|
+
end
|
|
1334
|
+
|
|
1335
|
+
# @override
|
|
1336
|
+
def as_json(_opts={})
|
|
1337
|
+
{
|
|
1338
|
+
'record4_id' => @record4_id
|
|
1339
|
+
}
|
|
1340
|
+
end
|
|
1341
|
+
end
|
|
1342
|
+
end
|
|
1343
|
+
|
|
1344
|
+
|
|
1113
1345
|
spec/app/lib/schema_classes/update_request.rb:
|
|
1114
1346
|
# frozen_string_literal: true
|
|
1115
1347
|
|
|
@@ -1072,6 +1072,208 @@ module Schemas
|
|
|
1072
1072
|
end
|
|
1073
1073
|
|
|
1074
1074
|
|
|
1075
|
+
spec/app/lib/schema_classes/my_schema_with_union_type.rb:
|
|
1076
|
+
# frozen_string_literal: true
|
|
1077
|
+
|
|
1078
|
+
# This file is autogenerated by Deimos, Do NOT modify
|
|
1079
|
+
module Schemas
|
|
1080
|
+
### Primary Schema Class ###
|
|
1081
|
+
# Autogenerated Schema for Record at com.my-namespace.MySchemaWithUnionType
|
|
1082
|
+
class MySchemaWithUnionType < Deimos::SchemaClass::Record
|
|
1083
|
+
|
|
1084
|
+
### Secondary Schema Classes ###
|
|
1085
|
+
# Autogenerated Schema for Record at com.flipp.content.Record1
|
|
1086
|
+
class Record1 < Deimos::SchemaClass::Record
|
|
1087
|
+
|
|
1088
|
+
### Attribute Accessors ###
|
|
1089
|
+
# @return [Hash<String, Integer>]
|
|
1090
|
+
attr_accessor :record1_map
|
|
1091
|
+
# @return [Integer]
|
|
1092
|
+
attr_accessor :record1_id
|
|
1093
|
+
|
|
1094
|
+
# @override
|
|
1095
|
+
def initialize(record1_map: {},
|
|
1096
|
+
record1_id: 0)
|
|
1097
|
+
super
|
|
1098
|
+
self.record1_map = record1_map
|
|
1099
|
+
self.record1_id = record1_id
|
|
1100
|
+
end
|
|
1101
|
+
|
|
1102
|
+
# @override
|
|
1103
|
+
def schema
|
|
1104
|
+
'Record1'
|
|
1105
|
+
end
|
|
1106
|
+
|
|
1107
|
+
# @override
|
|
1108
|
+
def namespace
|
|
1109
|
+
'com.flipp.content'
|
|
1110
|
+
end
|
|
1111
|
+
|
|
1112
|
+
# @override
|
|
1113
|
+
def as_json(_opts={})
|
|
1114
|
+
{
|
|
1115
|
+
'record1_map' => @record1_map,
|
|
1116
|
+
'record1_id' => @record1_id
|
|
1117
|
+
}
|
|
1118
|
+
end
|
|
1119
|
+
end
|
|
1120
|
+
|
|
1121
|
+
# Autogenerated Schema for Record at com.flipp.content.Record2
|
|
1122
|
+
class Record2 < Deimos::SchemaClass::Record
|
|
1123
|
+
|
|
1124
|
+
### Attribute Accessors ###
|
|
1125
|
+
# @return [String]
|
|
1126
|
+
attr_accessor :record2_id
|
|
1127
|
+
|
|
1128
|
+
# @override
|
|
1129
|
+
def initialize(record2_id: "")
|
|
1130
|
+
super
|
|
1131
|
+
self.record2_id = record2_id
|
|
1132
|
+
end
|
|
1133
|
+
|
|
1134
|
+
# @override
|
|
1135
|
+
def schema
|
|
1136
|
+
'Record2'
|
|
1137
|
+
end
|
|
1138
|
+
|
|
1139
|
+
# @override
|
|
1140
|
+
def namespace
|
|
1141
|
+
'com.flipp.content'
|
|
1142
|
+
end
|
|
1143
|
+
|
|
1144
|
+
# @override
|
|
1145
|
+
def as_json(_opts={})
|
|
1146
|
+
{
|
|
1147
|
+
'record2_id' => @record2_id
|
|
1148
|
+
}
|
|
1149
|
+
end
|
|
1150
|
+
end
|
|
1151
|
+
|
|
1152
|
+
# Autogenerated Schema for Record at com.flipp.content.Record3
|
|
1153
|
+
class Record3 < Deimos::SchemaClass::Record
|
|
1154
|
+
|
|
1155
|
+
### Attribute Accessors ###
|
|
1156
|
+
# @return [Float]
|
|
1157
|
+
attr_accessor :record3_id
|
|
1158
|
+
|
|
1159
|
+
# @override
|
|
1160
|
+
def initialize(record3_id: 0.0)
|
|
1161
|
+
super
|
|
1162
|
+
self.record3_id = record3_id
|
|
1163
|
+
end
|
|
1164
|
+
|
|
1165
|
+
# @override
|
|
1166
|
+
def schema
|
|
1167
|
+
'Record3'
|
|
1168
|
+
end
|
|
1169
|
+
|
|
1170
|
+
# @override
|
|
1171
|
+
def namespace
|
|
1172
|
+
'com.flipp.content'
|
|
1173
|
+
end
|
|
1174
|
+
|
|
1175
|
+
# @override
|
|
1176
|
+
def as_json(_opts={})
|
|
1177
|
+
{
|
|
1178
|
+
'record3_id' => @record3_id
|
|
1179
|
+
}
|
|
1180
|
+
end
|
|
1181
|
+
end
|
|
1182
|
+
|
|
1183
|
+
# Autogenerated Schema for Record at com.flipp.content.Record4
|
|
1184
|
+
class Record4 < Deimos::SchemaClass::Record
|
|
1185
|
+
|
|
1186
|
+
### Attribute Accessors ###
|
|
1187
|
+
# @return [Integer]
|
|
1188
|
+
attr_accessor :record4_id
|
|
1189
|
+
|
|
1190
|
+
# @override
|
|
1191
|
+
def initialize(record4_id: 0)
|
|
1192
|
+
super
|
|
1193
|
+
self.record4_id = record4_id
|
|
1194
|
+
end
|
|
1195
|
+
|
|
1196
|
+
# @override
|
|
1197
|
+
def schema
|
|
1198
|
+
'Record4'
|
|
1199
|
+
end
|
|
1200
|
+
|
|
1201
|
+
# @override
|
|
1202
|
+
def namespace
|
|
1203
|
+
'com.flipp.content'
|
|
1204
|
+
end
|
|
1205
|
+
|
|
1206
|
+
# @override
|
|
1207
|
+
def as_json(_opts={})
|
|
1208
|
+
{
|
|
1209
|
+
'record4_id' => @record4_id
|
|
1210
|
+
}
|
|
1211
|
+
end
|
|
1212
|
+
end
|
|
1213
|
+
|
|
1214
|
+
|
|
1215
|
+
### Attribute Readers ###
|
|
1216
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
|
1217
|
+
attr_reader :test_union_type
|
|
1218
|
+
|
|
1219
|
+
### Attribute Accessors ###
|
|
1220
|
+
# @return [String]
|
|
1221
|
+
attr_accessor :test_id
|
|
1222
|
+
# @return [nil, Integer]
|
|
1223
|
+
attr_accessor :test_long
|
|
1224
|
+
|
|
1225
|
+
### Attribute Writers ###
|
|
1226
|
+
# @return [nil, Record1, Record2, Record3, Record4, Integer, Array<String>]
|
|
1227
|
+
def test_union_type=(value)
|
|
1228
|
+
@test_union_type = initialize_test_union_type_type(value)
|
|
1229
|
+
end
|
|
1230
|
+
|
|
1231
|
+
# Helper method to determine which schema type to use for test_union_type
|
|
1232
|
+
# @param value [Hash, nil]
|
|
1233
|
+
# @return [Object, nil]
|
|
1234
|
+
def initialize_test_union_type_type(value)
|
|
1235
|
+
return nil if value.nil?
|
|
1236
|
+
|
|
1237
|
+
klass = [Record1, Record2, Record3, Record4].find do |candidate|
|
|
1238
|
+
fields = candidate.new.as_json.keys
|
|
1239
|
+
(value.keys - fields).empty?
|
|
1240
|
+
end
|
|
1241
|
+
|
|
1242
|
+
klass.initialize_from_value(value)
|
|
1243
|
+
end
|
|
1244
|
+
|
|
1245
|
+
# @override
|
|
1246
|
+
def initialize(test_id: "",
|
|
1247
|
+
test_long: nil,
|
|
1248
|
+
test_union_type: nil)
|
|
1249
|
+
super
|
|
1250
|
+
self.test_id = test_id
|
|
1251
|
+
self.test_long = test_long
|
|
1252
|
+
self.test_union_type = test_union_type
|
|
1253
|
+
end
|
|
1254
|
+
|
|
1255
|
+
# @override
|
|
1256
|
+
def schema
|
|
1257
|
+
'MySchemaWithUnionType'
|
|
1258
|
+
end
|
|
1259
|
+
|
|
1260
|
+
# @override
|
|
1261
|
+
def namespace
|
|
1262
|
+
'com.my-namespace'
|
|
1263
|
+
end
|
|
1264
|
+
|
|
1265
|
+
# @override
|
|
1266
|
+
def as_json(_opts={})
|
|
1267
|
+
{
|
|
1268
|
+
'test_id' => @test_id,
|
|
1269
|
+
'test_long' => @test_long,
|
|
1270
|
+
'test_union_type' => @test_union_type&.as_json
|
|
1271
|
+
}
|
|
1272
|
+
end
|
|
1273
|
+
end
|
|
1274
|
+
end
|
|
1275
|
+
|
|
1276
|
+
|
|
1075
1277
|
spec/app/lib/schema_classes/my_schema_with_unique_id.rb:
|
|
1076
1278
|
# frozen_string_literal: true
|
|
1077
1279
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -276,6 +276,31 @@ RSpec.shared_context('with widgets') do
|
|
|
276
276
|
end
|
|
277
277
|
end
|
|
278
278
|
|
|
279
|
+
RSpec.shared_context('with widget_with_union_types') do
|
|
280
|
+
before(:all) do
|
|
281
|
+
ActiveRecord::Base.connection.create_table(:widget_with_union_types, force: true) do |t|
|
|
282
|
+
t.string(:test_id)
|
|
283
|
+
t.bigint(:test_long)
|
|
284
|
+
t.json(:test_union_type)
|
|
285
|
+
|
|
286
|
+
t.timestamps
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# :nodoc:
|
|
290
|
+
class WidgetWithUnionType < ActiveRecord::Base
|
|
291
|
+
# @return [String]
|
|
292
|
+
def generated_id
|
|
293
|
+
'generated_id'
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
after(:all) do
|
|
299
|
+
ActiveRecord::Base.connection.drop_table(:widget_with_union_types)
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
|
|
279
304
|
RSpec.shared_context('with DB') do
|
|
280
305
|
before(:all) do
|
|
281
306
|
setup_db(self.class.metadata[:db_config] || DbConfigs::DB_OPTIONS.last)
|