repository-manager 0.2.1 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1e5f978c5051186f41883c8c77158e6158828be
4
- data.tar.gz: 52a66c07f18e1d37ed4a4d457835b1ae0de9d140
3
+ metadata.gz: dbf60a439b0b337f819cdc38e21b42351783a93f
4
+ data.tar.gz: e366f2254bbb226188a71f07f0457139aac5641a
5
5
  SHA512:
6
- metadata.gz: a7bcfa49b4121c96410a4fc5b0456735b7776e61086b00c8ab07f16ae5cd75b014a8fa1ace5eda185b77543f297f3a3366a38adfd17caa69c695a2fab59f9d2b
7
- data.tar.gz: 3abbdfc0675b21a40a6d30f4b9f158599780db73082cebfd874d3a25b407ec12f409fae62afa6e544d6b4918e477b01b1c33cd2283279443047c66133a209ad1
6
+ metadata.gz: 46e363948f796a7f6830bf0a13d38e54a525a0484d3f3036597d14f55ac9f2dbc1923b28677364707d9e43298a857eb13da88fb6809b5661218f825c178b3190
7
+ data.tar.gz: 81cf606e9e4a4624fd484da3838396fb166a0af557db84575bb805747e2e33ecc84ae8f59b4b4e58d40ff767bf5eef49cc11277746aa825ead2a5f382a8bbbe5
data/README.md CHANGED
@@ -55,18 +55,25 @@ RepositoryManager.setup do |config|
55
55
  # Default path for generating the zip file when a user want to download a folder
56
56
  # Default is : "download/#{member.class.to_s.underscore}/#{member.id}/#{self.class.to_s.underscore}/#{self.id}/"
57
57
  #config.default_zip_path = true
58
+
59
+ # Define if we enable or not the versioning on the repo_item
60
+ config.has_paper_trail = false
58
61
  end
59
62
  ```
60
63
 
61
- For instance, if you want that a default sharing is totally free (for edit, delete, etc), just put all default parameters to `true` :
64
+ For instance, if you want that a default sharing is totally free (for edit, delete, etc), just put all default parameters to `true`. We want that paper_trail is activate:
62
65
 
63
66
  ```ruby
64
67
  RepositoryManager.setup do |config|
65
68
  config.default_repo_item_permissions = { can_read: true, can_create: true, can_update: true, can_delete: true, can_share: true }
66
69
  config.default_sharing_permissions = { can_add: true, can_remove: true }
70
+ config.has_paper_trail = true
67
71
  end
68
72
  ```
69
73
 
74
+ NOTE : If you want to add paper_trail to the repo_item model. You first have to install PaperTrail in you project.
75
+ More informations on the [documentation of the PaperTrail gem](https://github.com/airblade/paper_trail)
76
+
70
77
 
71
78
  See the chapter [Permissions](#permissions) for more details about the permissions.
72
79
 
@@ -522,6 +529,9 @@ end
522
529
  # repo_item.errors ==> Contains the errors
523
530
  ```
524
531
 
