Module: ASModel::RepositoryTransfers
- Defined in:
- backend/app/model/ASModel_transfers.rb
Overview
Code for moving records between repositories
Defined Under Namespace
Modules: ClassMethods
Class Method Summary (collapse)
Instance Method Summary (collapse)
Class Method Details
+ (Object) included(base)
5 6 7 |
# File 'backend/app/model/ASModel_transfers.rb', line 5 def self.included(base) base.extend(ClassMethods) end |
Instance Method Details
- (Object) transfer_to_repository(target_repository, transfer_group = [])
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'backend/app/model/ASModel_transfers.rb', line 10 def transfer_to_repository(target_repository, transfer_group = []) if self.class.columns.include?(:repo_id) old_uri = self.uri source_repository = Repository[self.repo_id] # Do the update in the cheapest way possible (bypassing save hooks, etc.) self.class.filter(:id => self.id).update(:repo_id => target_repository.id, :system_mtime => Time.now) # Mark the (now changed) URI as deleted if old_uri Tombstone.create(:uri => old_uri) DB.after_commit do RealtimeIndexing.record_delete(old_uri) end # Create an event if this is the top-level record being transferred. if transfer_group.empty? RequestContext.open(:repo_id => target_repository.id) do Event.for_repository_transfer(source_repository, target_repository, self) end end end end # Tell any nested records to transfer themselves too self.class.nested_records.each do |nested_record_defn| association = nested_record_defn[:association][:name] association_dataset = self.send("#{association}_dataset".intern) nested_model = Kernel.const_get(nested_record_defn[:association][:class_name]) association_dataset.select(Sequel.qualify(nested_model.table_name, :id)).all.each do |nested_record| nested_record.transfer_to_repository(target_repository, transfer_group + [self]) end end end |