repository-manager 0.0.9 → 0.0.10
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 +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
|