changes per @duco 's request

This commit is contained in:
zmagod 2018-04-13 11:47:33 +02:00
parent cebb06269b
commit 4f21833373
4 changed files with 30 additions and 40 deletions

View file

@ -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',

View file

@ -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,

View file

@ -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

View file

@ -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