@@ -6,15 +6,18 @@ module DataTypeHelper
66 # This method updates or creates GenericMappers based on the provided gRPC GenericMapper objects
77 # within the current runtime.
88 # @param generic_mappers [Array<Tucana::Shared::GenericMapper>] An array of gRPC GenericMapper objects.
9- def update_mappers ( generic_mappers , t )
9+ def update_mappers ( generic_mappers , generic_type , t )
1010 raise 'Including class must define current_runtime' unless respond_to? ( :current_runtime )
1111
1212 generic_mappers . to_a . map do |generic_mapper |
13- mapper = GenericMapper . create_or_find_by ( runtime : current_runtime ,
14- target : generic_mapper . target ,
15- sources : generic_mapper . source . map do |source |
16- find_data_type_identifier ( source , t )
17- end )
13+ mapper = GenericMapper . find_by ( runtime : current_runtime , generic_type : generic_type )
14+
15+ mapper = GenericMapper . new ( runtime : current_runtime , generic_type : generic_type ) if mapper . nil?
16+
17+ mapper . target = generic_mapper . target
18+ mapper . sources = generic_mapper . source . map do |source |
19+ find_data_type_identifier ( source , mapper , t , additional_dti_kwargs : { generic_mapper : mapper } )
20+ end
1821
1922 if mapper . nil? || !mapper . save
2023 t . rollback_and_return! ServiceResponse . error (
@@ -28,22 +31,19 @@ def update_mappers(generic_mappers, t)
2831
2932 # This method finds or creates a DataTypeIdentifier based on the provided identifier within the current runtime.
3033 # @param identifier [Tucana::Sagittarius::DataTypeIdentifier] The gRPC DataTypeIdentifier object.
31- def find_data_type_identifier ( identifier , t )
34+ def find_data_type_identifier ( identifier , owner , t , additional_dti_kwargs : { } )
3235 if identifier . data_type_identifier . present?
33- return create_data_type_identifier ( t , data_type_id : find_data_type ( identifier . data_type_identifier , t ) . id )
36+ return create_data_type_identifier (
37+ t ,
38+ **additional_dti_kwargs ,
39+ data_type_id : find_data_type ( identifier . data_type_identifier , t ) . id
40+ )
3441 end
3542
3643 if identifier . generic_type . present?
3744 data_type = find_data_type ( identifier . generic_type . data_type_identifier , t )
3845
39- generic_type = GenericType . find_by (
40- data_type : data_type
41- )
42- if generic_type . nil?
43- generic_type = GenericType . create (
44- data_type : data_type
45- )
46- end
46+ generic_type = owner . owned_generic_types . find_or_initialize_by ( data_type : data_type )
4747
4848 if generic_type . nil?
4949 t . rollback_and_return! ServiceResponse . error (
@@ -52,13 +52,14 @@ def find_data_type_identifier(identifier, t)
5252 )
5353 end
5454
55- generic_type . assign_attributes ( generic_mappers : update_mappers ( identifier . generic_type . generic_mappers ,
56- t ) )
55+ generic_type . generic_mappers = update_mappers ( identifier . generic_type . generic_mappers , generic_type , t )
5756
58- return create_data_type_identifier ( t , generic_type_id : generic_type . id )
57+ return create_data_type_identifier ( t , ** additional_dti_kwargs , generic_type_id : generic_type . id )
5958 end
6059
61- return create_data_type_identifier ( t , generic_key : identifier . generic_key ) if identifier . generic_key . present?
60+ if identifier . generic_key . present?
61+ return create_data_type_identifier ( t , **additional_dti_kwargs , generic_key : identifier . generic_key )
62+ end
6263
6364 raise ArgumentError , "Invalid identifier: #{ identifier . inspect } "
6465 end
0 commit comments