Commit f0ce83b1 authored by James Lopez's avatar James Lopez

modify model creation to use services when they are available

parent 2cc6aaec
......@@ -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
......@@ -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
......
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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment