diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index b02d96545..4a0827638 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -279,9 +279,9 @@ class RepositoryRowsController < ApplicationController end def copy_records - duplicate_service = RepositoryActions::Duplicate.new(current_user, - @repository, - params[:selected_rows]) + duplicate_service = RepositoryActions::DuplicateRows.new( + current_user, @repository, params[:selected_rows] + ) duplicate_service.call render json: { flash: t('repositories.copy_records_report', diff --git a/app/services/repository_actions/repository_cell_resolver.rb b/app/services/repository_actions/duplicate_cell.rb similarity index 83% rename from app/services/repository_actions/repository_cell_resolver.rb rename to app/services/repository_actions/duplicate_cell.rb index 334648b1a..ff3c2937d 100644 --- a/app/services/repository_actions/repository_cell_resolver.rb +++ b/app/services/repository_actions/duplicate_cell.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module RepositoryActions - class RepositoryCellResolver + class DuplicateCell def initialize(cell, new_row, team) @cell = cell @new_row = new_row @@ -9,21 +9,12 @@ module RepositoryActions end def call - case @cell.value_type - when 'RepositoryListValue' - clone_repository_list_value - when 'RepositoryTextValue' - clone_repository_text_value - when 'RepositoryAssetValue' - clone_repository_asset_value - when 'RepositoryDateValue' - clone_repository_date_value - end + self.send("duplicate_#{@cell.value_type.underscore}") end private - def clone_repository_list_value + def duplicate_repository_list_value old_value = @cell.value RepositoryListValue.create( old_value.attributes.merge(id: nil, @@ -34,7 +25,7 @@ module RepositoryActions ) end - def clone_repository_text_value + def duplicate_repository_text_value old_value = @cell.value RepositoryTextValue.create( old_value.attributes.merge(id: nil, @@ -45,7 +36,7 @@ module RepositoryActions ) end - def clone_repository_asset_value + def duplicate_repository_asset_value old_value = @cell.value new_asset = create_new_asset(old_value.asset) RepositoryAssetValue.create( @@ -60,7 +51,7 @@ module RepositoryActions ) end - def clone_repository_date_value + def duplicate_repository_date_value old_value = @cell.value RepositoryDateValue.create( old_value.attributes.merge(id: nil, diff --git a/app/services/repository_actions/duplicate.rb b/app/services/repository_actions/duplicate_rows.rb similarity index 50% rename from app/services/repository_actions/duplicate.rb rename to app/services/repository_actions/duplicate_rows.rb index c4f2ac102..d0af22bb4 100644 --- a/app/services/repository_actions/duplicate.rb +++ b/app/services/repository_actions/duplicate_rows.rb @@ -1,32 +1,31 @@ # frozen_string_literal: true -require 'repository_actions/repository_cell_resolver' +require 'repository_actions/duplicate_cell' module RepositoryActions - class Duplicate + class DuplicateRows attr_reader :number_of_duplicated_items - def initialize(user, repository, rows_to_copy = []) + def initialize(user, repository, rows_ids = []) @user = user @repository = repository - @rows_to_copy = rows_to_copy.map(&:to_i).uniq + @rows_to_duplicate = sanitize_rows_to_duplicate(rows_ids) @number_of_duplicated_items = 0 end def call - sanitize_rows_to_copy - @rows_to_copy.each do |row_id| - copy_row(row_id) + @rows_to_duplicate.each do |row_id| + duplicate_row(row_id) end end private - def sanitize_rows_to_copy - ids = @repository.repository_rows.pluck(:id) - @rows_to_copy.map! { |el| ids.include?(el) ? el : nil }.compact! + def sanitize_rows_to_duplicate(rows_ids) + process_ids = rows_ids.map(&:to_i).uniq + @repository.repository_rows.where(id: process_ids).pluck(:id) end - def copy_row(id) + def duplicate_row(id) row = RepositoryRow.find_by_id(id) new_row = RepositoryRow.new( row.attributes.merge(new_row_attributes(row.name)) @@ -35,7 +34,7 @@ module RepositoryActions if new_row.save @number_of_duplicated_items += 1 row.repository_cells.each do |cell| - copy_repository_cell(cell, new_row) + duplicate_repository_cell(cell, new_row) end end end @@ -48,10 +47,10 @@ module RepositoryActions updated_at: timestamp } end - def copy_repository_cell(cell, new_row) - RepositoryActions::RepositoryCellResolver.new(cell, - new_row, - @user.current_team).call + def duplicate_repository_cell(cell, new_row) + RepositoryActions::DuplicateCell.new( + cell, new_row, @user.current_team + ).call end end end diff --git a/spec/services/repository_actions/duplicate_spec.rb b/spec/services/repository_actions/duplicate_rows_spec.rb similarity index 89% rename from spec/services/repository_actions/duplicate_spec.rb rename to spec/services/repository_actions/duplicate_rows_spec.rb index e323310be..2dc3b2cd0 100644 --- a/spec/services/repository_actions/duplicate_spec.rb +++ b/spec/services/repository_actions/duplicate_rows_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -describe RepositoryActions::Duplicate do +describe RepositoryActions::DuplicateRows do let!(:user) { create :user } let!(:repository) { create :repository } let!(:list_column) do @@ -41,13 +41,13 @@ describe RepositoryActions::Duplicate do end end - it 'generates a copy of selected items' do + it 'generates a duplicate of selected items' do expect(repository.repository_rows.reload.size).to eq 3 described_class.new(user, repository, @rows_ids).call expect(repository.repository_rows.reload.size).to eq 6 end - it 'generates an exact copy of the row with custom column values' do + it 'generates an exact duplicate of the row with custom column values' do described_class.new(user, repository, [@rows_ids.first]).call duplicated_row = repository.repository_rows.order('created_at ASC').last expect(duplicated_row.name).to eq 'row (0) (1)' @@ -60,7 +60,7 @@ describe RepositoryActions::Duplicate do end end - it 'prevents to copy items that do not already belong to repository' do + it 'prevents to duplicate items that do not already belong to repository' do new_repository = create :repository, name: 'new repo' new_row = create :repository_row, name: 'other row', repository: new_repository @@ -68,13 +68,13 @@ describe RepositoryActions::Duplicate do expect(repository.repository_rows.reload.size).to eq 3 end - it 'returns the number of copied items' do + it 'returns the number of duplicated items' do service_obj = described_class.new(user, repository, @rows_ids) service_obj.call expect(service_obj.number_of_duplicated_items).to eq 3 end - it 'returns the number of copied items' do + it 'returns the number of duplicated items' do service_obj = described_class.new(user, repository, []) service_obj.call expect(service_obj.number_of_duplicated_items).to eq 0