Skip to content

Commit 387a60a

Browse files
committed
Refactor generic mapper associations and update Gemfile for local path, enhance validation services
1 parent c3c4685 commit 387a60a

22 files changed

+559
-2406
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ gem 'good_job', '~> 4.0'
7979
gem 'rotp'
8080

8181
gem 'grpc', '~> 1.67'
82-
gem 'tucana', '0.0.29'
82+
gem 'tucana', '0.0.0', path: '../tucana/build/ruby'
8383

8484
gem 'code0-identities', '~> 0.0.1'
8585

Gemfile.lock

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
PATH
2+
remote: ../tucana/build/ruby
3+
specs:
4+
tucana (0.0.0)
5+
grpc (~> 1.64)
6+
17
GEM
28
remote: https://rubygems.org/
39
specs:
@@ -362,8 +368,6 @@ GEM
362368
test-prof (1.4.4)
363369
thor (1.3.2)
364370
timeout (0.4.3)
365-
tucana (0.0.29)
366-
grpc (~> 1.64)
367371
tzinfo (2.0.6)
368372
concurrent-ruby (~> 1.0)
369373
unicode-display_width (2.6.0)
@@ -416,7 +420,7 @@ DEPENDENCIES
416420
simplecov (~> 0.22.0)
417421
simplecov-cobertura (~> 2.1)
418422
test-prof (~> 1.0)
419-
tucana (= 0.0.29)
423+
tucana (= 0.0.0)!
420424
tzinfo-data
421425

422426
RUBY VERSION

app/models/data_type_identifier.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ class DataTypeIdentifier < ApplicationRecord
44
belongs_to :data_type, optional: true, inverse_of: :data_type_identifiers
55
belongs_to :generic_type, optional: true, inverse_of: :data_type_identifiers
66
belongs_to :runtime, inverse_of: :data_type_identifiers
7-
belongs_to :generic_mapper, class_name: 'GenericMapper', optional: true, inverse_of: :sources
7+
belongs_to :generic_mapper, class_name: 'GenericMapper', optional: true, inverse_of: :source
88
belongs_to :function_generic_mapper, class_name: 'FunctionGenericMapper',
9-
optional: true, inverse_of: :sources
9+
optional: true, inverse_of: :source
1010

1111
has_many :child_types, class_name: 'DataType', inverse_of: :parent_type
1212

app/models/function_definition.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ class FunctionDefinition < ApplicationRecord
44
belongs_to :runtime_function_definition
55
belongs_to :return_type, class_name: 'DataTypeIdentifier', optional: true
66

7+
has_many :generic_combination_strategies,
8+
class_name: 'GenericCombinationStrategy', inverse_of: :function_generic_mapper
9+
710
has_many :names, -> { by_purpose(:name) }, class_name: 'Translation', as: :owner, inverse_of: :owner
811
has_many :descriptions, -> { by_purpose(:description) }, class_name: 'Translation', as: :owner, inverse_of: :owner
912
has_many :documentations, -> { by_purpose(:documentation) }, class_name: 'Translation', as: :owner, inverse_of: :owner

app/models/function_generic_mapper.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ class FunctionGenericMapper < ApplicationRecord
66
belongs_to :runtime_parameter_definition, class_name: 'RuntimeParameterDefinition', optional: true,
77
inverse_of: :function_generic_mappers
88

9-
has_many :sources, class_name: 'DataTypeIdentifier', inverse_of: :function_generic_mapper
9+
has_many :source, class_name: 'DataTypeIdentifier', inverse_of: :function_generic_mapper
10+
has_many :generic_combination_strategies,
11+
class_name: 'GenericCombinationStrategy', inverse_of: :function_generic_mapper
1012

1113
validates :target, presence: true
1214
end

app/models/generic_combination_strategy.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ class GenericCombinationStrategy < ApplicationRecord
66
or: 2,
77
}.with_indifferent_access
88

9-
belongs_to :generic_mapper
9+
belongs_to :generic_mapper, optional: true, inverse_of: :generic_combination_strategies
10+
belongs_to :function_generic_mapper, optional: true, inverse_of: :generic_combination_strategies
1011

1112
enum :type, TYPES, prefix: :type
1213
end

app/models/generic_mapper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class GenericMapper < ApplicationRecord
55
belongs_to :runtime, inverse_of: :generic_mappers
66
belongs_to :runtime_parameter_definition, optional: true, inverse_of: :generic_mappers
77

8-
has_many :sources, class_name: 'DataTypeIdentifier', inverse_of: :generic_mapper
8+
has_many :source, class_name: 'DataTypeIdentifier', inverse_of: :generic_mapper
99
has_many :generic_combination_strategies, class_name: 'GenericCombinationStrategy', inverse_of: :generic_mapper
1010

1111
validates :target, presence: true

