repository-manager 0.1.16 → 0.1.18
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 +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +8 -6
- data/app/models/repository_manager/repo_file.rb +36 -0
- data/app/models/repository_manager/repo_folder.rb +42 -0
- data/app/models/repository_manager/repo_item.rb +16 -51
- data/app/models/repository_manager/sharing.rb +9 -3
- data/lib/repository_manager/has_repository.rb +39 -46
- data/lib/repository_manager/version.rb +1 -1
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/has_repository_spec.rb +3 -4
- data/spec/models/repository_spec.rb +51 -5
- data/spec/models/share_spec.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5570145fdab6a68044c23360f2cda512bbff93da
|
4
|
+
data.tar.gz: 63ac568cef21b1e6e1c69f34ec14701a811e393b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3aa7875fc7c3cbcb7653af770e548eade784c6d10dc35bb6e86a8baffcd5c3764acf9133d3cf86386cb1fc98ae33a5ec7c757c4f88ea7723bbb52930bf05a208
|
7
|
+
data.tar.gz: 82b701bd769e352108cbcf7c25773d1e48ad0b7b068056c6f75f2956429f74cc238124b5182393f8af7228c626aba9f8c65e019f75fa278d81534ca8a8dd54d8
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
repository-manager (0.1.
|
4
|
+
repository-manager (0.1.17)
|
5
5
|
ancestry
|
6
6
|
carrierwave (>= 0.5.8)
|
7
7
|
rails (> 3.0.0)
|
@@ -36,7 +36,7 @@ GEM
|
|
36
36
|
tzinfo (~> 0.3.37)
|
37
37
|
ancestry (2.0.0)
|
38
38
|
activerecord (>= 3.0.0)
|
39
|
-
arel (4.0.
|
39
|
+
arel (4.0.2)
|
40
40
|
atomic (1.1.14)
|
41
41
|
builder (3.1.4)
|
42
42
|
carrierwave (0.9.0)
|
data/README.md
CHANGED
@@ -273,9 +273,9 @@ children = @user1.create_folder('Children', nested)
|
|
273
273
|
|
274
274
|
@user1.share(nested, @user2)
|
275
275
|
|
276
|
-
nested.
|
277
|
-
parent.
|
278
|
-
children.
|
276
|
+
nested.can_be_shared_without_nesting? # Returns true (because `nested` is shared but there exist no nested sharing)
|
277
|
+
parent.can_be_shared_without_nesting? # Returns false (because there is a sharing on one of his descendants)
|
278
|
+
children.can_be_shared_without_nesting? # Returns false (because there is a sharing on one of his ancestors)
|
279
279
|
|
280
280
|
# Here we can't share 'Parent' or 'Children' because it already exist a nested sharing.
|
281
281
|
@user1.share(parent, @user2) # Returns false
|
@@ -382,7 +382,7 @@ sharing.add_members(member, {can_add: true, can_remove: false})
|
|
382
382
|
|
383
383
|
|
384
384
|
# Remove members from the sharing
|
385
|
-
sharing.remove_members(
|
385
|
+
sharing.remove_members([user2, group1])
|
386
386
|
```
|
387
387
|
|
388
388
|
### Authorisations
|
@@ -414,7 +414,7 @@ You can get all the authorisations of an `object` in a `repo_item` with this met
|
|
414
414
|
end
|
415
415
|
```
|
416
416
|
|
417
|
-
#### Sharing
|
417
|
+
#### Sharing authorisations
|
418
418
|
|
419
419
|
You can manage the permissions of a member in a sharing. The owner of the sharing has all the permissions. The sharing permissions are:
|
420
420
|
- `can_add_to?(sharing)` : The member can add a new instance in this sharing.
|
@@ -456,7 +456,9 @@ the_folder.delete_zip
|
|
456
456
|
## TODO
|
457
457
|
|
458
458
|
- Do the rename file method
|
459
|
-
-
|
459
|
+
- Test the copy method
|
460
|
+
- Configure path to save files
|
461
|
+
- Write the methods : share_link.
|
460
462
|
- Snapshot the file if possible
|
461
463
|
- Versioning
|
462
464
|
- ...
|
@@ -19,6 +19,42 @@ class RepositoryManager::RepoFile < RepositoryManager::RepoItem
|
|
19
19
|
path = file.path
|
20
20
|
end
|
21
21
|
|
22
|
+
# Copy itself into the source_folder
|
23
|
+
# options
|
24
|
+
# :source_folder = the folder in witch you copy this item
|
25
|
+
# :owner = the owner of the item
|
26
|
+
# :sender = the sender of the item (if you don't specify sender.. The sender is still the same)
|
27
|
+
def copy!(options = {})
|
28
|
+
new_item = RepositoryManager::RepoFile.new
|
29
|
+
new_item.file = File.open(self.file.current_path)
|
30
|
+
|
31
|
+
if options[:source_folder]
|
32
|
+
options[:source_folder].add!(new_item)
|
33
|
+
elsif options[:owner].repo_item_name_exist_in_root?(new_item.name)
|
34
|
+
raise RepositoryManager::RepositoryManagerException.new("copy failed. The repo_file '#{new_item.name}' already exist in root.")
|
35
|
+
end
|
36
|
+
|
37
|
+
options[:owner] ? new_item.owner = options[:owner] : new_item.owner = self.owner
|
38
|
+
if options[:sender]
|
39
|
+
new_item.sender = options[:sender]
|
40
|
+
#elsif options[:owner]
|
41
|
+
# new_item.sender = options[:owner]
|
42
|
+
else
|
43
|
+
new_item.sender = self.sender
|
44
|
+
end
|
45
|
+
|
46
|
+
new_item.save!
|
47
|
+
new_item
|
48
|
+
end
|
49
|
+
|
50
|
+
def copy(options = {})
|
51
|
+
begin
|
52
|
+
copy!(options)
|
53
|
+
rescue RepositoryManager::AuthorisationException, RepositoryManager::RepositoryManagerException, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved
|
54
|
+
false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
22
58
|
private
|
23
59
|
|
24
60
|
def update_asset_attributes
|
@@ -47,6 +47,48 @@ class RepositoryManager::RepoFolder < RepositoryManager::RepoItem
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
# Copy itself into the source_folder
|
51
|
+
# options
|
52
|
+
# :source_folder = the folder in witch you copy this item
|
53
|
+
# :owner = the owner of the item
|
54
|
+
# :sender = the sender of the item (if you don't specify sender.. The sender is still the same)
|
55
|
+
def copy!(options = {})
|
56
|
+
new_item = RepositoryManager::RepoFolder.new
|
57
|
+
new_item.name = self.name
|
58
|
+
|
59
|
+
if options[:source_folder]
|
60
|
+
options[:source_folder].add!(new_item)
|
61
|
+
elsif options[:owner].repo_item_name_exist_in_root?(new_item.name)
|
62
|
+
raise RepositoryManager::RepositoryManagerException.new("copy failed. The repo_folder '#{new_item.name}' already exist in root.")
|
63
|
+
end
|
64
|
+
|
65
|
+
options[:owner] ? new_item.owner = options[:owner] : new_item.owner = self.owner
|
66
|
+
if options[:sender]
|
67
|
+
new_item.sender = options[:sender]
|
68
|
+
#elsif options[:owner]
|
69
|
+
# new_item.sender = options[:owner]
|
70
|
+
else
|
71
|
+
new_item.sender = self.sender
|
72
|
+
end
|
73
|
+
|
74
|
+
new_item.save!
|
75
|
+
|
76
|
+
# Recursive method who copy all children.
|
77
|
+
children.each do |c|
|
78
|
+
c.copy!(source_folder: new_item, owner: options[:owner], sender: options[:sender])
|
79
|
+
end
|
80
|
+
|
81
|
+
new_item
|
82
|
+
end
|
83
|
+
|
84
|
+
def copy(options = {})
|
85
|
+
begin
|
86
|
+
copy!(options)
|
87
|
+
rescue RepositoryManager::AuthorisationException, RepositoryManager::RepositoryManagerException, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved
|
88
|
+
false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
50
92
|
# Download this folder (zip it first)
|
51
93
|
# Return the path to the folder.zip
|
52
94
|
# options can have :
|
@@ -27,47 +27,11 @@ class RepositoryManager::RepoItem < ActiveRecord::Base
|
|
27
27
|
scope :folders, where(type: 'RepositoryManager::RepoFolder')
|
28
28
|
end
|
29
29
|
|
30
|
-
#
|
30
|
+
# Move itself into the target or root
|
31
31
|
# options
|
32
32
|
# :source_folder = the folder in witch you copy this item
|
33
33
|
# :owner = the owner of the item
|
34
|
-
#
|
35
|
-
def copy!(options = {})
|
36
|
-
new_item = RepoItem.new
|
37
|
-
new_item.type = self.type
|
38
|
-
new_item.file = self.file
|
39
|
-
new_item.content_type = self.content_type
|
40
|
-
new_item.file_size = self.file_size
|
41
|
-
new_item.name = self.name
|
42
|
-
options[:owner] ? new_item.owner = options[:owner] : new_item.owner = self.owner
|
43
|
-
if options[:sender]
|
44
|
-
new_item.sender = options[:sender]
|
45
|
-
elsif options[:owner]
|
46
|
-
new_item.sender = options[:owner]
|
47
|
-
else
|
48
|
-
new_item.sender = self.sender
|
49
|
-
end
|
50
|
-
|
51
|
-
if options[:source_folder]
|
52
|
-
options[:source_folder].add!(new_item)
|
53
|
-
end
|
54
|
-
|
55
|
-
new_item.save!
|
56
|
-
new_item
|
57
|
-
end
|
58
|
-
|
59
|
-
def copy(options = {})
|
60
|
-
begin
|
61
|
-
copy!(options)
|
62
|
-
rescue RepositoryManager::AuthorisationException, RepositoryManager::RepositoryManagerException, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved
|
63
|
-
false
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
# Move itself into the source_folder or root
|
68
|
-
# options
|
69
|
-
# :source_folder => move into this source_folder
|
70
|
-
# :owner = the owner of the item
|
34
|
+
# If :source_folder = nil, move to the root (of same owner)
|
71
35
|
def move!(options = {})
|
72
36
|
# If we are in source_folder, we check if it's ok
|
73
37
|
if options[:source_folder]
|
@@ -77,18 +41,19 @@ class RepositoryManager::RepoItem < ActiveRecord::Base
|
|
77
41
|
if options[:source_folder].name_exist_in_children?(self.name)
|
78
42
|
raise RepositoryManager::RepositoryManagerException.new("move failed. The repo_item '#{name}' already exist ine the folder '#{options[:source_folder].name}'")
|
79
43
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
raise RepositoryManager::RepositoryManagerException.new("move failed. The repo_item '#{name}' already exist ine the root")
|
85
|
-
elsif self.owner.repo_item_name_exist_in_root?(self.name)
|
86
|
-
raise RepositoryManager::RepositoryManagerException.new("move failed. The repo_item '#{name}' already exist ine the root")
|
87
|
-
end
|
88
|
-
end
|
44
|
+
# We are in root, we check if name exist in root
|
45
|
+
# We stay in the same owner
|
46
|
+
elsif self.owner.repo_item_name_exist_in_root?(self.name)
|
47
|
+
raise RepositoryManager::RepositoryManagerException.new("move failed. The repo_item '#{name}' already exist ine the root")
|
89
48
|
end
|
90
49
|
# here, all is ok
|
91
|
-
|
50
|
+
# We change the owner if another one is specify
|
51
|
+
if options[:owner]
|
52
|
+
self.owner = options[:owner]
|
53
|
+
elsif options[:source_folder]
|
54
|
+
self.owner = options[:source_folder].owner
|
55
|
+
end
|
56
|
+
# we update the tree with the new parent
|
92
57
|
self.update_attribute :parent, options[:source_folder]
|
93
58
|
self.save!
|
94
59
|
self
|
@@ -103,7 +68,7 @@ class RepositoryManager::RepoItem < ActiveRecord::Base
|
|
103
68
|
end
|
104
69
|
|
105
70
|
# Returns true if it exist a sharing in the ancestors of descendant_ids of the repo_item (without itself)
|
106
|
-
def
|
71
|
+
def can_be_shared_without_nesting?
|
107
72
|
# An array with the ids of all ancestors and descendants
|
108
73
|
ancestor_and_descendant_ids = []
|
109
74
|
ancestor_and_descendant_ids << self.descendant_ids if self.is_folder? && !self.descendant_ids.empty?
|
@@ -111,9 +76,9 @@ class RepositoryManager::RepoItem < ActiveRecord::Base
|
|
111
76
|
|
112
77
|
# If it exist a sharing, it returns true
|
113
78
|
if RepositoryManager::Sharing.where(repo_item_id: ancestor_and_descendant_ids).count > 0
|
114
|
-
true
|
115
|
-
else
|
116
79
|
false
|
80
|
+
else
|
81
|
+
true
|
117
82
|
end
|
118
83
|
end
|
119
84
|
|
@@ -15,9 +15,9 @@ class RepositoryManager::Sharing < ActiveRecord::Base
|
|
15
15
|
#scope :recipient, lambda { |recipient|
|
16
16
|
# joins(:receipts).where('receipts.receiver_id' => recipient.id,'receipts.receiver_type' => recipient.class.base_class.to_s)
|
17
17
|
#}
|
18
|
-
scope :members, lambda { |member|
|
19
|
-
|
20
|
-
}
|
18
|
+
#scope :members, lambda { |member|
|
19
|
+
# joins(:sharings_members).where('sharings_members.member_id' => member.id,'sharings_members.member_type' => member.class.base_class.to_s)
|
20
|
+
#}
|
21
21
|
|
22
22
|
# Return the authorisations of the sharing for the member
|
23
23
|
def get_authorisations(member)
|
@@ -36,12 +36,18 @@ class RepositoryManager::Sharing < ActiveRecord::Base
|
|
36
36
|
if members.kind_of?(Array)
|
37
37
|
# Add each member to this sharing
|
38
38
|
members.each do |i|
|
39
|
+
unless i.respond_to? :share # Check if this object "has_repository"
|
40
|
+
raise RepositoryManager::RepositoryManagerException.new("add members failed. The object passed into members should be a model who 'has_repository'")
|
41
|
+
end
|
39
42
|
sharing_member = RepositoryManager::SharingsMember.new(sharing_permissions)
|
40
43
|
sharing_member.member = i
|
41
44
|
# Add the sharings members in the sharing
|
42
45
|
self.sharings_members << sharing_member
|
43
46
|
end
|
44
47
|
else
|
48
|
+
unless members.respond_to? :share # Check if this object "has_repository"
|
49
|
+
raise RepositoryManager::RepositoryManagerException.new("add members failed. The object passed into members should be a model who 'has_repository'")
|
50
|
+
end
|
45
51
|
sharing_member = RepositoryManager::SharingsMember.new(sharing_permissions)
|
46
52
|
sharing_member.member = members
|
47
53
|
# Add the sharings members in the sharing
|
@@ -48,7 +48,7 @@ module RepositoryManager
|
|
48
48
|
# Nested sharing are not accepted
|
49
49
|
if !RepositoryManager.accept_nested_sharing
|
50
50
|
# Check if no other sharing exist in the path
|
51
|
-
|
51
|
+
unless repo_item.can_be_shared_without_nesting?
|
52
52
|
raise RepositoryManager::NestedSharingException.new("sharing failed. Another sharing already exist on the subtree or an ancestor of '#{repo_item.name}'")
|
53
53
|
end
|
54
54
|
end
|
@@ -286,78 +286,71 @@ module RepositoryManager
|
|
286
286
|
end
|
287
287
|
|
288
288
|
# Move the repo_item. If you let all options empty, the item is moving into the self.root
|
289
|
-
#
|
290
|
-
#
|
291
|
-
|
292
|
-
|
289
|
+
# target => move into this source_folder
|
290
|
+
# if target == nil, move to the root
|
291
|
+
def move_repo_item!(repo_item, target = nil)
|
292
|
+
if !can_read?(repo_item)
|
293
|
+
raise RepositoryManager::AuthorisationException.new("move repo_item failed. You don't have the permission to read the repo_item '#{repo_item.name}'")
|
294
|
+
end
|
293
295
|
# If we want to change the owner we have to have the can_delete authorisation
|
294
|
-
if
|
296
|
+
if target
|
295
297
|
# If want to change the owner, we have to check if we have the authorisation
|
296
|
-
if
|
298
|
+
if target.owner != repo_item.owner && !can_delete?(repo_item)
|
297
299
|
raise RepositoryManager::AuthorisationException.new("move repo_item failed. You don't have the permission to delete the repo_item '#{repo_item.name}'")
|
298
300
|
end
|
299
301
|
# If we don't want to change the owner, we look if we can_update
|
300
|
-
if
|
302
|
+
if target.owner == repo_item.owner && !can_update?(repo_item)
|
301
303
|
raise RepositoryManager::AuthorisationException.new("move repo_item failed. You don't have the permission to update the '#{repo_item.name}'")
|
302
304
|
end
|
303
305
|
# We check if we can_create in the source_folder
|
304
|
-
unless can_create?(
|
306
|
+
unless can_create?(target)
|
305
307
|
raise RepositoryManager::AuthorisationException.new("move repo_item failed. You don't have the permission to create in the source_folder '#{options[:source_folder].name}'")
|
306
308
|
end
|
307
|
-
elsif options[:owner]
|
308
|
-
# elsif there is no source_folder, but a specify owner, we check if we can delete, if owner change
|
309
|
-
if options[:owner] != repo_item.owner && !can_delete?(repo_item)
|
310
|
-
raise RepositoryManager::AuthorisationException.new("move repo_item failed. You don't have the permission to delete the repo_item '#{repo_item.name}'")
|
311
|
-
end
|
312
|
-
# If we don't want to change the owner, we look if we can_update
|
313
|
-
if options[:owner] == repo_item.owner && !can_update?(repo_item)
|
314
|
-
raise RepositoryManager::AuthorisationException.new("move repo_item failed. You don't have the permission to update the '#{repo_item.name}'")
|
315
|
-
end
|
316
309
|
else
|
317
310
|
# Else if there is no source_folder, we check if we can delete the repo_item, if the owner change
|
318
311
|
if self != repo_item.owner && !can_delete?(repo_item)
|
319
312
|
raise RepositoryManager::AuthorisationException.new("move repo_item failed. You don't have the permission to delete the repo_item '#{repo_item.name}'")
|
320
313
|
end
|
321
314
|
end
|
322
|
-
# We put the owner
|
323
|
-
if options[:source_folder]
|
324
|
-
owner = options[:source_folder].owner
|
325
|
-
elsif options[:owner]
|
326
|
-
owner = options[:owner].owner
|
327
|
-
else
|
328
|
-
owner = self
|
329
|
-
end
|
330
315
|
# If it has the permission, we move the repo_item in the source_folder
|
331
|
-
repo_item.move!(source_folder:
|
316
|
+
repo_item.move!(source_folder: target)
|
332
317
|
end
|
333
318
|
|
334
|
-
def move_repo_item(repo_item,
|
319
|
+
def move_repo_item(repo_item, target = nil)
|
335
320
|
begin
|
336
|
-
move_repo_item!(repo_item,
|
321
|
+
move_repo_item!(repo_item, target)
|
337
322
|
rescue RepositoryManager::RepositoryManagerException, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved
|
338
323
|
false
|
339
324
|
end
|
340
325
|
end
|
341
326
|
|
342
|
-
# Copy the repo_item in the source_folder or in
|
327
|
+
# Copy the repo_item in the source_folder or in own root
|
328
|
+
# target => the folder in witch we want to copy the repo item
|
343
329
|
# options
|
344
|
-
# :
|
345
|
-
|
346
|
-
def copy_repo_item!(repo_item, options = {})
|
330
|
+
# :sender => the new sender (by default => still the old sender)
|
331
|
+
def copy_repo_item!(repo_item, target = nil, options = {})
|
347
332
|
unless can_read?(repo_item)
|
348
333
|
raise RepositoryManager::AuthorisationException.new("copy repo_item failed. You don't have the permission to read the repo_item '#{repo_item.name}'")
|
349
334
|
end
|
350
335
|
|
351
|
-
if
|
352
|
-
raise RepositoryManager::AuthorisationException.new("copy repo_item failed. You don't have the permission to create in the source_folder '#{
|
336
|
+
if target && !can_create?(target)
|
337
|
+
raise RepositoryManager::AuthorisationException.new("copy repo_item failed. You don't have the permission to create in the source_folder '#{target.name}'")
|
353
338
|
end
|
339
|
+
|
340
|
+
# The new owner
|
341
|
+
if target
|
342
|
+
owner = target.owner
|
343
|
+
else
|
344
|
+
owner = self
|
345
|
+
end
|
346
|
+
|
354
347
|
# If it has the permission, we move the repo_item in the source_folder
|
355
|
-
repo_item.copy!(source_folder:
|
348
|
+
repo_item.copy!(source_folder: target, owner: owner, sender: options[:sender])
|
356
349
|
end
|
357
350
|
|
358
|
-
def copy_repo_item(repo_item, options = {})
|
351
|
+
def copy_repo_item(repo_item, target = nil, options = {})
|
359
352
|
begin
|
360
|
-
copy_repo_item!(repo_item, options)
|
353
|
+
copy_repo_item!(repo_item, target, options)
|
361
354
|
rescue RepositoryManager::AuthorisationException, RepositoryManager::RepositoryManagerException, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved
|
362
355
|
false
|
363
356
|
end
|
@@ -451,7 +444,7 @@ module RepositoryManager
|
|
451
444
|
end
|
452
445
|
end
|
453
446
|
|
454
|
-
|
447
|
+
# You can here remove members in the sharing
|
455
448
|
# Param member could be an object or an array of object
|
456
449
|
def remove_members_from!(sharing, members)
|
457
450
|
if can_remove_from?(sharing)
|
@@ -476,13 +469,7 @@ module RepositoryManager
|
|
476
469
|
|
477
470
|
# Returns true of false if the name exist in the root path of this instance
|
478
471
|
def repo_item_name_exist_in_root?(name)
|
479
|
-
# add : or file : name
|
480
|
-
#RepoItem.where(name: name).where(owner: self).where(ancestry: nil).first ? true : false
|
481
|
-
#puts RepoItem.where('name = ? OR file = ?', name, name).where(owner: self).where(ancestry: nil).first.inspect
|
482
|
-
#puts self.inspect
|
483
|
-
|
484
472
|
RepoItem.where('name = ? OR file = ?', name, name).where(owner: self).where(ancestry: nil).first ? true : false
|
485
|
-
|
486
473
|
end
|
487
474
|
|
488
475
|
private
|
@@ -500,6 +487,12 @@ module RepositoryManager
|
|
500
487
|
end
|
501
488
|
end
|
502
489
|
|
490
|
+
# reflexion: can_do?(what, options)
|
491
|
+
# options
|
492
|
+
# hash : authorisations hash
|
493
|
+
# class: RepoItem => get_authorisations
|
494
|
+
# class: has_repository => regarder si on peu déplacer dans root (question: non pas possible ?)
|
495
|
+
|
503
496
|
# Return if you can do or not this action (what)
|
504
497
|
def can_do?(what, repo_item, authorisations = nil)
|
505
498
|
# If we pass no authorisations we have to get it
|
@@ -612,4 +605,4 @@ module RepositoryManager
|
|
612
605
|
end
|
613
606
|
end
|
614
607
|
|
615
|
-
ActiveRecord::Base.send :include, RepositoryManager::HasRepository
|
608
|
+
ActiveRecord::Base.send :include, RepositoryManager::HasRepository
|
data/spec/dummy/db/test.sqlite3
CHANGED
Binary file
|
data/spec/has_repository_spec.rb
CHANGED
@@ -18,7 +18,6 @@ describe 'HasRepository' do
|
|
18
18
|
expect(@user2.sharings.last).to eq(sharing)
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
21
|
it 'can share his own repo_item with other users' do
|
23
22
|
rep = FactoryGirl.build(:rm_repo_file)
|
24
23
|
rep.owner = @user1
|
@@ -224,9 +223,9 @@ describe 'HasRepository' do
|
|
224
223
|
|
225
224
|
@user1.share(nested, @user2)
|
226
225
|
|
227
|
-
expect(nested.
|
228
|
-
expect(parent.
|
229
|
-
expect(parent.
|
226
|
+
expect(nested.can_be_shared_without_nesting?).to eq(true) # Returns true (because `nested` is shared but there is no nested sharing)
|
227
|
+
expect(parent.can_be_shared_without_nesting?).to eq(false) # Returns false (because there is a sharing on one of his descendants)
|
228
|
+
expect(parent.can_be_shared_without_nesting?).to eq(false) # Returns false (because there is a sharing on one of his ancestors)
|
230
229
|
|
231
230
|
# Here we can't share 'Parent' or 'Children' because it already exist a nested sharing.
|
232
231
|
expect(@user1.share(parent, @user2)).to eq(false) # Returns false
|
@@ -143,6 +143,24 @@ describe 'RepoItem' do
|
|
143
143
|
@user2.delete_download_path()
|
144
144
|
end
|
145
145
|
|
146
|
+
it 'can copy a hard folder (nested folders and files)' do
|
147
|
+
nested = @user2.create_folder!('a')
|
148
|
+
a = @user2.create_folder!('a', source_folder: nested)
|
149
|
+
b = @user2.create_folder!('b', source_folder: a)
|
150
|
+
c = @user2.create_folder!('c', source_folder: b)
|
151
|
+
d = @user2.create_folder!('a', source_folder: c)
|
152
|
+
e = @user2.create_folder!('a', source_folder: d)
|
153
|
+
|
154
|
+
file = FactoryGirl.build(:rm_repo_file)
|
155
|
+
#@user2.create_file!(file, source_folder: a)
|
156
|
+
#@user2.create_file!(file, source_folder: nested)
|
157
|
+
@user2.create_file!(file, source_folder: c)
|
158
|
+
@user2.share!(nested, @user1, repo_item_permissions: {can_read: true})
|
159
|
+
copy = @user1.copy_repo_item!(nested)
|
160
|
+
@user1.download(copy)
|
161
|
+
@user1.delete_download_path()
|
162
|
+
end
|
163
|
+
|
146
164
|
it 'can\'t add a repo_item with the same name in a folder' do
|
147
165
|
root_folder = @user1.create_folder('Root folder')
|
148
166
|
root_folder.add(@user1_folder)
|
@@ -151,7 +169,7 @@ describe 'RepoItem' do
|
|
151
169
|
test_folder = @user1.create_folder('Test folder', source_folder: root_test_folder)
|
152
170
|
@user1.create_folder('Nested test folder', source_folder: test_folder)
|
153
171
|
|
154
|
-
@user1.move_repo_item(test_folder,
|
172
|
+
@user1.move_repo_item(test_folder, @user1_folder)
|
155
173
|
|
156
174
|
expect(test_folder.parent_id).to eq(@user1_folder.id)
|
157
175
|
end
|
@@ -244,15 +262,15 @@ describe 'RepoItem' do
|
|
244
262
|
file = @user2.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"))
|
245
263
|
folder = @user2.create_folder('folder')
|
246
264
|
|
247
|
-
@user2.move_repo_item!(file,
|
265
|
+
@user2.move_repo_item!(file, folder)
|
248
266
|
|
249
267
|
expect(folder.children).to eq([file])
|
250
268
|
end
|
251
269
|
|
252
|
-
it "can move a folder
|
270
|
+
it "can move a folder into a folder" do
|
253
271
|
folder = @user2.create_folder('folder')
|
254
272
|
folder2 = @user2.create_folder('folder2')
|
255
|
-
@user2.move_repo_item!(folder,
|
273
|
+
@user2.move_repo_item!(folder, folder2)
|
256
274
|
|
257
275
|
expect(folder2.children).to eq([folder])
|
258
276
|
end
|
@@ -261,7 +279,35 @@ describe 'RepoItem' do
|
|
261
279
|
file = @user2.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"))
|
262
280
|
folder = @user2.create_folder('folder')
|
263
281
|
|
264
|
-
expect(@user2.move_repo_item
|
282
|
+
expect(@user2.move_repo_item(folder, file)).to eq(false)
|
283
|
+
end
|
284
|
+
|
285
|
+
it "move_repo_item default to the root of the self owner" do
|
286
|
+
file = @user1.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"), source_folder: @user1_folder)
|
287
|
+
|
288
|
+
@user1.delete_repo_item!(@user1_file)
|
289
|
+
#expect(@user1.root_repo_items.count).to eq(1)
|
290
|
+
@user1.move_repo_item!(file)
|
291
|
+
expect(@user1.root_repo_items.count).to eq(2)
|
292
|
+
end
|
293
|
+
|
294
|
+
it "move_repo_item can't move a file into a root if file already exist" do
|
295
|
+
file = @user1.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"), source_folder: @user1_folder)
|
296
|
+
expect(@user1.move_repo_item(file)).to eq(false)
|
265
297
|
end
|
266
298
|
|
299
|
+
it "move_repo_item can't move if no permission" do
|
300
|
+
file = @user1.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"), source_folder: @user1_folder)
|
301
|
+
expect(@user2.move_repo_item(file)).to eq(false)
|
302
|
+
end
|
303
|
+
|
304
|
+
it "can't copy a file withour permission" do
|
305
|
+
expect(@user2.copy_repo_item(@user1_file)).to eq(false)
|
306
|
+
end
|
307
|
+
|
308
|
+
it "can copy a file with read permission" do
|
309
|
+
@user1.share(@user1_file, @user2, repo_item_permissions: {can_read:true})
|
310
|
+
@user2.copy_repo_item(@user1_file)
|
311
|
+
expect(@user2.root_repo_items.count).to eq(1)
|
312
|
+
end
|
267
313
|
end
|
data/spec/models/share_spec.rb
CHANGED
@@ -35,6 +35,7 @@ describe 'Sharing' do
|
|
35
35
|
expect(@user2.shared_repo_items.count).to eq(0)
|
36
36
|
end
|
37
37
|
|
38
|
+
|
38
39
|
it 'can remove a member in a sharing with permission' do
|
39
40
|
sharing = @user1.share(@user1_file, @user2, {sharing_permissions:{can_add: false, can_remove: true}})
|
40
41
|
@user1.add_members_to(sharing, @user3)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: repository-manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yves Baumann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02
|
11
|
+
date: 2014-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|