diff --git a/app/services/projects/import_export/project_tree_restorer.rb b/app/services/projects/import_export/project_tree_restorer.rb index be0c70660996168b3771bd1230b3a131990cc3b6..df0363e0ecaaa1a6f3df445471e5ad6e01763452 100644 --- a/app/services/projects/import_export/project_tree_restorer.rb +++ b/app/services/projects/import_export/project_tree_restorer.rb @@ -30,24 +30,8 @@ module Projects relation_key = relation.is_a?(Hash) ? relation.keys.first : relation relation_hash = create_relation(relation_key, tree_hash[relation_key.to_s]) project.update_attribute(relation_key, relation_hash) - # relation_hash = nil - # # FIXME - # # next if tree_hash[relation.to_s].blank? - # if (relation.is_a?(Hash) && relation.values.first[:include]) - # #TODO name stuff properly - # relation_sym = relation.keys.first - # #TODO remove sub-relation hashes from here so we can save the parent relation first - # relation_hash = create_relation(relation_sym, tree_hash[relation_sym.to_s]) - # sub_relations = [] - # sub_relation = relation.values.first[:include] - # sub_relation_hash_list = tree_hash[relation.keys.first.to_s] - # sub_relation_hash_list.each do |sub_relation_hash| - # sub_relations << create_relation(relation, sub_relation_hash[relation.to_s]) - # end - # relation_hash.update_attribute(sub_relation, sub_relations) - # end - # relation_hash ||= create_relation(relation, tree_hash[relation.to_s]) - # project.update_attribute(relation, relation_hash) + # FIXME + # next if tree_hash[relation.to_s].blank? end end @@ -68,14 +52,11 @@ module Projects end def create_sub_relations(relation, tree_hash) - # TODO refactor this - relation_key = relation.keys.first - tree_hash[relation_key.to_s].each do |relation_item| + tree_hash[relation.keys.first.to_s].each do |relation_item| relation.values.flatten.each do |sub_relation| relation_hash = relation_item[sub_relation.to_s] next if relation_hash.blank? - sub_relation_object = Projects::ImportExport::RelationFactory.create( - relation_sym: sub_relation, relation_hash: relation_hash.merge!('project_id' => project.id), members_map: members_map) + sub_relation_object = relation_from_factory(relation, relation_hash) relation_item[sub_relation.to_s] = sub_relation_object end end @@ -83,10 +64,14 @@ module Projects def create_relation(relation, relation_hash_list) [relation_hash_list].flatten.map do |relation_hash| - Projects::ImportExport::RelationFactory.create( - relation_sym: relation, relation_hash: relation_hash.merge('project_id' => project.id), members_map: members_map) + relation_from_factory(relation, relation_hash) end end + + def relation_from_factory(relation, relation_hash) + Projects::ImportExport::RelationFactory.create( + relation_sym: relation, relation_hash: relation_hash.merge('project_id' => project.id), members_map: members_map) + end end end end diff --git a/app/services/projects/import_export/relation_factory.rb b/app/services/projects/import_export/relation_factory.rb index 0eb7a03b6e95d81fc7c26b405d2d42b844279587..31d812036456f9f0e0185c313661a4d57ea432f1 100644 --- a/app/services/projects/import_export/relation_factory.rb +++ b/app/services/projects/import_export/relation_factory.rb @@ -7,16 +7,13 @@ module Projects USER_REFERENCES = %w(author_id assignee_id updated_by_id).freeze def create(relation_sym:, relation_hash:, members_map:) - #TODO refactor this relation_sym = parse_relation_sym(relation_sym) - klass = relation_class(relation_sym) - relation_hash.delete('id') #screw IDs for now - relation_hash.delete('project_id') unless klass.column_names.include?(:project_id) + klass = parse_relation(relation_hash, relation_sym) + handle_merge_requests(relation_hash) if relation_sym == :merge_requests update_user_references(relation_hash, members_map) - imported_object = klass.new(relation_hash) - imported_object.importing = true if imported_object.respond_to?(:importing) - imported_object + + imported_object(klass, relation_hash) end private @@ -42,6 +39,19 @@ module Projects def parse_relation_sym(relation_sym) OVERRIDES[relation_sym] || relation_sym end + + def imported_object(klass, relation_hash) + imported_object = klass.new(relation_hash) + imported_object.importing = true if imported_object.respond_to?(:importing) + imported_object + end + + def parse_relation(relation_hash, relation_sym) + klass = relation_class(relation_sym) + relation_hash.delete('id') #screw IDs for now + relation_hash.delete('project_id') unless klass.column_names.include?(:project_id) + klass + end end end end