Class: RepositoryManager::RepoFile
- Defined in:
- app/models/repository_manager/repo_file.rb
Instance Method Summary collapse
- #copy(options = {}) ⇒ Object
-
#copy!(options = {}) ⇒ Object
Copy itself into the source_folder options :source_folder = the folder in witch you copy this item :owner = the owner of the item :sender = the sender of the item (if you don’t specify sender.. The sender is still the same) :overwrite = overwrite an item with the same name (default : see config ‘auto_overwrite_item’).
-
#download(options = {}) ⇒ Object
Return the name of the file with his extension def name if self.name.blank? file.url.split(‘/’).last else self.name end end.
-
#download!(options = {}) ⇒ Object
Downloading this file.
-
#unzip!(options = {}) ⇒ Object
Unzip the compressed file and create the repo_items options :source_folder = the folder in witch you unzip this archive :owner = the owner of the item :sender = the sender of the item (if you don’t specify sender.. The sender is still the same) :overwrite = overwrite an item with the same name (default : see config ‘auto_overwrite_item’).
Methods inherited from RepoItem
#can_be_shared_without_nesting?, #is_file?, #is_folder?, #move, #move!, #name_exist_in_siblings?, #rename, #rename!
Instance Method Details
#copy(options = {}) ⇒ Object
71 72 73 74 75 76 77 |
# File 'app/models/repository_manager/repo_file.rb', line 71 def copy( = {}) begin copy!() rescue RepositoryManager::ItemExistException, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved false end end |
#copy!(options = {}) ⇒ Object
Copy itself into the source_folder options
:source_folder = the folder in witch you copy this item
:owner = the owner of the item
:sender = the sender of the item (if you don't specify sender.. The sender is still the same)
:overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'app/models/repository_manager/repo_file.rb', line 33 def copy!( = {}) !![:overwrite] == [:overwrite] ? overwrite = [:overwrite] : overwrite = RepositoryManager.auto_overwrite_item new_item = RepositoryManager::RepoFile.new new_item.file = File.open(self.file.current_path) new_item.name = self.name [:owner] ? new_item.owner = [:owner] : new_item.owner = self.owner [:sender] ? new_item.sender = [:sender] : new_item.sender = self.sender if [:source_folder] new_item = [:source_folder].add!(new_item, do_not_save: true, overwrite: overwrite ) elsif [:owner] repo_item_with_same_name = [:owner].get_item_in_root_by_name(new_item.name) if repo_item_with_same_name and !overwrite self.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.item_exist')) raise RepositoryManager::ItemExistException.new("copy failed. The repo_file '#{new_item.name}' already exist in root.") elsif repo_item_with_same_name and overwrite repo_item_with_same_name.file = new_item.file repo_item_with_same_name.sender = new_item.sender new_item = repo_item_with_same_name end else repo_item_with_same_name = self.owner.get_item_in_root_by_name(new_item.name) if repo_item_with_same_name and !overwrite self.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.item_exist')) raise RepositoryManager::ItemExistException.new("copy failed. The repo_file '#{new_item.name}' already exist in root.") elsif repo_item_with_same_name and overwrite repo_item_with_same_name.file = new_item.file repo_item_with_same_name.sender = new_item.sender new_item = repo_item_with_same_name end end new_item.save! new_item end |
#download(options = {}) ⇒ Object
Return the name of the file with his extension def name
if self.name.blank?
file.url.split('/').last
else
self.name
end
end
18 19 20 |
# File 'app/models/repository_manager/repo_file.rb', line 18 def download( = {}) self.download!() end |
#download!(options = {}) ⇒ Object
Downloading this file
23 24 25 |
# File 'app/models/repository_manager/repo_file.rb', line 23 def download!( = {}) file.path end |
#unzip!(options = {}) ⇒ Object
Unzip the compressed file and create the repo_items options
:source_folder = the folder in witch you unzip this archive
:owner = the owner of the item
:sender = the sender of the item (if you don't specify sender.. The sender is still the same)
:overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'app/models/repository_manager/repo_file.rb', line 85 def unzip!( = {}) !![:overwrite] == [:overwrite] ? overwrite = [:overwrite] : overwrite = RepositoryManager.auto_overwrite_item [:owner] ? owner = [:owner] : owner = self.owner [:sender] ? sender = [:sender] : sender = self.sender Zip::File.open(self.file.path) do |zip_file| # This hash make the link between the path and the item (if it exist) #link_path_item = {} # Handle entries one by one zip_file.each do |entry| array_name = entry.name.split('/') name = array_name[-1] path_array = array_name.first(array_name.size - 1) #name.parameterize.underscore #it is a folder if entry.ftype == :directory new_item = RepositoryManager::RepoFolder.new(name: name) new_item.owner = owner new_item.sender = sender if path_array.empty? new_item.move!(source_folder: [:source_folder], owner: owner, sender: sender, overwrite: overwrite) else # He specified a source_folder if [:source_folder] source_folder = [:source_folder].get_or_create_by_path_array(path_array, owner: owner, sender: sender) else # No source folder specified # We have to check if we are in a folder parent = self.parent if parent # we unzip on this folder source_folder = parent.get_or_create_by_path_array(path_array, owner: owner, sender: sender) else # We are in root source_folder = owner.get_or_create_by_path_array(path_array, sender: sender) end end new_item.move!(source_folder: source_folder, owner: owner, sender: sender, overwrite: overwrite) end else # it is a :file new_item = RepositoryManager::RepoFile.new new_item.name = name new_item.sender = sender new_item.owner = owner tmp_file_path = File.join(Rails.root, 'tmp', 'unzip', name) # Delete the path FileUtils.rm_rf(tmp_file_path) entry.extract(tmp_file_path) new_item.file = File.open(tmp_file_path) if path_array.empty? new_item.move!(source_folder: [:source_folder], owner: owner, sender: sender, overwrite: overwrite) else # He specified a source_folder if [:source_folder] source_folder = [:source_folder].get_or_create_by_path_array(path_array, owner: owner, sender: sender) else # No source folder specified # We have to check if we are in a folder parent = self.parent if parent # we unzip on this folder source_folder = parent.get_or_create_by_path_array(path_array, owner: owner, sender: sender) else # We are in root source_folder = owner.get_or_create_by_path_array(path_array, owner: owner, sender: sender) end end new_item.move!(source_folder: source_folder, owner: owner, sender: sender, overwrite: overwrite) end end end end self end |