Skip to content
Snippets Groups Projects
Commit f0ce83b1 authored by James Lopez's avatar James Lopez
Browse files

modify model creation to use services when they are available

parent 2cc6aaec
No related branches found
No related tags found
2 merge requests!3142Project import functionality,!3114Export project functionality
Pipeline #
Loading
Loading
@@ -14,12 +14,12 @@ module Projects
json = IO.read(@path)
tree_hash = ActiveSupport::JSON.decode(json)
relation_hash = {}
project_params = tree_hash.reject { |_key, value | value.is_a?(Array)}
@project = ::Projects::CreateService.new(@user, project_params.except('id')).execute
ImportExport.project_tree.each do |relation|
next if tree_hash[relation.to_s].empty?
relation_hash[relation.to_s] = create_relation(relation, tree_hash[relation.to_s])
end
project_params = tree_hash.delete_if { |_key, value | value.is_a?(Array)}
@project = ::Projects::CreateService.new(@user, project_params).execute
@project.saved?
end
 
Loading
Loading
@@ -28,7 +28,7 @@ module Projects
def create_relation(relation, relation_hash_list)
relation_hash_list.map do |relation_hash|
Projects::ImportExport::RelationFactory.create(
relation_sym: relation, relation_hash: relation_hash)
relation_sym: relation, relation_hash: relation_hash, project: @project, user: @user)
end
end
end
Loading
Loading
module Projects
module ImportExport
module RelationFactory
extend self
class RelationFactory
 
OVERRIDES = { snippets: :project_snippets }
 
def create(relation_sym:, relation_hash:)
relation_sym = parse_relation_sym(relation_sym)
klass = relation_class(relation_sym)
relation_hash.delete('id') #screw IDs for now
klass.new(relation_hash)
def self.create(*args)
new(*args).create
end
def initialize(relation_sym:, relation_hash:, project:, user:)
@relation_sym = parsed_relation_sym(relation_sym)
@relation_hash = relation_hash
@project = project
@user = user
end
def create
@relation_hash.delete('id')
init_service_or_class
end
 
private
 
def relation_class(relation_sym)
relation_sym.to_s.classify.constantize
def init_service_or_class
# Attempt service first
relation_service.new(@project, @user, @relation_hash).execute
rescue NameError
relation_class.new(@relation_hash)
end
def relation_service
"#{@relation_sym.to_s.classify}::CreateService".constantize
end
def relation_class
@relation_sym.to_s.classify.constantize
end
 
def parse_relation_sym(relation_sym)
def parsed_relation_sym(relation_sym)
OVERRIDES[relation_sym] || relation_sym
end
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment