repository-manager 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile.lock +1 -1
- data/README.md +41 -3
- data/app/models/repo_folder.rb +2 -2
- data/app/models/repo_item.rb +15 -1
- data/lib/repository-manager.rb +3 -0
- data/lib/repository_manager/exceptions.rb +3 -0
- data/lib/repository_manager/has_repository.rb +48 -13
- data/lib/repository_manager/version.rb +1 -1
- data/repository-manager.gemspec +6 -6
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/has_repository_spec.rb +49 -3
- metadata +23 -33
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MjA2ODVjZTZlZTI0ZWM2N2UwOGJhM2Q2NTc1ZTk5Y2IyZDBhOWQ0MQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
N2RlYjllMzAzMTFkNmEzODY4MDU3NGZlODRlY2Q3ZDU3ODk5MWJkYw==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MzM1N2JlOGIxYzMyMDdkMDI3MGMwNjZjMTJlNGNjNDhiY2VmYjg4YjZkZjNk
|
10
|
+
YWVlNmZkYzkzMWQwZjY5ZjBiMzI5NDEyNmZmM2Y1MDg3MTAzODU0ZTBmYmZm
|
11
|
+
YzFkZDNhZjQ2NTExMGQyMGFiYjc2YWIyZmYyZGUzNTI4MWNiNTY=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
Y2YyYTFjNTQ2NmFkYTYxOGE5NWJhMzlmMzFiOGNmNTFkYjVhMGU2YjYwNDRh
|
14
|
+
MjRkYjA5Y2FkMWYyNDBjZGRkYjA2ZmQ5NDBlN2IwZmRiMjFhY2VmNGNjZGM1
|
15
|
+
MGJiYTFiM2RiZjZkMDAzY2Y0MmVhYTU4NGVlNjQyYzc1MTdhMGI=
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -55,10 +55,14 @@ RepositoryManager.setup do |config|
|
|
55
55
|
|
56
56
|
# Default permissions that an object has when he is added in a sharing.
|
57
57
|
config.default_sharing_permissions = { can_add: false, can_remove: false }
|
58
|
+
|
59
|
+
# Default path for generating the zip file when a user want to download a folder
|
60
|
+
# Default is : "download/#{member.class.to_s.underscore}/#{member.id}/#{self.class.to_s.underscore}/#{self.id}/"
|
61
|
+
#config.default_zip_path = true
|
58
62
|
end
|
59
63
|
```
|
60
64
|
|
61
|
-
For instance, if you want that a default sharing is totaly free, just put all default parameters to `true` :
|
65
|
+
For instance, if you want that a default sharing is totaly free (for edit, delete, etc), just put all default parameters to `true` :
|
62
66
|
```ruby
|
63
67
|
RepositoryManager.setup do |config|
|
64
68
|
config.default_repo_item_permissions = { can_read: true, can_create: true, can_update: true, can_delete: true, can_share: true }
|
@@ -107,6 +111,12 @@ A `repo_item` is an item in a repository, it can be:
|
|
107
111
|
|
108
112
|
A folder can contains files and folders. Like in a real tree files and folders.
|
109
113
|
|
114
|
+
A few methods are written in those two ways :
|
115
|
+
- method(arg, options)
|
116
|
+
- method!(arg, options) (note the "!")
|
117
|
+
|
118
|
+
The two methods do the same, but the one with the "!" returns an Exeption error if it is a problem (AuthorisationException for instance) and the method without "!" return false if it has a problem.
|
119
|
+
|
110
120
|
### How can I create/delete/move a repo_item (file or folder)
|
111
121
|
|
112
122
|
You just have to call the `has_repository` methods `create_file`, `create_folder`, or `delete_repo_item`.
|
@@ -186,6 +196,7 @@ user1.delete_repo_item(file2)
|
|
186
196
|
|
187
197
|
Now, user1 want to share his folder 'The new folder' with a Group object `group1` et another User object `user2`. You can use the `has_repository` method `share(repo_item, member, options = nil)`.
|
188
198
|
|
199
|
+
|
189
200
|
```ruby
|
190
201
|
# user1 wants to share the_new_folder with group1 and user2
|
191
202
|
|
@@ -208,6 +219,33 @@ sharing = user1.share(the_new_folder, members, options)
|
|
208
219
|
|
209
220
|
See the chapter [Authorisations](#authorisations) for more details.
|
210
221
|
|
222
|
+
### Repository Manager and the nested sharing
|
223
|
+
|
224
|
+
Repository Manager actualy don't accept nested sharing.
|
225
|
+
|
226
|
+
```ruby
|
227
|
+
|
228
|
+
parent = @user1.create_folder('Parent')
|
229
|
+
nested = @user1.create_folder('Nested', parent)
|
230
|
+
children = @user1.create_folder('Children', nested)
|
231
|
+
|
232
|
+
# @user1 own repository :
|
233
|
+
# |-- 'Parent'
|
234
|
+
# | |-- 'Nested'
|
235
|
+
# | | |-- 'Children'
|
236
|
+
|
237
|
+
@user1.share(nested, @user2)
|
238
|
+
|
239
|
+
nested.has_nested_sharing? # Returns false (because `nested` is shared but there is no nested sharing)
|
240
|
+
parent.has_nested_sharing? # Returns true (because there is a sharing on one of his descendants)
|
241
|
+
children.has_nested_sharing? # Returns true (because there is a sharing on one of his ancestors)
|
242
|
+
|
243
|
+
# Here we can't share 'Parent' or 'Children' because it already exist a nested sharing.
|
244
|
+
@user1.share(parent, @user2) # Returns false
|
245
|
+
@user1.share!(parent, @user2) # Raise a NestedSharingException (note the "!")
|
246
|
+
@user1.share!(children, @user2) # Raise a NestedSharingException (note the "!")
|
247
|
+
```
|
248
|
+
|
211
249
|
### How can I see my repo_items
|
212
250
|
|
213
251
|
You can have two kind of repo_items:
|
@@ -239,9 +277,9 @@ Recall: a repo_item can be:
|
|
239
277
|
```ruby
|
240
278
|
# We want to know if the object repo_item is a file or a folder:
|
241
279
|
if repo_item.type == 'RepoFolder'
|
242
|
-
repo_item.name #=> Returns the name of the folder ('New folder').
|
280
|
+
repo_item.name #=> Returns the name of the folder (for instance : 'New folder').
|
243
281
|
elsif repo_item.type == 'RepoFile'
|
244
|
-
repo_item.name #=> Returns the name of the file ('file.png').
|
282
|
+
repo_item.name #=> Returns the name of the file (for instance : 'file.png').
|
245
283
|
# Here is the file
|
246
284
|
repo_item.file.url # => '/url/to/file.png'
|
247
285
|
repo_item.file.current_path # => 'path/to/file.png'
|
data/app/models/repo_folder.rb
CHANGED
@@ -98,7 +98,7 @@ class RepoFolder < RepoItem
|
|
98
98
|
# If this is a file, we just add this file to the zip
|
99
99
|
if child.type == 'RepoFile'
|
100
100
|
# Add the file in the zip if the object is authorised to read it.
|
101
|
-
zf.add("#{prefix}#{child.name}", child.file.current_path) if object == nil || object.can_read?(child)
|
101
|
+
zf.add("#{prefix}#{child.name}", child.file.current_path) if object == nil || !RepositoryManager.accept_nested_sharing || object.can_read?(child)
|
102
102
|
elsif child.type == 'RepoFolder'
|
103
103
|
# If this folder has children, we do it again with it children
|
104
104
|
if child.has_children?
|
@@ -106,7 +106,7 @@ class RepoFolder < RepoItem
|
|
106
106
|
add_repo_item_to_zip(RepoItem.find(child.child_ids), zf, object, "#{prefix}#{child.name}/")
|
107
107
|
else
|
108
108
|
# We just create the folder if it is empty
|
109
|
-
zf.mkdir(child.name) if object == nil || object.can_read?(child)
|
109
|
+
zf.mkdir(child.name) if object == nil || !RepositoryManager.accept_nested_sharing || object.can_read?(child)
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
data/app/models/repo_item.rb
CHANGED
@@ -45,7 +45,21 @@ class RepoItem < ActiveRecord::Base
|
|
45
45
|
rescue RepositoryManager::RepositoryManagerException
|
46
46
|
false
|
47
47
|
end
|
48
|
-
|
49
48
|
end
|
50
49
|
|
50
|
+
# Returns true if it exist a sharing in the ancestors of descendant_ids of the repo_item (without itself)
|
51
|
+
def has_nested_sharing?
|
52
|
+
# An array with the ids of all ancestors and descendants
|
53
|
+
ancestor_and_descendant_ids = []
|
54
|
+
ancestor_and_descendant_ids << self.descendant_ids if !self.descendant_ids.empty?
|
55
|
+
ancestor_and_descendant_ids << self.ancestor_ids if !self.ancestor_ids.empty?
|
56
|
+
|
57
|
+
# If it is a sharing, it returns true
|
58
|
+
if Sharing.where(repo_item_id: ancestor_and_descendant_ids).count > 0
|
59
|
+
true
|
60
|
+
else
|
61
|
+
false
|
62
|
+
end
|
51
63
|
end
|
64
|
+
|
65
|
+
end
|
data/lib/repository-manager.rb
CHANGED
@@ -36,6 +36,15 @@ module RepositoryManager
|
|
36
36
|
# <tt>:can_add</tt> - Specify if the member can add objects to the sharing
|
37
37
|
# <tt>:can_remove</tt> - Specify if the member can remove object to the sharing
|
38
38
|
def share!(repo_item, members, options = {})
|
39
|
+
|
40
|
+
# Nested sharing are not accepted
|
41
|
+
if !RepositoryManager.accept_nested_sharing
|
42
|
+
# Check if no other sharing exist in the path
|
43
|
+
if repo_item.has_nested_sharing?
|
44
|
+
raise RepositoryManager::NestedSharingException.new("sharing failed. Another sharing already exist on the subtree or an ancestor '#{repo_item.name}'")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
39
48
|
authorisations = get_authorisations(repo_item)
|
40
49
|
|
41
50
|
# Here we look if the instance has the authorisation for making a sharing
|
@@ -49,6 +58,7 @@ module RepositoryManager
|
|
49
58
|
repo_item_permissions = options[:repo_item_permissions] if options[:repo_item_permissions]
|
50
59
|
sharing_permissions = options[:sharing_permissions] if options[:sharing_permissions]
|
51
60
|
|
61
|
+
# Correct the item permission with accepted permissions
|
52
62
|
repo_item_permissions = make_repo_item_permissions(repo_item_permissions, authorisations)
|
53
63
|
|
54
64
|
sharing = Sharing.new(repo_item_permissions)
|
@@ -68,14 +78,16 @@ module RepositoryManager
|
|
68
78
|
def share(repo_item, members, options = {})
|
69
79
|
begin
|
70
80
|
share!(repo_item, members, options)
|
71
|
-
rescue RepositoryManager::AuthorisationException
|
81
|
+
rescue RepositoryManager::AuthorisationException, RepositoryManager::NestedSharingException
|
72
82
|
false
|
73
83
|
end
|
74
84
|
end
|
75
85
|
|
76
86
|
# Create a folder with the name (name) in the directory (source_folder)
|
77
87
|
# Returns the object of the folder created if it is ok
|
78
|
-
# Returns
|
88
|
+
# Returns an Exception if the folder is not created
|
89
|
+
# RepositoryManagerException if the name already exist
|
90
|
+
# AuthorisationException if the object don't have the permission
|
79
91
|
def create_folder!(name = 'New folder', source_folder = nil)
|
80
92
|
# If he want to create a folder in a directory, we have to check if he have the authorisation
|
81
93
|
if can_create?(source_folder)
|
@@ -90,7 +102,7 @@ module RepositoryManager
|
|
90
102
|
else
|
91
103
|
# The add didn't works, we delete the folder
|
92
104
|
folder.destroy
|
93
|
-
raise RepositoryManager::RepositoryManagerException.new("create_folder failed. The folder '#{name}' already exist in folder '#{source_folder.name}'")
|
105
|
+
raise RepositoryManager::RepositoryManagerException.new("create_folder failed. The folder name '#{name}' already exist in folder '#{source_folder.name}'")
|
94
106
|
end
|
95
107
|
else
|
96
108
|
raise RepositoryManager::AuthorisationException.new("create_folder failed. You don't have the permission to create a folder in '#{source_folder.name}'")
|
@@ -263,20 +275,31 @@ module RepositoryManager
|
|
263
275
|
can_do?('create', repo_item, authorisations)
|
264
276
|
end
|
265
277
|
|
266
|
-
#
|
278
|
+
# Returns true if you can edit the repo, false else
|
267
279
|
def can_update?(repo_item, authorisations = nil)
|
268
280
|
can_do?('update', repo_item, authorisations)
|
269
281
|
end
|
270
282
|
|
271
|
-
#
|
283
|
+
# Returns true if you can delete the repo, false else
|
272
284
|
def can_delete?(repo_item, authorisations = nil)
|
273
285
|
can_do?('delete', repo_item, authorisations)
|
274
286
|
end
|
275
287
|
|
276
|
-
|
277
|
-
def has_sharing?(repo_item)
|
278
|
-
|
279
|
-
|
288
|
+
## Returns true if it exist a sharing in the ancestors of descendant_ids of the repo_item (without itself)
|
289
|
+
#def has_sharing?(repo_item)
|
290
|
+
# # An array with the ids of all ancestors and descendants
|
291
|
+
# ancestor_and_descendant_ids = []
|
292
|
+
# ancestor_and_descendant_ids << repo_item.descendant_ids if !repo_item.descendant_ids.empty?
|
293
|
+
# ancestor_and_descendant_ids << repo_item.ancestor_ids if !repo_item.ancestor_ids.empty?
|
294
|
+
#
|
295
|
+
# # If it is a sharing, it returns true
|
296
|
+
# if self.sharings.where(repo_item_id: ancestor_and_descendant_ids).count > 0
|
297
|
+
# true
|
298
|
+
# else
|
299
|
+
# false
|
300
|
+
# end
|
301
|
+
#
|
302
|
+
#end
|
280
303
|
|
281
304
|
# Return true if you can add a member in this sharing, false else
|
282
305
|
def can_add_to?(sharing)
|
@@ -348,7 +371,7 @@ module RepositoryManager
|
|
348
371
|
|
349
372
|
# Return if you can do or not this action (what)
|
350
373
|
def can_do?(what, repo_item, authorisations = nil)
|
351
|
-
#If we pass no authorisations we have to get it
|
374
|
+
# If we pass no authorisations we have to get it
|
352
375
|
if authorisations == nil
|
353
376
|
authorisations = get_authorisations(repo_item)
|
354
377
|
end
|
@@ -357,13 +380,25 @@ module RepositoryManager
|
|
357
380
|
when 'read'
|
358
381
|
authorisations == true || (authorisations.kind_of?(Hash) && authorisations[:can_read] == true)
|
359
382
|
when 'delete'
|
360
|
-
|
383
|
+
if RepositoryManager.accept_nested_sharing
|
384
|
+
# TODO implement to look if he can delete all the folder
|
385
|
+
else
|
386
|
+
authorisations == true || (authorisations.kind_of?(Hash) && authorisations[:can_delete] == true)
|
387
|
+
end
|
361
388
|
when 'update'
|
362
389
|
authorisations == true || (authorisations.kind_of?(Hash) && authorisations[:can_update] == true)
|
363
390
|
when 'share'
|
364
|
-
|
391
|
+
if RepositoryManager.accept_nested_sharing
|
392
|
+
# TODO implement to look if he can delete all the folder
|
393
|
+
else
|
394
|
+
authorisations == true || (authorisations.kind_of?(Hash) && authorisations[:can_share] == true)
|
395
|
+
end
|
365
396
|
when 'create'
|
366
|
-
|
397
|
+
if RepositoryManager.accept_nested_sharing
|
398
|
+
# TODO implement to look if he can delete all the folder
|
399
|
+
else
|
400
|
+
authorisations == true || (authorisations.kind_of?(Hash) && authorisations[:can_create] == true)
|
401
|
+
end
|
367
402
|
else
|
368
403
|
false
|
369
404
|
end
|
data/repository-manager.gemspec
CHANGED
@@ -20,12 +20,12 @@ Each instance (users, groups, etc..) can have it own repositories (with files an
|
|
20
20
|
#s.test_files = Dir["spec/**/*"]
|
21
21
|
s.license = 'MIT'
|
22
22
|
|
23
|
-
s.add_runtime_dependency 'rails', '
|
23
|
+
s.add_runtime_dependency 'rails', '~> 3.0', '>= 3.0.0'
|
24
24
|
|
25
|
-
s.add_development_dependency 'factory_girl_rails'
|
26
|
-
s.add_development_dependency 'sqlite3'
|
25
|
+
s.add_development_dependency 'factory_girl_rails', '~> 0'
|
26
|
+
s.add_development_dependency 'sqlite3', '~> 0'
|
27
27
|
s.add_development_dependency 'rspec-rails', '~> 2.0'
|
28
|
-
s.add_runtime_dependency 'ancestry'
|
29
|
-
s.add_runtime_dependency 'carrierwave'
|
30
|
-
s.add_runtime_dependency 'rubyzip'#, '< 1.0.0'#, :require => 'zip/zip'
|
28
|
+
s.add_runtime_dependency 'ancestry', '~> 0'
|
29
|
+
s.add_runtime_dependency 'carrierwave', '~> 0'
|
30
|
+
s.add_runtime_dependency 'rubyzip', '~> 0'#, '< 1.0.0'#, :require => 'zip/zip'
|
31
31
|
end
|
data/spec/dummy/db/test.sqlite3
CHANGED
Binary file
|
data/spec/has_repository_spec.rb
CHANGED
@@ -166,6 +166,7 @@ describe 'HasRepository' do
|
|
166
166
|
|
167
167
|
sharing_of_user_1 = @user1.sharings.last
|
168
168
|
|
169
|
+
# TODO correct this, sharing is nil
|
169
170
|
expect(sharing_of_user_1.can_read?).to eq(true)
|
170
171
|
expect(sharing_of_user_1.can_update?).to eq(false)
|
171
172
|
expect(sharing_of_user_1.can_share?).to eq(true)
|
@@ -194,7 +195,52 @@ describe 'HasRepository' do
|
|
194
195
|
#expect(@user2.sharings_owners.count).to eq(1)
|
195
196
|
end
|
196
197
|
|
197
|
-
|
198
|
+
# Todo implement with accepting nested set to true
|
199
|
+
#it 'can share a repo_item with ancestor sharing permissions' do
|
200
|
+
# parent = FactoryGirl.create(:repo_folder)
|
201
|
+
# parent.owner = @user3
|
202
|
+
# middle = @user3.create_folder('Middle', parent)
|
203
|
+
# children = @user3.create_folder('Children', middle)
|
204
|
+
#
|
205
|
+
# file = FactoryGirl.build(:repo_file)
|
206
|
+
# file.owner = @user3
|
207
|
+
# file.save
|
208
|
+
#
|
209
|
+
# children.add(file)
|
210
|
+
#
|
211
|
+
# options = {repo_item_permissions: {can_read: true, can_update: true, can_share: false}}
|
212
|
+
# @user3.share(parent, @user1, options)
|
213
|
+
#
|
214
|
+
# options = {repo_item_permissions: {can_read: true, can_update: true, can_share: true}}
|
215
|
+
# @user3.share(children, @user1, options)
|
216
|
+
#
|
217
|
+
# @user1.share(middle, @user2)
|
218
|
+
# expect(@user2.sharings.count).to eq(0)
|
219
|
+
# @user1.share(file, @user2)
|
220
|
+
# expect(@user2.sharings.count).to eq(1)
|
221
|
+
#end
|
222
|
+
|
223
|
+
it 'can\'t share a nested sharing' do
|
224
|
+
parent = @user1.create_folder('Parent')
|
225
|
+
nested = @user1.create_folder('Nested', parent)
|
226
|
+
children = @user1.create_folder('Children', nested)
|
227
|
+
|
228
|
+
# @user1 own repository :
|
229
|
+
# |-- 'Parent'
|
230
|
+
# | |-- 'Nested'
|
231
|
+
# | | |-- 'Children'
|
232
|
+
|
233
|
+
@user1.share(nested, @user2)
|
234
|
+
|
235
|
+
expect(nested.has_nested_sharing?).to eq(false) # Returns false (because `nested` is shared but there is no nested sharing)
|
236
|
+
expect(parent.has_nested_sharing?).to eq(true) # Returns true (because there is a sharing on one of his descendants)
|
237
|
+
expect(parent.has_nested_sharing?).to eq(true) # Returns true (because there is a sharing on one of his ancestors)
|
238
|
+
|
239
|
+
# Here we can't share 'Parent' or 'Children' because it already exist a nested sharing.
|
240
|
+
expect(@user1.share(parent, @user2)).to eq(false) # Returns false
|
241
|
+
end
|
242
|
+
|
243
|
+
it 'can\'t share a repo_item with ancestor sharing permissions' do
|
198
244
|
parent = FactoryGirl.create(:repo_folder)
|
199
245
|
parent.owner = @user3
|
200
246
|
middle = @user3.create_folder('Middle', parent)
|
@@ -206,7 +252,7 @@ describe 'HasRepository' do
|
|
206
252
|
|
207
253
|
children.add(file)
|
208
254
|
|
209
|
-
options = {repo_item_permissions: {can_read: true, can_update: true, can_share:
|
255
|
+
options = {repo_item_permissions: {can_read: true, can_update: true, can_share: true}}
|
210
256
|
@user3.share(parent, @user1, options)
|
211
257
|
|
212
258
|
options = {repo_item_permissions: {can_read: true, can_update: true, can_share: true}}
|
@@ -215,7 +261,7 @@ describe 'HasRepository' do
|
|
215
261
|
@user1.share(middle, @user2)
|
216
262
|
expect(@user2.sharings.count).to eq(0)
|
217
263
|
@user1.share(file, @user2)
|
218
|
-
expect(@user2.sharings.count).to eq(
|
264
|
+
expect(@user2.sharings.count).to eq(0)
|
219
265
|
end
|
220
266
|
|
221
267
|
it "can create a folder" do
|
metadata
CHANGED
@@ -1,68 +1,66 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: repository-manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.10
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Yves Baumann
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
- - ! '>='
|
20
21
|
- !ruby/object:Gem::Version
|
21
22
|
version: 3.0.0
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
25
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- - ! '>='
|
28
31
|
- !ruby/object:Gem::Version
|
29
32
|
version: 3.0.0
|
30
33
|
- !ruby/object:Gem::Dependency
|
31
34
|
name: factory_girl_rails
|
32
35
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
36
|
requirements:
|
35
|
-
- -
|
37
|
+
- - ~>
|
36
38
|
- !ruby/object:Gem::Version
|
37
39
|
version: '0'
|
38
40
|
type: :development
|
39
41
|
prerelease: false
|
40
42
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
43
|
requirements:
|
43
|
-
- -
|
44
|
+
- - ~>
|
44
45
|
- !ruby/object:Gem::Version
|
45
46
|
version: '0'
|
46
47
|
- !ruby/object:Gem::Dependency
|
47
48
|
name: sqlite3
|
48
49
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
57
|
requirements:
|
59
|
-
- -
|
58
|
+
- - ~>
|
60
59
|
- !ruby/object:Gem::Version
|
61
60
|
version: '0'
|
62
61
|
- !ruby/object:Gem::Dependency
|
63
62
|
name: rspec-rails
|
64
63
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
64
|
requirements:
|
67
65
|
- - ~>
|
68
66
|
- !ruby/object:Gem::Version
|
@@ -70,7 +68,6 @@ dependencies:
|
|
70
68
|
type: :development
|
71
69
|
prerelease: false
|
72
70
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
71
|
requirements:
|
75
72
|
- - ~>
|
76
73
|
- !ruby/object:Gem::Version
|
@@ -78,49 +75,43 @@ dependencies:
|
|
78
75
|
- !ruby/object:Gem::Dependency
|
79
76
|
name: ancestry
|
80
77
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
78
|
requirements:
|
83
|
-
- -
|
79
|
+
- - ~>
|
84
80
|
- !ruby/object:Gem::Version
|
85
81
|
version: '0'
|
86
82
|
type: :runtime
|
87
83
|
prerelease: false
|
88
84
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
85
|
requirements:
|
91
|
-
- -
|
86
|
+
- - ~>
|
92
87
|
- !ruby/object:Gem::Version
|
93
88
|
version: '0'
|
94
89
|
- !ruby/object:Gem::Dependency
|
95
90
|
name: carrierwave
|
96
91
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
92
|
requirements:
|
99
|
-
- -
|
93
|
+
- - ~>
|
100
94
|
- !ruby/object:Gem::Version
|
101
95
|
version: '0'
|
102
96
|
type: :runtime
|
103
97
|
prerelease: false
|
104
98
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
99
|
requirements:
|
107
|
-
- -
|
100
|
+
- - ~>
|
108
101
|
- !ruby/object:Gem::Version
|
109
102
|
version: '0'
|
110
103
|
- !ruby/object:Gem::Dependency
|
111
104
|
name: rubyzip
|
112
105
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
106
|
requirements:
|
115
|
-
- -
|
107
|
+
- - ~>
|
116
108
|
- !ruby/object:Gem::Version
|
117
109
|
version: '0'
|
118
110
|
type: :runtime
|
119
111
|
prerelease: false
|
120
112
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
113
|
requirements:
|
123
|
-
- -
|
114
|
+
- - ~>
|
124
115
|
- !ruby/object:Gem::Version
|
125
116
|
version: '0'
|
126
117
|
description: ! 'This project is based on the need for a repository manager system
|
@@ -213,27 +204,26 @@ files:
|
|
213
204
|
homepage: https://github.com/Texicitys/repository-manager
|
214
205
|
licenses:
|
215
206
|
- MIT
|
207
|
+
metadata: {}
|
216
208
|
post_install_message:
|
217
209
|
rdoc_options: []
|
218
210
|
require_paths:
|
219
211
|
- lib
|
220
212
|
required_ruby_version: !ruby/object:Gem::Requirement
|
221
|
-
none: false
|
222
213
|
requirements:
|
223
214
|
- - ! '>='
|
224
215
|
- !ruby/object:Gem::Version
|
225
216
|
version: '0'
|
226
217
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
|
-
none: false
|
228
218
|
requirements:
|
229
219
|
- - ! '>='
|
230
220
|
- !ruby/object:Gem::Version
|
231
221
|
version: '0'
|
232
222
|
requirements: []
|
233
223
|
rubyforge_project:
|
234
|
-
rubygems_version:
|
224
|
+
rubygems_version: 2.2.1
|
235
225
|
signing_key:
|
236
|
-
specification_version:
|
226
|
+
specification_version: 4
|
237
227
|
summary: Ruby on Rails plugin (gem) for managing repositories (files/folders/permissions/sharings).
|
238
228
|
test_files:
|
239
229
|
- spec/dummy/Gemfile
|