mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-01-08 00:23:01 +08:00
2ab31aba2f
Copy repository functionality [SCI-1270]
44 lines
1.3 KiB
Ruby
44 lines
1.3 KiB
Ruby
class Repository < ActiveRecord::Base
|
|
belongs_to :team
|
|
belongs_to :created_by, foreign_key: :created_by_id, class_name: 'User'
|
|
has_many :repository_columns
|
|
has_many :repository_rows
|
|
has_many :repository_table_states,
|
|
inverse_of: :repository, dependent: :destroy
|
|
has_many :report_elements, inverse_of: :repository, dependent: :destroy
|
|
|
|
auto_strip_attributes :name, nullify: false
|
|
validates :name,
|
|
presence: true,
|
|
uniqueness: { scope: :team, case_sensitive: false },
|
|
length: { maximum: Constants::NAME_MAX_LENGTH }
|
|
validates :team, presence: true
|
|
validates :created_by, presence: true
|
|
|
|
def copy(created_by, name)
|
|
new_repo = nil
|
|
|
|
begin
|
|
Repository.transaction do
|
|
# Clone the repository object
|
|
new_repo = dup
|
|
new_repo.created_by = created_by
|
|
new_repo.name = name
|
|
new_repo.save!
|
|
|
|
# Clone columns (only if new_repo was saved)
|
|
repository_columns.find_each do |col|
|
|
new_col = col.dup
|
|
new_col.repository = new_repo
|
|
new_col.created_by = created_by
|
|
new_col.save!
|
|
end
|
|
end
|
|
rescue ActiveRecord::RecordInvalid
|
|
return false
|
|
end
|
|
|
|
# If everything is okay, return new_repo
|
|
new_repo
|
|
end
|
|
end
|