repository-manager 0.2.1 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
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