From febff153cc850ef662301dd2a6b19df91186477f Mon Sep 17 00:00:00 2001 From: James Lopez Date: Thu, 10 Mar 2016 18:43:57 +0100 Subject: [PATCH] started mapping members --- .../projects/import_export/members_mapper.rb | 18 +++++++++ .../projects/import_export/project_factory.rb | 2 +- .../import_export/project_tree_restorer.rb | 38 ++++++++++++------- fixtures/import_export/project.json | 2 +- 4 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 app/services/projects/import_export/members_mapper.rb diff --git a/app/services/projects/import_export/members_mapper.rb b/app/services/projects/import_export/members_mapper.rb new file mode 100644 index 0000000000..ebb50c30b8 --- /dev/null +++ b/app/services/projects/import_export/members_mapper.rb @@ -0,0 +1,18 @@ +module Projects + module ImportExport + class MembersMapper + + def self.map(*args) + new(*args).map + end + + def initialize(exported_members:) + @exported_members = exported_members + end + + def map + #TODO + end + end + end +end diff --git a/app/services/projects/import_export/project_factory.rb b/app/services/projects/import_export/project_factory.rb index 1ca0cfb867..2df38bff1f 100644 --- a/app/services/projects/import_export/project_factory.rb +++ b/app/services/projects/import_export/project_factory.rb @@ -3,7 +3,7 @@ module Projects module ProjectFactory extend self - def create(project_params:, user:) + def create(project_params:, user:, members:) project = Project.new(project_params.except('id')) project.creator = user check_namespace(project_params['namespace_id'], project, user) diff --git a/app/services/projects/import_export/project_tree_restorer.rb b/app/services/projects/import_export/project_tree_restorer.rb index 3ad42f4145..8785c80e24 100644 --- a/app/services/projects/import_export/project_tree_restorer.rb +++ b/app/services/projects/import_export/project_tree_restorer.rb @@ -8,32 +8,42 @@ module Projects @user = user end - #TODO deal with ID issues. - #TODO refactor this method def restore json = IO.read(@path) - tree_hash = ActiveSupport::JSON.decode(json) - project = create_project(tree_hash) - ImportExport.project_tree.each do |relation| - next if tree_hash[relation.to_s].empty? - relation_hash = create_relation(relation, tree_hash[relation.to_s], project.id) - project.update_attribute(relation, relation_hash) - end + @tree_hash = ActiveSupport::JSON.decode(json) + create_relations end private - def create_project(tree_hash) - project_params = tree_hash.reject { |_key, value| value.is_a?(Array) } - project = Projects::ImportExport::ProjectFactory.create(project_params: project_params, user: @user) + def members + @members ||= Projects::ImportExport::MembersMapper.map(exported_members: @tree_hash.delete('project_members')) + end + + def create_relations + (ImportExport.project_tree - [:project_members]).each do |relation| + next if @tree_hash[relation.to_s].empty? + relation_hash = create_relation(relation, @tree_hash[relation.to_s]) + project.update_attribute(relation, relation_hash) + end + end + + def project + @project ||= create_project + end + + def create_project + project_params = @tree_hash.reject { |_key, value| value.is_a?(Array) } + project = Projects::ImportExport::ProjectFactory.create( + project_params: project_params, user: @user, members: members) project.save project end - def create_relation(relation, relation_hash_list, project_id) + 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.merge(project_id: project_id)) + relation_sym: relation, relation_hash: relation_hash.merge(project_id: project.id), members: members) end end end diff --git a/fixtures/import_export/project.json b/fixtures/import_export/project.json index 8ea17e4d99..fe8bb17e6c 100644 --- a/fixtures/import_export/project.json +++ b/fixtures/import_export/project.json @@ -1 +1 @@ -{"id":14,"name":"searchable_project","path":"gitlabhq","description":null,"issues_enabled":true,"wall_enabled":false,"merge_requests_enabled":true,"wiki_enabled":true,"snippets_enabled":true,"visibility_level":20,"archived":false,"issues":[{"id":2,"title":"Eos ut accusamus provident quis qui.","assignee_id":19,"author_id":20,"project_id":14,"created_at":"2016-03-09T11:41:00.754Z","updated_at":"2016-03-09T11:41:05.728Z","position":0,"branch_name":null,"description":null,"milestone_id":null,"state":"opened","iid":1,"updated_by_id":null}],"merge_requests":[{"id":2,"target_branch":"feature","source_branch":"master","source_project_id":9,"author_id":23,"assignee_id":null,"title":"Eos dolores molestias eum magni ut consequatur deleniti distinctio.","created_at":"2016-03-09T11:41:01.820Z","updated_at":"2016-03-09T11:41:01.820Z","milestone_id":null,"state":"opened","merge_status":"can_be_merged","target_project_id":14,"iid":1,"description":null,"position":0,"locked_at":null,"updated_by_id":null,"merge_error":null,"merge_params":{},"merge_when_build_succeeds":false,"merge_user_id":null,"merge_commit_sha":null}],"labels":[{"id":2,"title":"Bug","color":"#990000","project_id":14,"created_at":"2016-03-09T11:41:02.959Z","updated_at":"2016-03-09T11:41:05.750Z","template":false,"description":null}],"milestones":[{"id":2,"title":"Milestone v1.2","project_id":14,"description":null,"due_date":null,"created_at":"2016-03-09T11:41:05.846Z","updated_at":"2016-03-09T11:41:05.846Z","state":"active","iid":1}],"snippets":[{"id":2,"title":"Unde adipisci molestiae modi quisquam qui itaque ut aut.","content":"Temporibus qui nisi ipsam maiores voluptatum.","author_id":30,"project_id":14,"created_at":"2016-03-09T11:41:03.720Z","updated_at":"2016-03-09T11:41:05.763Z","file_name":"sarah","expires_at":null,"visibility_level":0}],"releases":[{"id":2,"tag":"v1.1.0","description":"Awesome release","project_id":14,"created_at":"2016-03-09T11:41:04.342Z","updated_at":"2016-03-09T11:41:05.776Z"}],"events":[{"id":2,"target_type":null,"target_id":null,"title":null,"data":null,"project_id":14,"created_at":"2016-03-09T11:41:05.998Z","updated_at":"2016-03-09T11:41:05.998Z","action":8,"author_id":19}],"commit_statuses":[{"id":2,"project_id":null,"status":"success","finished_at":"2016-01-26T07:23:42.000Z","trace":null,"created_at":"2016-03-09T11:41:05.011Z","updated_at":"2016-03-09T11:41:05.801Z","started_at":"2016-01-26T07:21:42.000Z","runner_id":null,"coverage":null,"commit_id":2,"commands":null,"job_id":null,"name":"default","deploy":false,"options":null,"allow_failure":false,"stage":null,"trigger_request_id":null,"stage_idx":null,"tag":null,"ref":null,"user_id":null,"target_url":null,"description":"commit status","artifacts_file":null,"gl_project_id":14,"artifacts_metadata":null,"erased_by_id":null,"erased_at":null}]} \ No newline at end of file +{"name":"searchable_project","path":"gitlabhq","description":null,"issues_enabled":true,"wall_enabled":false,"merge_requests_enabled":true,"wiki_enabled":true,"snippets_enabled":true,"visibility_level":20,"archived":false,"issues":[{"id":2,"title":"Culpa dolores et nostrum magni quo.","assignee_id":19,"author_id":20,"project_id":14,"created_at":"2016-03-10T15:54:30.960Z","updated_at":"2016-03-10T15:54:36.624Z","position":0,"branch_name":null,"description":null,"milestone_id":null,"state":"opened","iid":1,"updated_by_id":null}],"merge_requests":[{"id":2,"target_branch":"feature","source_branch":"master","source_project_id":9,"author_id":23,"assignee_id":null,"title":"Distinctio voluptas qui suscipit asperiores.","created_at":"2016-03-10T15:54:31.921Z","updated_at":"2016-03-10T15:54:31.921Z","milestone_id":null,"state":"opened","merge_status":"can_be_merged","target_project_id":14,"iid":1,"description":null,"position":0,"locked_at":null,"updated_by_id":null,"merge_error":null,"merge_params":{},"merge_when_build_succeeds":false,"merge_user_id":null,"merge_commit_sha":null}],"labels":[{"id":2,"title":"Bug","color":"#990000","project_id":14,"created_at":"2016-03-10T15:54:33.128Z","updated_at":"2016-03-10T15:54:36.645Z","template":false,"description":null}],"milestones":[{"id":2,"title":"Milestone v1.2","project_id":14,"description":null,"due_date":null,"created_at":"2016-03-10T15:54:36.756Z","updated_at":"2016-03-10T15:54:36.756Z","state":"active","iid":1}],"snippets":[{"id":2,"title":"In voluptatibus possimus fugiat qui.","content":"Qui exercitationem culpa in dolore ab.","author_id":30,"project_id":14,"created_at":"2016-03-10T15:54:34.253Z","updated_at":"2016-03-10T15:54:36.658Z","file_name":"patrick","expires_at":null,"visibility_level":0}],"releases":[{"id":2,"tag":"v1.1.0","description":"Awesome release","project_id":14,"created_at":"2016-03-10T15:54:35.211Z","updated_at":"2016-03-10T15:54:36.671Z"}],"events":[{"id":2,"target_type":null,"target_id":null,"title":null,"data":null,"project_id":14,"created_at":"2016-03-10T15:54:36.906Z","updated_at":"2016-03-10T15:54:36.906Z","action":8,"author_id":19}],"commit_statuses":[{"id":2,"project_id":null,"status":"success","finished_at":"2016-01-26T07:23:42.000Z","trace":null,"created_at":"2016-03-10T15:54:35.937Z","updated_at":"2016-03-10T15:54:36.699Z","started_at":"2016-01-26T07:21:42.000Z","runner_id":null,"coverage":null,"commit_id":2,"commands":null,"job_id":null,"name":"default","deploy":false,"options":null,"allow_failure":false,"stage":null,"trigger_request_id":null,"stage_idx":null,"tag":null,"ref":null,"user_id":null,"target_url":null,"description":"commit status","artifacts_file":null,"gl_project_id":14,"artifacts_metadata":null,"erased_by_id":null,"erased_at":null}]} \ No newline at end of file