repository-manager 0.0.22 → 0.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -2
- data/app/models/repo_folder.rb +23 -6
- data/app/models/repo_item.rb +1 -1
- data/app/models/sharing.rb +2 -1
- data/db/migrate/20131018214212_create_repository_manager.rb +6 -4
- data/lib/generators/repository_manager/templates/initializer.rb +4 -0
- data/lib/repository-manager.rb +4 -0
- data/lib/repository_manager/has_repository.rb +41 -24
- data/lib/repository_manager/version.rb +1 -1
- data/spec/has_repository_spec.rb +0 -3
- data/spec/models/repository_spec.rb +25 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/spec_test_helper.rb +5 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e54eb1966aef674b05d284cd6998ef0b414aa887
|
4
|
+
data.tar.gz: e6e295ed9fa6b70719c7ef318b7fc0944d253d00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a823adf63f6394fda1d473b32ecd8c7f49133b454c30cdc78d8096d94bfb2833b174b73ca4986c086cd7e49e2571363cba0e66aa3c9dbc580b2aabcd7742228
|
7
|
+
data.tar.gz: 63474ee1c92accbf200c279391daaa3b6f537edd200dee80c2a978da08cb6690155478bf185dac871ce84a115f5be0463729a8f1073063df5719942c06a31de5
|
data/README.md
CHANGED
@@ -408,8 +408,7 @@ the_folder.delete_zip
|
|
408
408
|
## TODO
|
409
409
|
|
410
410
|
- Test the rename folder method
|
411
|
-
-
|
412
|
-
- Verifier que le nom du dossier n'existe pas dans la racine du repo
|
411
|
+
- Test if the file already exist before creating or moving it
|
413
412
|
- Do the rename file method
|
414
413
|
- Write the documentation for the rename method
|
415
414
|
- Write the methods : copy, share_link.
|
data/app/models/repo_folder.rb
CHANGED
@@ -6,10 +6,13 @@ class RepoFolder < RepoItem
|
|
6
6
|
validates :name, presence: true
|
7
7
|
|
8
8
|
# Add a repo_item in the folder.
|
9
|
-
|
9
|
+
# second param destroy the repo_item if it can move it.
|
10
|
+
def add!(repo_item, destroy_if_fail = false)
|
10
11
|
# We check if this name already exist
|
11
12
|
#if repo_item.children.exists?(:name => repo_item.name)
|
12
|
-
if
|
13
|
+
if name_exist_in_children?(repo_item.name)
|
14
|
+
# we delete the repo if asked
|
15
|
+
repo_item.destroy if destroy_if_fail
|
13
16
|
raise RepositoryManager::RepositoryManagerException.new("add failed. The repo_item '#{repo_item.name}' already exist in the folder '#{name}'")
|
14
17
|
else
|
15
18
|
repo_item.update_attribute :parent, self
|
@@ -26,13 +29,12 @@ class RepoFolder < RepoItem
|
|
26
29
|
|
27
30
|
# Rename the item
|
28
31
|
def rename!(new_name)
|
29
|
-
|
30
|
-
sibling_ids_without_itself = self.sibling_ids.delete(self.id)
|
31
|
-
# We check if another item has the same name
|
32
|
-
if RepoItem.where(name: self.name).where(id: sibling_ids_without_itself).first
|
32
|
+
if name_exist_in_siblings?(new_name)
|
33
33
|
raise RepositoryManager::RepositoryManagerException.new("rename failed. The repo_item '#{new_name}' already exist.'")
|
34
34
|
else
|
35
35
|
self.name = new_name
|
36
|
+
# TODO see if I have to save or not
|
37
|
+
save!
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
@@ -104,6 +106,21 @@ class RepoFolder < RepoItem
|
|
104
106
|
FileUtils.rm_rf(path)
|
105
107
|
end
|
106
108
|
|
109
|
+
# Returns true or false if the name exist in this folder
|
110
|
+
def name_exist_in_children?(name)
|
111
|
+
#RepoItem.where(name: name).where(id: child_ids).first ? true : false
|
112
|
+
RepoItem.where('name = ? OR file = ?', name, name).where(id: child_ids).first ? true : false
|
113
|
+
end
|
114
|
+
|
115
|
+
# Returns true or false if the name exist in siblings
|
116
|
+
def name_exist_in_siblings?(name)
|
117
|
+
# We take all siblings without itself
|
118
|
+
sibling_ids_without_itself = self.sibling_ids.delete(self.id)
|
119
|
+
# We check if another item has the same name
|
120
|
+
#RepoItem.where(name: name).where(id: sibling_ids_without_itself).first ? true : false
|
121
|
+
RepoItem.where('name = ? OR file = ?', name, name).where(id: sibling_ids_without_itself).first ? true : false
|
122
|
+
end
|
123
|
+
|
107
124
|
private
|
108
125
|
|
109
126
|
# Returns the default path of the zip file
|
data/app/models/repo_item.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
class RepoItem < ActiveRecord::Base
|
2
2
|
attr_accessible :type if RepositoryManager.protected_attributes?
|
3
3
|
|
4
|
-
|
5
4
|
has_ancestry
|
6
5
|
|
7
6
|
# Associate with the User Class
|
8
7
|
belongs_to :owner, :polymorphic => true
|
9
8
|
has_many :sharings, :dependent => :destroy
|
10
9
|
#has_many :members, through: :sharings
|
10
|
+
belongs_to :user, class_name: RepositoryManager.user_model if RepositoryManager.user_model
|
11
11
|
|
12
12
|
if Rails::VERSION::MAJOR == 4
|
13
13
|
scope :files, -> { where type: 'RepoFile' }
|
data/app/models/sharing.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
class Sharing < ActiveRecord::Base
|
2
2
|
attr_accessible :can_read, :can_create, :can_update, :can_delete, :can_share if RepositoryManager.protected_attributes?
|
3
3
|
|
4
|
-
|
5
4
|
has_many :sharings_members, :dependent => :destroy
|
6
5
|
belongs_to :owner, :polymorphic => true
|
7
6
|
belongs_to :repo_item
|
7
|
+
belongs_to :user, class_name: RepositoryManager.user_model if RepositoryManager.user_model
|
8
|
+
|
8
9
|
|
9
10
|
#scope :recipient, lambda { |recipient|
|
10
11
|
# joins(:receipts).where('receipts.receiver_id' => recipient.id,'receipts.receiver_type' => recipient.class.base_class.to_s)
|
@@ -3,8 +3,9 @@ class CreateRepositoryManager < ActiveRecord::Migration
|
|
3
3
|
def change
|
4
4
|
|
5
5
|
create_table :sharings do |t|
|
6
|
-
t.references :owner, polymorphic: true
|
7
|
-
t.references :
|
6
|
+
t.references :owner, polymorphic: true, index: true
|
7
|
+
t.references :user, index: true
|
8
|
+
t.references :repo_item, index: true
|
8
9
|
t.boolean :can_create, :default => false
|
9
10
|
t.boolean :can_read, :default => false
|
10
11
|
t.boolean :can_update, :default => false
|
@@ -20,9 +21,10 @@ class CreateRepositoryManager < ActiveRecord::Migration
|
|
20
21
|
end
|
21
22
|
|
22
23
|
create_table :repo_items do |t|
|
23
|
-
t.references :owner, polymorphic: true
|
24
|
+
t.references :owner, polymorphic: true, index: true
|
25
|
+
t.references :user, index: true
|
24
26
|
t.string :ancestry
|
25
|
-
t.integer :ancestry_depth, :default => 0
|
27
|
+
#t.integer :ancestry_depth, :default => 0
|
26
28
|
t.string :name
|
27
29
|
t.float :file_size
|
28
30
|
t.string :content_type
|
@@ -6,6 +6,10 @@ RepositoryManager.setup do |config|
|
|
6
6
|
# Default sharing permissions that an object has when he is added in a sharing.
|
7
7
|
config.default_sharing_permissions = { can_add: false, can_remove: false }
|
8
8
|
|
9
|
+
# Note here the user model. Default : 'User'
|
10
|
+
# Def false if you don't want to register the user
|
11
|
+
#config.user_model = 'User'
|
12
|
+
|
9
13
|
# Default path for generating the zip file when a user want to download a folder
|
10
14
|
# Default is : "download/#{member.class.to_s.underscore}/#{member.id}/#{self.class.to_s.underscore}/#{self.id}/"
|
11
15
|
#config.default_zip_path = true
|
data/lib/repository-manager.rb
CHANGED
@@ -63,6 +63,7 @@ module RepositoryManager
|
|
63
63
|
|
64
64
|
sharing = Sharing.new(repo_item_permissions)
|
65
65
|
sharing.owner = self
|
66
|
+
sharing.user = current_user if RepositoryManager.user_model
|
66
67
|
|
67
68
|
sharing.add_members(members, sharing_permissions)
|
68
69
|
|
@@ -99,13 +100,19 @@ module RepositoryManager
|
|
99
100
|
folder.name = name
|
100
101
|
end
|
101
102
|
folder.owner = self
|
103
|
+
folder.user = current_user if RepositoryManager.user_model
|
102
104
|
|
103
|
-
#
|
104
|
-
|
105
|
-
|
106
|
-
|
105
|
+
# If we are in root path we check if we can add this folder name
|
106
|
+
if !source_folder && repo_item_name_exist_in_root?(name)
|
107
|
+
raise RepositoryManager::RepositoryManagerException.new("create folder failed. The repo_item '#{name}' already exist in the root folder.")
|
108
|
+
end
|
109
|
+
|
110
|
+
unless folder.save
|
107
111
|
raise RepositoryManager::RepositoryManagerException.new("create_folder failed. Can\'t save the folder '#{name}'.")
|
108
112
|
end
|
113
|
+
|
114
|
+
# It raise an error if name already exist and destroy the folder
|
115
|
+
source_folder.add!(folder, true) if source_folder
|
109
116
|
else
|
110
117
|
raise RepositoryManager::AuthorisationException.new("create_folder failed. You don't have the permission to create a folder in '#{source_folder.name}'")
|
111
118
|
end
|
@@ -146,31 +153,29 @@ module RepositoryManager
|
|
146
153
|
if can_create?(source_folder)
|
147
154
|
if file.class.name == 'RepoFile'
|
148
155
|
repo_file = file
|
149
|
-
repo_file.owner = self
|
150
|
-
unless repo_file.save
|
151
|
-
raise RepositoryManager::RepositoryManagerException.new("create_file failed. The file '#{name}' can't be save")
|
152
|
-
end
|
153
156
|
else
|
154
157
|
repo_file = RepoFile.new
|
155
158
|
repo_file.file = file
|
156
|
-
repo_file.owner = self
|
157
|
-
unless repo_file.save
|
158
|
-
raise RepositoryManager::RepositoryManagerException.new("create_file failed. The file '#{name}' can't be save")
|
159
|
-
end
|
160
159
|
end
|
161
160
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
file.
|
168
|
-
raise RepositoryManager::RepositoryManagerException.new("create_file failed. The file '#{name}' already exist in folder '#{source_folder.name}'")
|
161
|
+
repo_file.owner = self
|
162
|
+
repo_file.user = current_user if RepositoryManager.user_model
|
163
|
+
|
164
|
+
# If we are in root path we check if we can add this file name
|
165
|
+
if !source_folder && repo_item_name_exist_in_root?(repo_file.file.identifier)
|
166
|
+
raise RepositoryManager::RepositoryManagerException.new("create file failed. The repo_item '#{repo_file.file.identifier}' already exist in the root folder.")
|
169
167
|
end
|
168
|
+
|
169
|
+
unless repo_file.save
|
170
|
+
raise RepositoryManager::RepositoryManagerException.new("create_file failed. The file can't be save")
|
171
|
+
end
|
172
|
+
|
173
|
+
# It raise an error if name already exist and destroy the file
|
174
|
+
source_folder.add!(repo_file, true) if source_folder
|
170
175
|
else
|
171
|
-
|
172
|
-
raise RepositoryManager::AuthorisationException.new("create_file failed. The file '#{name}' already exist in folder '#{source_folder.name}'")
|
176
|
+
raise RepositoryManager::AuthorisationException.new("create_file failed. You don't have the permission to create a file")
|
173
177
|
end
|
178
|
+
repo_file
|
174
179
|
end
|
175
180
|
|
176
181
|
def create_file(file, source_folder = nil)
|
@@ -378,6 +383,17 @@ module RepositoryManager
|
|
378
383
|
"#{prefix}#{self.class.to_s.underscore}/#{self.id}/"
|
379
384
|
end
|
380
385
|
|
386
|
+
# Returns true of false if the name exist in the root path of this instance
|
387
|
+
def repo_item_name_exist_in_root?(name)
|
388
|
+
# add : or file : name
|
389
|
+
#RepoItem.where(name: name).where(owner: self).where(ancestry: nil).first ? true : false
|
390
|
+
#puts RepoItem.where('name = ? OR file = ?', name, name).where(owner: self).where(ancestry: nil).first.inspect
|
391
|
+
#puts self.inspect
|
392
|
+
|
393
|
+
RepoItem.where('name = ? OR file = ?', name, name).where(owner: self).where(ancestry: nil).first ? true : false
|
394
|
+
|
395
|
+
end
|
396
|
+
|
381
397
|
private
|
382
398
|
|
383
399
|
# Return if you can do or not this action in the sharing
|
@@ -477,18 +493,19 @@ module RepositoryManager
|
|
477
493
|
# We check if another item has the same name
|
478
494
|
|
479
495
|
if source_folder
|
496
|
+
#TODO Optimiser, récupérer tout les instances contenants le nom, puis faire la boucle (pas boucle de requete)
|
480
497
|
# We check if another item has the same name
|
481
|
-
until !
|
498
|
+
until !source_folder.name_exist_in_children?(name) do
|
482
499
|
if i == ''
|
483
500
|
i = 1
|
484
501
|
end
|
485
502
|
i += 1
|
486
503
|
name = "#{I18n.t 'repository_manager.models.repo_folder.name'}#{i}"
|
487
504
|
end
|
488
|
-
|
489
505
|
else
|
506
|
+
#TODO Optimiser, récupérer tout les instances contenants le nom, puis faire la boucle (pas boucle de requete)
|
490
507
|
# Si il n'a pas de parent, racine
|
491
|
-
until !
|
508
|
+
until !repo_item_name_exist_in_root?(name) do
|
492
509
|
if i == ''
|
493
510
|
i = 1
|
494
511
|
end
|
data/spec/has_repository_spec.rb
CHANGED
@@ -7,9 +7,6 @@ describe 'HasRepository' do
|
|
7
7
|
@user2 = FactoryGirl.create(:user)
|
8
8
|
@user3 = FactoryGirl.create(:user)
|
9
9
|
@group1 = FactoryGirl.create(:group)
|
10
|
-
#@group2 = FactoryGirl.create(:group)
|
11
|
-
#@group3 = FactoryGirl.create(:group)
|
12
|
-
#@fileAlone = FactoryGirl.create(:app_file)
|
13
10
|
end
|
14
11
|
|
15
12
|
it "should be associate with shares" do
|
@@ -174,4 +174,29 @@ describe 'RepoItem' do
|
|
174
174
|
expect(folder4.name).to eq('translation missing: en.repository_manager.models.repo_folder.name2')
|
175
175
|
|
176
176
|
end
|
177
|
+
|
178
|
+
it 'can\'t create a folder with the same name at root' do
|
179
|
+
@user1.create_folder('test')
|
180
|
+
folder2 = @user1.create_folder('test')
|
181
|
+
|
182
|
+
expect(folder2).to eq(false)
|
183
|
+
end
|
184
|
+
|
185
|
+
it "can't create too file with the same name at root" do
|
186
|
+
file = @user2.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"))
|
187
|
+
expect(file.name).to eq('textfile.txt')
|
188
|
+
file2 = @user2.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"))
|
189
|
+
expect(file2).to eq(false)
|
190
|
+
|
191
|
+
#@user1.create_file!(File.open("#{Rails.root}/../fixture/textfile.txt"))
|
192
|
+
end
|
193
|
+
|
194
|
+
it "can't create too file with the same name in folder" do
|
195
|
+
file = @user1.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"), @user1_folder)
|
196
|
+
expect(file.name).to eq('textfile.txt')
|
197
|
+
file2 = @user1.create_file(File.open("#{Rails.root}/../fixture/textfile.txt"),@user1_folder)
|
198
|
+
expect(file2).to eq(false)
|
199
|
+
|
200
|
+
#@user1.create_file!(File.open("#{Rails.root}/../fixture/textfile.txt"), @user1_folder)
|
201
|
+
end
|
177
202
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -18,6 +18,10 @@ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
|
18
18
|
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
19
19
|
end
|
20
20
|
|
21
|
+
RSpec.configure do |config|
|
22
|
+
config.include SpecTestHelper#, :type => :controller
|
23
|
+
end
|
24
|
+
|
21
25
|
|
22
26
|
#
|
23
27
|
#class ActiveSupport::TestCase
|
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.0.
|
4
|
+
version: 0.0.24
|
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-
|
11
|
+
date: 2014-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -192,6 +192,7 @@ files:
|
|
192
192
|
- spec/models/share_spec.rb
|
193
193
|
- spec/repository_manager_spec.rb
|
194
194
|
- spec/spec_helper.rb
|
195
|
+
- spec/support/spec_test_helper.rb
|
195
196
|
homepage: https://github.com/Texicitys/repository-manager
|
196
197
|
licenses:
|
197
198
|
- MIT
|
@@ -267,3 +268,4 @@ test_files:
|
|
267
268
|
- spec/models/share_spec.rb
|
268
269
|
- spec/repository_manager_spec.rb
|
269
270
|
- spec/spec_helper.rb
|
271
|
+
- spec/support/spec_test_helper.rb
|