From daba13cbe34a74870343cd49e2ca8e16cf0b7316 Mon Sep 17 00:00:00 2001 From: loiswells97 Date: Thu, 10 Nov 2022 09:23:47 +0000 Subject: [PATCH 1/8] Create draft PR for #82 From 82abe0e130539b5c3e93c6f1ef07a273257510e2 Mon Sep 17 00:00:00 2001 From: Lois Wells Date: Thu, 10 Nov 2022 09:36:15 +0000 Subject: [PATCH 2/8] fixing project create operation --- app/concepts/project/operation/create.rb | 8 +++++++- app/controllers/api/projects_controller.rb | 6 ++++-- spec/concepts/project/operation/create_spec.rb | 8 +++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/concepts/project/operation/create.rb b/app/concepts/project/operation/create.rb index 2bd6c3e3c..38e45ed18 100644 --- a/app/concepts/project/operation/create.rb +++ b/app/concepts/project/operation/create.rb @@ -23,15 +23,21 @@ def call(user_id:, params:) response = OperationResponse.new project = DEFAULT_PROJECT.merge( - params.deep_transform_keys do |key| + params.to_hash.deep_transform_keys do |key| key.to_sym rescue StandardError key end ) + new_project = Project.new(project_type: project[:type], user_id: user_id, name: project[:name]) new_project.components.build(project[:components]) + puts('attaching images') + project[:image_list].each do |image| + new_project.images.attach(image.blob) + end + response[:project] = new_project response[:project].save! response diff --git a/app/controllers/api/projects_controller.rb b/app/controllers/api/projects_controller.rb index 76799e48d..c2dccef33 100644 --- a/app/controllers/api/projects_controller.rb +++ b/app/controllers/api/projects_controller.rb @@ -17,6 +17,8 @@ def show end def create + + puts project_params result = Project::Operation::Create.call(params: project_params, user_id: current_user) if result.success? @@ -53,8 +55,8 @@ def load_projects end def project_params - params.permit(project: [:name, :type, :image_list, - { components: %i[id name extension content index default] }]).fetch(:project, {}) + params.permit(project: [:name, :project_type, :image_list => [], + components: %i[id name extension content index default] ]).fetch(:project, {}) end end end diff --git a/spec/concepts/project/operation/create_spec.rb b/spec/concepts/project/operation/create_spec.rb index 72e10a211..f6d0865de 100644 --- a/spec/concepts/project/operation/create_spec.rb +++ b/spec/concepts/project/operation/create_spec.rb @@ -6,13 +6,15 @@ subject(:create_project) { described_class.call(user_id: user_id, params: project_params) } let(:user_id) { 'e0675b6c-dc48-4cd6-8c04-0f7ac05af51a' } - let(:project_params) { {} } before do mock_phrase_generation + ActionController::Parameters.permit_all_parameters = true end describe '.call' do + let(:project_params) { ActionController::Parameters.new({}) } + it 'returns success' do expect(create_project.success?).to be(true) end @@ -42,7 +44,7 @@ subject(:create_project_with_content) { described_class.call(user_id: user_id, params: project_params) } let(:project_params) do - { + ActionController::Parameters.new({ type: 'python', components: [ { @@ -53,7 +55,7 @@ default: true } ] - } + }) end it 'returns success' do From fd152977f4cecc4e969606badc50082a8be4e87f Mon Sep 17 00:00:00 2001 From: Lois Wells Date: Thu, 10 Nov 2022 09:54:13 +0000 Subject: [PATCH 3/8] rubocop fixes --- app/concepts/project/operation/create.rb | 25 +++++++++++-------- app/controllers/api/projects_controller.rb | 7 +++--- .../concepts/project/operation/create_spec.rb | 22 ++++++++-------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/app/concepts/project/operation/create.rb b/app/concepts/project/operation/create.rb index 38e45ed18..e8086c75d 100644 --- a/app/concepts/project/operation/create.rb +++ b/app/concepts/project/operation/create.rb @@ -22,7 +22,7 @@ class << self def call(user_id:, params:) response = OperationResponse.new - project = DEFAULT_PROJECT.merge( + project_hash = DEFAULT_PROJECT.merge( params.to_hash.deep_transform_keys do |key| key.to_sym rescue StandardError @@ -30,15 +30,7 @@ def call(user_id:, params:) end ) - new_project = Project.new(project_type: project[:type], user_id: user_id, name: project[:name]) - new_project.components.build(project[:components]) - - puts('attaching images') - project[:image_list].each do |image| - new_project.images.attach(image.blob) - end - - response[:project] = new_project + response[:project] = build_project(project_hash, user_id) response[:project].save! response rescue StandardError => e @@ -46,6 +38,19 @@ def call(user_id:, params:) response[:error] = 'Error creating project' response end + + private + + def build_project(project_hash, user_id) + new_project = Project.new(project_type: project_hash[:type], user_id: user_id, name: project_hash[:name]) + new_project.components.build(project_hash[:components]) + + project_hash[:image_list].each do |image| + new_project.images.attach(image.blob) + end + + new_project + end end end end diff --git a/app/controllers/api/projects_controller.rb b/app/controllers/api/projects_controller.rb index c2dccef33..29e20e812 100644 --- a/app/controllers/api/projects_controller.rb +++ b/app/controllers/api/projects_controller.rb @@ -17,8 +17,6 @@ def show end def create - - puts project_params result = Project::Operation::Create.call(params: project_params, user_id: current_user) if result.success? @@ -55,8 +53,9 @@ def load_projects end def project_params - params.permit(project: [:name, :project_type, :image_list => [], - components: %i[id name extension content index default] ]).fetch(:project, {}) + params.permit(project: [:name, :project_type, { image_list: [], + components: %i[id name extension content index + default] }]).fetch(:project, {}) end end end diff --git a/spec/concepts/project/operation/create_spec.rb b/spec/concepts/project/operation/create_spec.rb index f6d0865de..4edc260be 100644 --- a/spec/concepts/project/operation/create_spec.rb +++ b/spec/concepts/project/operation/create_spec.rb @@ -45,17 +45,17 @@ let(:project_params) do ActionController::Parameters.new({ - type: 'python', - components: [ - { - name: 'main', - extension: 'py', - content: 'print("hello world")', - index: 0, - default: true - } - ] - }) + type: 'python', + components: [ + { + name: 'main', + extension: 'py', + content: 'print("hello world")', + index: 0, + default: true + } + ] + }) end it 'returns success' do From 8190de83874ecbead953787650bebc357990bcfb Mon Sep 17 00:00:00 2001 From: Steve Gilroy Date: Thu, 10 Nov 2022 14:21:01 +0000 Subject: [PATCH 4/8] Update projects_controller.rb Some formatting changes --- app/controllers/api/projects_controller.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/projects_controller.rb b/app/controllers/api/projects_controller.rb index 29e20e812..e083d222f 100644 --- a/app/controllers/api/projects_controller.rb +++ b/app/controllers/api/projects_controller.rb @@ -53,9 +53,14 @@ def load_projects end def project_params - params.permit(project: [:name, :project_type, { image_list: [], - components: %i[id name extension content index - default] }]).fetch(:project, {}) + params.permit(project: [ + :name, + :project_type, + { + image_list: [], + components: %i[id name extension content index default] + } + ]).fetch(:project, {}) end end end From c846ddfd1b1a52fe5babb791cc19c33e8e7cce79 Mon Sep 17 00:00:00 2001 From: Steve Gilroy Date: Thu, 10 Nov 2022 14:25:57 +0000 Subject: [PATCH 5/8] Update create_spec.rb more formatting --- .../concepts/project/operation/create_spec.rb | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/spec/concepts/project/operation/create_spec.rb b/spec/concepts/project/operation/create_spec.rb index 4edc260be..068091954 100644 --- a/spec/concepts/project/operation/create_spec.rb +++ b/spec/concepts/project/operation/create_spec.rb @@ -45,17 +45,15 @@ let(:project_params) do ActionController::Parameters.new({ - type: 'python', - components: [ - { - name: 'main', - extension: 'py', - content: 'print("hello world")', - index: 0, - default: true - } - ] - }) + type: 'python', + components: [{ + name: 'main', + extension: 'py', + content: 'print("hello world")', + index: 0, + default: true + }] + }) end it 'returns success' do From 55a6caf690eb95d132098e1cfd3c1d9568185861 Mon Sep 17 00:00:00 2001 From: Steve Gilroy Date: Thu, 10 Nov 2022 14:47:38 +0000 Subject: [PATCH 6/8] Update projects_controller.rb Rubocop (I hate this rule's default) --- app/controllers/api/projects_controller.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/projects_controller.rb b/app/controllers/api/projects_controller.rb index e083d222f..db4e48199 100644 --- a/app/controllers/api/projects_controller.rb +++ b/app/controllers/api/projects_controller.rb @@ -54,13 +54,13 @@ def load_projects def project_params params.permit(project: [ - :name, - :project_type, - { - image_list: [], - components: %i[id name extension content index default] - } - ]).fetch(:project, {}) + :name, + :project_type, + { + image_list: [], + components: %i[id name extension content index default] + } + ]).fetch(:project, {}) end end end From 4884b3b75883cd0d923de9563aaa705177a4b300 Mon Sep 17 00:00:00 2001 From: Steve Gilroy Date: Thu, 10 Nov 2022 14:53:20 +0000 Subject: [PATCH 7/8] Update create_spec.rb Rubcop (I hate this rule's default) --- spec/concepts/project/operation/create_spec.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spec/concepts/project/operation/create_spec.rb b/spec/concepts/project/operation/create_spec.rb index 068091954..9d71b1337 100644 --- a/spec/concepts/project/operation/create_spec.rb +++ b/spec/concepts/project/operation/create_spec.rb @@ -45,15 +45,15 @@ let(:project_params) do ActionController::Parameters.new({ - type: 'python', - components: [{ - name: 'main', - extension: 'py', - content: 'print("hello world")', - index: 0, - default: true - }] - }) + type: 'python', + components: [{ + name: 'main', + extension: 'py', + content: 'print("hello world")', + index: 0, + default: true + }] + }) end it 'returns success' do From e45f3eac02d66e27b9747519461d78e973d070e1 Mon Sep 17 00:00:00 2001 From: Steve Gilroy Date: Thu, 10 Nov 2022 15:01:04 +0000 Subject: [PATCH 8/8] Update projects_controller.rb Rubocop, make your mind up --- app/controllers/api/projects_controller.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/projects_controller.rb b/app/controllers/api/projects_controller.rb index db4e48199..fe1877e15 100644 --- a/app/controllers/api/projects_controller.rb +++ b/app/controllers/api/projects_controller.rb @@ -54,13 +54,13 @@ def load_projects def project_params params.permit(project: [ - :name, - :project_type, - { - image_list: [], - components: %i[id name extension content index default] - } - ]).fetch(:project, {}) + :name, + :project_type, + { + image_list: [], + components: %i[id name extension content index default] + } + ]).fetch(:project, {}) end end end