mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-02-27 01:05:21 +08:00
changes per @duco 's request
This commit is contained in:
parent
cebb06269b
commit
4f21833373
4 changed files with 30 additions and 40 deletions
|
@ -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',
|
||||
|
|
|
@ -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,
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in a new issue