532
+ ## Documentation
533
+
534
+ For more documentation go on the [Repository Manager Doc](http://rubydoc.info/gems/repository-manager/index).
525
535
 
526
536
  ## TODO
527
537
 
@@ -1,5 +1,5 @@
1
1
  class RepositoryManager::RepoFile < RepositoryManager::RepoItem
2
- attr_accessible :file, :content_type, :file_size if RepositoryManager.protected_attributes?
2
+ attr_accessible :file, :content_type, :file_size, :checksum if RepositoryManager.protected_attributes?
3
3
 
4
4
  validates_presence_of :file
5
5
  mount_uploader :file, RepoFileUploader
@@ -29,24 +29,39 @@ class RepositoryManager::RepoFile < RepositoryManager::RepoItem
29
29
  # :source_folder = the folder in witch you copy this item
30
30
  # :owner = the owner of the item
31
31
  # :sender = the sender of the item (if you don't specify sender.. The sender is still the same)
32
+ # :overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
32
33
  def copy!(options = {})
34
+ !!options[:overwrite] == options[:overwrite] ? overwrite = options[:overwrite] : overwrite = RepositoryManager.auto_overwrite_item
35
+
33
36
  new_item = RepositoryManager::RepoFile.new
34
37
  new_item.file = File.open(self.file.current_path)
35
-
36
- if options[:source_folder]
37
- options[:source_folder].add!(new_item)
38
- elsif options[:owner].repo_item_name_exist_in_root?(new_item.name)
39
- self.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.item_exist'))
40
- raise RepositoryManager::ItemExistException.new("copy failed. The repo_file '#{new_item.name}' already exist in root.")
41
- end
38
+ new_item.name = self.name
42
39
 
43
40
  options[:owner] ? new_item.owner = options[:owner] : new_item.owner = self.owner
44
- if options[:sender]
45
- new_item.sender = options[:sender]
46
- #elsif options[:owner]
47
- # new_item.sender = options[:owner]
41
+ options[:sender] ? new_item.sender = options[:sender] : new_item.sender = self.sender
42
+
43
+ if options[:source_folder]
44
+ new_item = options[:source_folder].add!(new_item, do_not_save: true, overwrite: overwrite )
45
+ elsif options[:owner]
46
+ repo_item_with_same_name = options[:owner].get_item_in_root_by_name(new_item.name)
47
+ if repo_item_with_same_name and !overwrite
48
+ self.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.item_exist'))
49
+ raise RepositoryManager::ItemExistException.new("copy failed. The repo_file '#{new_item.name}' already exist in root.")
50
+ elsif repo_item_with_same_name and overwrite
51
+ repo_item_with_same_name.file = new_item.file
52
+ repo_item_with_same_name.sender = new_item.sender
53
+ new_item = repo_item_with_same_name
54
+ end
48
55
  else
49
- new_item.sender = self.sender
56
+ repo_item_with_same_name = self.owner.get_item_in_root_by_name(new_item.name)
57
+ if repo_item_with_same_name and !overwrite
58
+ self.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.item_exist'))
59
+ raise RepositoryManager::ItemExistException.new("copy failed. The repo_file '#{new_item.name}' already exist in root.")
60
+ elsif repo_item_with_same_name and overwrite
61
+ repo_item_with_same_name.file = new_item.file
62
+ repo_item_with_same_name.sender = new_item.sender
63
+ new_item = repo_item_with_same_name
64
+ end
50
65
  end
51
66
 
52
67
  new_item.save!
@@ -67,6 +82,7 @@ class RepositoryManager::RepoFile < RepositoryManager::RepoItem
67
82
  if file.present? && file_changed?
68
83
  self.content_type = file.file.content_type
69
84
  self.file_size = file.file.size
85
+ self.checksum = Digest::MD5.file(file.path).hexdigest
70
86
  end
71
87
  end
72
88
 
@@ -5,23 +5,42 @@ class RepositoryManager::RepoFolder < RepositoryManager::RepoItem
5
5
  validates :name, presence: true
6
6
 
7
7
  # Add a repo_item in the folder.
8
- # second param destroy the repo_item if it can move it.
9
- def add!(repo_item, destroy_if_fail = false)
8
+ # options
9
+ # :destroy_if_fail = false // the repo_item if it can't move it.
10
+ # :do_not_save = false // Save the repo_item after changing his param
11
+ # :overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
12
+ # second param destroy the repo_item if it can't move it.
13
+ def add!(repo_item, options = {})
14
+ !!options[:overwrite] == options[:overwrite] ? overwrite = options[:overwrite] : overwrite = RepositoryManager.auto_overwrite_item
15
+
10
16
  # We check if this name already exist
11
- #if repo_item.children.exists?(:name => repo_item.name)
12
- if name_exist_in_children?(repo_item.name)
17
+ repo_item_with_same_name = get_children_by_name(repo_item.name)
18
+ if repo_item_with_same_name && !overwrite
13
19
  # we delete the repo if asked
14
- repo_item.destroy if destroy_if_fail
20
+ repo_item.destroy if options[:destroy_if_fail]
15
21
  raise RepositoryManager::ItemExistException.new("add failed. The repo_item '#{repo_item.name}' already exist in the folder '#{name}'")
22
+ elsif repo_item_with_same_name && overwrite
23
+ # We destroy it
24
+ if repo_item_with_same_name.is_file?
25
+ #p "add: updates the file #{repo_item.name}"
26
+ repo_item_with_same_name.file = repo_item.file
27
+ repo_item_with_same_name.sender = repo_item.sender
28
+ repo_item_with_same_name.owner = repo_item.owner
29
+ repo_item = repo_item_with_same_name
30
+ else
31
+ repo_item_with_same_name.destroy!
32
+ end
16
33
  else
17
- repo_item.update_attribute :parent, self
34
+ repo_item.parent = self
35
+ repo_item.save! unless options[:do_not_save]
18
36
  end
37
+ repo_item
19
38
  end
20
39
 
21
40
  def add(repo_item)
22
41
  begin
23
42
  add!(repo_item)
24
- rescue RepositoryManager::ItemExistException
43
+ rescue RepositoryManager::ItemExistException, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved
25
44
  false
26
45
  end
27
46
  end
@@ -31,31 +50,41 @@ class RepositoryManager::RepoFolder < RepositoryManager::RepoItem
31
50
  # :source_folder = the folder in witch you copy this item
32
51
  # :owner = the owner of the item
33
52
  # :sender = the sender of the item (if you don't specify sender.. The sender is still the same)
53
+ # :overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
34
54
  def copy!(options = {})
55
+ !!options[:overwrite] == options[:overwrite] ? overwrite = options[:overwrite] : overwrite = RepositoryManager.auto_overwrite_item
56
+
35
57
  new_item = RepositoryManager::RepoFolder.new
36
58
  new_item.name = self.name
37
59
 
38
- if options[:source_folder]
39
- options[:source_folder].add!(new_item)
40
- elsif options[:owner].repo_item_name_exist_in_root?(new_item.name)
41
- self.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.item_exist'))
42
- raise RepositoryManager::ItemExistException.new("copy failed. The repo_folder '#{new_item.name}' already exist in root.")
43
- end
44
-
45
60
  options[:owner] ? new_item.owner = options[:owner] : new_item.owner = self.owner
46
- if options[:sender]
47
- new_item.sender = options[:sender]
48
- #elsif options[:owner]
49
- # new_item.sender = options[:owner]
61
+ options[:sender] ? new_item.sender = options[:sender] : new_item.sender = self.sender
62
+
63
+ if options[:source_folder]
64
+ options[:source_folder].add!(new_item, do_not_save: true)
65
+ elsif options[:owner]
66
+ repo_item_with_same_name = options[:owner].get_item_in_root_by_name(new_item.name)
67
+ if repo_item_with_same_name and !overwrite
68
+ self.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.item_exist'))
69
+ raise RepositoryManager::ItemExistException.new("copy failed. The repo_folder '#{new_item.name}' already exist in root.")
70
+ elsif repo_item_with_same_name and overwrite
71
+ repo_item_with_same_name.destroy!
72
+ end
50
73
  else
51
- new_item.sender = self.sender
74
+ repo_item_with_same_name = self.owner.get_item_in_root_by_name(new_item.name)
75
+ if repo_item_with_same_name and !overwrite
76
+ self.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.item_exist'))
77
+ raise RepositoryManager::ItemExistException.new("copy failed. The repo_file '#{new_item.name}' already exist in root.")
78
+ elsif repo_item_with_same_name and overwrite
79
+ repo_item_with_same_name.destroy!
80
+ end
52
81
  end
53
82
 
54
- new_item.save!
83
+ new_item.save
55
84
 
56
- # Recursive method who copy all children.
85
+ # Recursive method which copy all children.
57
86
  children.each do |c|
58
- c.copy!(source_folder: new_item, owner: options[:owner], sender: options[:sender])
87
+ c.copy!(source_folder: new_item, owner: options[:owner], sender: options[:sender], overwrite: overwrite)
59
88
  end
60
89
 
61
90
  new_item
@@ -134,7 +163,11 @@ class RepositoryManager::RepoFolder < RepositoryManager::RepoItem
134
163
  # Returns true or false if the name exist in this folder
135
164
  def name_exist_in_children?(name)
136
165
  #RepositoryManager::RepoItem.where(name: name).where(id: child_ids).first ? true : false
137
- RepositoryManager::RepoItem.where('name = ?', name).where(id: child_ids).first ? true : false
166
+ get_children_by_name(name) ? true : false
167
+ end
168
+
169
+ def get_children_by_name(name)
170
+ RepositoryManager::RepoItem.where('name = ?', name).where(id: child_ids).first
138
171
  end
139
172
 
140
173
  private
@@ -5,6 +5,10 @@ class RepositoryManager::RepoItem < ActiveRecord::Base
5
5
 
6
6
  before_save :put_sender
7
7
 
8
+ if RepositoryManager.has_paper_trail
9
+ has_paper_trail
10
+ end
11
+
8
12
  has_ancestry cache_depth: true
9
13
 
10
14
  # Associate with the User Class
@@ -31,23 +35,42 @@ class RepositoryManager::RepoItem < ActiveRecord::Base
31
35
  # options
32
36
  # :source_folder = the folder in witch you copy this item
33
37
  # :owner = the owner of the item
38
+ # :overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
34
39
  # If :source_folder = nil, move to the root (of same owner)
35
40
  def move!(options = {})
36
- # If we are in source_folder, we check if it's ok
41
+ !!options[:overwrite] == options[:overwrite] ? overwrite = options[:overwrite] : overwrite = RepositoryManager.auto_overwrite_item
42
+
43
+ # If we are in source_folder, we check if it's a folder
37
44
  if options[:source_folder]
38
45
  unless options[:source_folder].is_folder?
39
46
  raise RepositoryManager::RepositoryManagerException.new("move failed. target '#{options[:source_folder].name}' can't be a file")
40
47
  end
41
- if options[:source_folder].name_exist_in_children?(self.name)
48
+
49
+ children_with_same_name = options[:source_folder].get_children_by_name(self.name)
50
+ # If the name exist and we don't want to overwrite, we raise an error
51
+ if children_with_same_name and !overwrite
42
52
  self.errors.add(:move, I18n.t('repository_manager.errors.repo_item.item_exist'))
43
53
  raise RepositoryManager::ItemExistException.new("move failed. The repo_item '#{name}' already exist ine the folder '#{options[:source_folder].name}'")
54
+ elsif children_with_same_name and overwrite
55
+ # If a children with the same name exist and we want to overwrite, we have to destroy it
56
+ children_with_same_name.destroy!
44
57
  end
45
58
  # We are in root, we check if name exist in root
46
59
  # We stay in the same owner
47
- elsif self.owner.repo_item_name_exist_in_root?(self.name)
48
- self.errors.add(:move, I18n.t('repository_manager.errors.repo_item.item_exist'))
49
- raise RepositoryManager::ItemExistException.new("move failed. The repo_item '#{name}' already exist ine the root")
60
+ else
61
+ # We check if a children with same name exist
62
+ children_with_same_name = self.owner.get_item_in_root_by_name(self.name)
63
+
64
+ # If it exist and we don t want to overwrite, we raise an error
65
+ if children_with_same_name and !overwrite
66
+ self.errors.add(:move, I18n.t('repository_manager.errors.repo_item.item_exist'))
67
+ raise RepositoryManager::ItemExistException.new("move failed. The repo_item '#{name}' already exist ine the root")
68
+ # else we destroy it
69
+ elsif children_with_same_name and overwrite
70
+ children_with_same_name.destroy!
71
+ end
50
72
  end
73
+
51
74
  # here, all is ok
52
75
  # We change the owner if another one is specify
53
76
  if options[:owner]
@@ -56,7 +79,7 @@ class RepositoryManager::RepoItem < ActiveRecord::Base
56
79
  self.owner = options[:source_folder].owner
57
80
  end
58
81
  # we update the tree with the new parent
59
- self.update_attribute :parent, options[:source_folder]
82
+ self.parent = options[:source_folder]
60
83
  self.save!
61
84
  self
62
85
  end
@@ -23,13 +23,14 @@ class CreateRepositoryManager < ActiveRecord::Migration
23
23
  create_table :rm_repo_items do |t|
24
24
  t.references :owner, polymorphic: true, index: true
25
25
  t.references :sender, polymorphic: true, index: true
26
- t.string :ancestry
26
+ t.string :ancestry, index: true
27
27
  t.integer :ancestry_depth, :default => 0
28
28
  t.string :name
29
29
  t.float :file_size
30
30
  t.string :content_type
31
31
  t.string :file
32
32
  t.string :type
33
+ t.string :checksum
33
34
  end
34
35
  end
35
36
  end
@@ -1,7 +1,9 @@
1
1
  RepositoryManager.setup do |config|
2
2
 
3
3
  # Default repo_item permissions that an object has on the repo_item after a sharing.
4
- config.default_repo_item_permissions = { can_read: true, can_create: false, can_update:false, can_delete:false, can_share: false }
4
+ config.default_repo_item_permissions = {
5
+ can_read: true, can_create: false, can_update:false, can_delete:false, can_share: false
6
+ }
5
7
 
6
8
  # Default sharing permissions that an object has when he is added in a sharing.
7
9
  config.default_sharing_permissions = { can_add: false, can_remove: false }
@@ -10,4 +12,10 @@ RepositoryManager.setup do |config|
10
12
  # WARNING: DO NOT CHANGE IF YOU DON'T KNOW WHAT YOU ARE DOING
11
13
  # Default is : "download/#{member.class.to_s.underscore}/#{member.id}/#{self.class.to_s.underscore}/#{self.id}/"
12
14
  #config.default_zip_path = true
15
+
16
+ # Define if we enable or not the versioning on the repo_item
17
+ config.has_paper_trail = false
18
+
19
+ # Define if a repo item with the same name will be automaticaly overwrited when a new item is create
20
+ config.auto_overwrite_item = false
13
21
  end
@@ -14,9 +14,11 @@ module RepositoryManager
14
14
  mattr_accessor :accept_nested_sharing
15
15
  @@accept_nested_share = false
16
16
 
17
- #mattr_accessor :user_model
18
- ##@@user_model = 'User'
19
- #@@user_model = false
17
+ mattr_accessor :has_paper_trail
18
+ @@has_paper_trail = false
19
+
20
+ mattr_accessor :auto_overwrite_item
21
+ @@auto_overwrite_item = false
20
22
 
21
23
  class << self
22
24
  def setup
@@ -101,6 +101,7 @@ module RepositoryManager
101
101
  # options :
102
102
  # :source_folder = The directory in with the folder is created
103
103
  # :sender = The object of the sender (ex : current_user)
104
+ # :overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
104
105
  # Returns the object of the folder created if it is ok
105
106
  # Returns an Exception if the folder is not created
106
107
  # RepositoryManagerException if the name already exist
@@ -113,6 +114,8 @@ module RepositoryManager
113
114
  end
114
115
  end
115
116
 
117
+ !!options[:overwrite] == options[:overwrite] ? overwrite = options[:overwrite] : overwrite = RepositoryManager.auto_overwrite_item
118
+
116
119
  # If he want to create a folder in a directory, we have to check if he have the permission
117
120
  if can_create?(source_folder)
118
121
 
@@ -126,13 +129,19 @@ module RepositoryManager
126
129
  folder.sender = options[:sender]
127
130
 
128
131
  # If we are in root path we check if we can add this folder name
129
- if !source_folder && repo_item_name_exist_in_root?(name)
130
- raise RepositoryManager::ItemExistException.new("create folder failed. The repo_item '#{name}' already exist in the root folder.")
132
+ if !source_folder
133
+ repo_item_with_same_name = get_item_in_root_by_name(name)
134
+ if repo_item_with_same_name && !overwrite
135
+ raise RepositoryManager::ItemExistException.new("create folder failed. The repo_item '#{name}' already exist in the root folder.")
136
+ elsif repo_item_with_same_name && overwrite
137
+ # We destroy the item with same name for overwrite it
138
+ repo_item_with_same_name.destroy!
139
+ end
140
+ else
141
+ # It raise an error if name already exist and destroy the folder
142
+ source_folder.add!(folder, do_not_save: true, overwrite: overwrite)
131
143
  end
132
144
 
133
- # It raise an error if name already exist and destroy the folder
134
- source_folder.add!(folder) if source_folder
135
-
136
145
  folder.save!
137
146
  else
138
147
  raise RepositoryManager::PermissionException.new("create_folder failed. You don't have the permission to create a folder in '#{source_folder.name}'")
@@ -181,7 +190,8 @@ module RepositoryManager
181
190
  # :source_folder = The directory in with the folder is created
182
191
  # :sender = The object of the sender (ex : current_user)
183
192
  # :filename = The name of the file (if you want to rename it directly)
184
- #
193
+ # :overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
194
+
185
195
  # Param file can be a File, or a instance of RepoFile
186
196
  # Returns the object of the file created if it is ok
187
197
  # Returns an Exception if the folder is not created
@@ -195,6 +205,8 @@ module RepositoryManager
195
205
  end
196
206
  end
197
207
 
208
+ !!options[:overwrite] == options[:overwrite] ? overwrite = options[:overwrite] : overwrite = RepositoryManager.auto_overwrite_item
209
+
198
210
  # If he want to create a file in a directory, we have to check if he have the permission
199
211
  if can_create?(source_folder)
200
212
 
@@ -207,20 +219,39 @@ module RepositoryManager
207
219
  repo_file = RepositoryManager::RepoFile.new(file)
208
220
  end
209
221
 
210
- options[:filename] ? repo_file.name = options[:filename] : repo_file.name = repo_file.file.url.split('/').last
222
+ options[:filename] ? file_name = options[:filename] : file_name = repo_file.file.url.split('/').last
211
223
 
224
+ repo_file.name = file_name
212
225
  repo_file.owner = self
213
226
  repo_file.sender = options[:sender]
214
227
 
215
-
216
228
  # If we are in root path we check if we can add this file name
217
- if !source_folder && repo_item_name_exist_in_root?(repo_file.file.identifier)
218
- raise RepositoryManager::ItemExistException.new("create file failed. The repo_item '#{repo_file.file.identifier}' already exist in the root folder.")
229
+ if !source_folder
230
+ repo_item_with_same_name = get_item_in_root_by_name(file_name)
231
+ if repo_item_with_same_name && !overwrite
232
+ raise RepositoryManager::ItemExistException.new("create file failed. The repo_item '#{file_name}' already exist in the root folder.")
233
+ elsif repo_item_with_same_name && overwrite
234
+ #We do not destroy, we update it !
235
+
236
+ # We update the file
237
+ repo_item_with_same_name.file = file
238
+
239
+ if file.class.name == 'RepositoryManager::RepoFile'
240
+ repo_item_with_same_name.file = file.file
241
+ elsif file.class.name == 'File' || file.class.name == 'ActionDispatch::Http::UploadedFile'
242
+ repo_item_with_same_name.file = file
243
+ else # "ActionController::Parameters"
244
+ repo_item_with_same_name.assign_attributes(file)
245
+ end
246
+ repo_item_with_same_name.sender = options[:sender]
247
+ #p "source: updates the file #{repo_item_with_same_name.name}"
248
+
249
+ repo_file = repo_item_with_same_name
250
+ end
251
+ else
252
+ # It raise an error if name already exist and destroy the file
253
+ repo_file = source_folder.add!(repo_file, do_not_save: true, overwrite: overwrite)
219
254
  end
220
-
221
- # It raise an error if name already exist and destroy the file
222
- source_folder.add!(repo_file) if source_folder
223
-
224
255
  repo_file.save!
225
256
  else
226
257
  raise RepositoryManager::PermissionException.new("create_file failed. You don't have the permission to create a file")
@@ -316,7 +347,9 @@ module RepositoryManager
316
347
  # options
317
348
  # :source_folder => move into this source_folder
318
349
  # if :source_folder == nil, move to the root
350
+ # :overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
319
351
  def move_repo_item!(repo_item, options = {})
352
+ !!options[:overwrite] == options[:overwrite] ? overwrite = options[:overwrite] : overwrite = RepositoryManager.auto_overwrite_item
320
353
  target = options[:source_folder]
321
354
 
322
355
  if !can_read?(repo_item)
@@ -348,7 +381,7 @@ module RepositoryManager
348
381
  end
349
382
  end
350
383
  # If it has the permission, we move the repo_item in the source_folder
351
- repo_item.move!(source_folder: target)
384
+ repo_item.move!(source_folder: target, overwrite: overwrite)
352
385
  end
353
386
 
354
387
  def move_repo_item(repo_item, options = {})
@@ -366,7 +399,10 @@ module RepositoryManager
366
399
  # options
367
400
  # :source_folder => the folder in witch we want to copy the repo item
368
401
  # :sender => the new sender (by default => still the old sender)
402
+ # :overwrite = overwrite an item with the same name (default : see config 'auto_overwrite_item')
369
403
  def copy_repo_item!(repo_item, options = {})
404
+ !!options[:overwrite] == options[:overwrite] ? overwrite = options[:overwrite] : overwrite = RepositoryManager.auto_overwrite_item
405
+
370
406
  target = options[:source_folder]
371
407
 
372
408
  unless can_read?(repo_item)
@@ -374,7 +410,7 @@ module RepositoryManager
374
410
  raise RepositoryManager::PermissionException.new("copy repo_item failed. You don't have the permission to read the repo_item '#{repo_item.name}'")
375
411
  end
376
412
 
377
- if target && !can_create?(target)
413
+ if target && !can_create?(target)
378
414
  repo_item.errors.add(:copy, I18n.t('repository_manager.errors.repo_item.copy.no_permission'))
379
415
  raise RepositoryManager::PermissionException.new("copy repo_item failed. You don't have the permission to create in the source_folder '#{target.name}'")
380
416
  end
@@ -387,7 +423,7 @@ module RepositoryManager
387
423
  end
388
424
 
389
425
  # If it has the permission, we move the repo_item in the source_folder
390
- repo_item.copy!(source_folder: target, owner: owner, sender: options[:sender])
426
+ repo_item.copy!(source_folder: target, owner: owner, sender: options[:sender], overwrite: overwrite)
391
427
  end
392
428
 
393
429
  def copy_repo_item(repo_item, options = {})
@@ -516,7 +552,11 @@ module RepositoryManager
516
552
 
517
553
  # Returns true of false if the name exist in the root path of this instance
518
554
  def repo_item_name_exist_in_root?(name)
519
- RepoItem.where('name = ?', name).where(owner: self).where(ancestry: nil).first ? true : false
555
+ get_item_in_root_by_name(name) ? true : false
556
+ end
557
+
558
+ def get_item_in_root_by_name(name)
559
+ RepoItem.where('name = ?', name).where(owner: self).where(ancestry: nil).first
520
560
  end
521
561
 
522
562
  private