app/services/namespaces/projects/flows/create_service.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def get_data_type_identifier(identifier)
134134
mappers = identifier.generic_type.mappers.map do |mapper|
135135
GenericMapper.create(
136136
generic_mapper_id: mapper.generic_mapper_id,
137-
sources: mapper.sources,
137+
source: mapper.source,
138138
target: mapper.target
139139
)
140140
end

app/services/namespaces/projects/flows/validation/node_function/generic_mapper_validation_service.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ def execute
3535
)
3636
end
3737

38-
generic_mapper.sources.each do |source|
38+
generic_mapper.generic_combination_strategies.each do |_strategy|
39+
# TODO: idk
40+
end
41+
42+
generic_mapper.source.each do |source|
3943
Namespaces::Projects::Flows::Validation::DataType::DataTypeIdentifierValidationService.new(
4044
current_authentication,
4145
flow,

app/services/runtimes/data_types/update_service.rb

Lines changed: 56 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ def execute
3232

3333
def sort_data_types(data_types)
3434
# types without parent are already "in order" because they don't have a dependency
35-
sorted_types = data_types.reject { |dt| dt.parent_type_identifier.present? }
35+
sorted_types = data_types.reject { |dt| dt.parent_type.present? }
3636
unsorted_types = data_types - sorted_types
3737

3838
unsorted_types.size.times do
3939
# find the next datatype that doesn't have a dependency on an unsorted type
4040
next_datatype = unsorted_types.find do |to_sort|
4141
unsorted_types.none? do |to_search|
42-
to_sort.parent_type_identifier == to_search.identifier
42+
to_sort.parent_type&.data_type_identifier == to_search.identifier
4343
end
4444
end
4545
sorted_types << next_datatype
@@ -49,20 +49,69 @@ def sort_data_types(data_types)
4949
sorted_types + unsorted_types # any unsorted types also need to be processed. They might still fail validations
5050
end
5151

52-
def update_datatype(data_type, _t)
52+
def update_datatype(data_type, t)
5353
db_object = DataType.find_or_initialize_by(runtime: current_runtime, identifier: data_type.identifier)
5454
db_object.removed_at = nil
5555
db_object.variant = data_type.variant.to_s.downcase
56-
if data_type.parent_type_identifier.present?
57-
# db_object.parent_type = find_datatype(data_type.parent_type_identifier, t)
58-
# TODO: wait for parenttype get properly introduced in grpc
59-
end
56+
db_object.parent_type = find_data_type_identifier(data_type.parent_type, t) if data_type.parent_type.present?
6057
db_object.rules = update_rules(data_type.rules, db_object)
6158
db_object.names = update_translations(data_type.name, db_object.names)
6259
db_object.generic_keys = data_type.generic_keys.to_a
6360
db_object.save
6461
end
6562

63+
def find_data_type_identifier(identifier, t)
64+
if identifier.data_type_identifier.present?
65+
return create_data_type_identifier(t, data_type_id: find_datatype(identifier.data_type_identifier, t).id)
66+
end
67+
68+
if identifier.generic_type.present?
69+
data_type = find_datatype(identifier.generic_type.data_type_identifier, t)
70+
71+
generic_type = GenericType.find_by(
72+
runtime_id: current_runtime.id,
73+
data_type: data_type
74+
)
75+
if generic_type.nil?
76+
generic_type = GenericType.create(
77+
runtime_id: current_runtime.id,
78+
data_type: data_type
79+
)
80+
end
81+
82+
if generic_type.nil?
83+
t.rollback_and_return! ServiceResponse.error(
84+
message: "Could not find generic type with identifier #{identifier.generic_type.data_type_identifier}",
85+
payload: :no_generic_type_for_identifier
86+
)
87+
end
88+
89+
generic_type.assign_attributes(generic_mappers: update_mappers(identifier.generic_type.generic_mappers, nil,
90+
t))
91+
92+
return create_data_type_identifier(t, generic_type_id: generic_type.id)
93+
end
94+
return create_data_type_identifier(t, generic_key: identifier.generic_key) if identifier.generic_key.present?
95+
96+
raise ArgumentError, "Invalid identifier: #{identifier.inspect}"
97+
end
98+
99+
def create_data_type_identifier(t, **kwargs)
100+
data_type_identifier = DataTypeIdentifier.find_by(runtime_id: current_runtime.id, **kwargs)
101+
if data_type_identifier.nil?
102+
data_type_identifier = DataTypeIdentifier.create_or_find_by(runtime_id: current_runtime.id, **kwargs)
103+
end
104+
105+
if data_type_identifier.nil?
106+
t.rollback_and_return! ServiceResponse.error(
107+
message: "Could not find datatype identifier with #{kwargs}",
108+
payload: :no_datatype_identifier_for_generic_key
109+
)
110+
end
111+
112+
data_type_identifier
113+
end
114+
66115
def find_datatype(identifier, t)
67116
data_type = DataType.find_or_initialize_by(runtime: current_runtime, identifier: identifier)
68117

0 commit comments

Comments
 (0)