acts_permissive 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +3 -7
- data/lib/acts_permissive/permissive_object.rb +3 -1
- data/lib/acts_permissive/permissive_user.rb +32 -11
- data/lib/acts_permissive/version.rb +1 -1
- data/spec/active_resource_spec.rb +13 -10
- data/spec/acts_permissive_spec.rb +6 -6
- data/spec/dummy/log/test.log +0 -0
- data/spec/permission_spec.rb +5 -5
- data/spec/permissive_circle_spec.rb +11 -11
- data/spec/permissive_grouping_spec.rb +4 -4
- data/spec/permissive_object_spec.rb +10 -8
- data/spec/permissive_user_spec.rb +34 -5
- data/spec/sub_class_spec.rb +11 -11
- metadata +42 -31
data/README.markdown
CHANGED
@@ -77,6 +77,9 @@ It's all a bit complicated to talk about, because we're not used to being able t
|
|
77
77
|
|
78
78
|
friend.can?(:read, :in => private_circle) -> true
|
79
79
|
friend.can?(:write, :in => private_circle) -> false
|
80
|
+
friend.can?(:read, journal) -> true
|
81
|
+
friend.can?(:write, journal) -> false
|
82
|
+
friend.can?(:read, photo) -> true
|
80
83
|
|
81
84
|
foe.can?(:read, :in => public_circle) -> false
|
82
85
|
foe.can?(:read, :in => private_circle) -> false
|
@@ -150,13 +153,6 @@ Object also has a some query methods:
|
|
150
153
|
|
151
154
|
toothbrush.all_who_can(:use).include? wife -> true
|
152
155
|
|
153
|
-
Note: It might be useful to have a can? method that can act on the individual object, such as
|
154
|
-
|
155
|
-
boss.can(:use, stapler) -> false
|
156
|
-
|
157
|
-
But I've opted to leave that in the application's solution space, since this gem focuses on
|
158
|
-
the circle of objects, not the individual object as much.
|
159
|
-
|
160
156
|
You can also get all users in a circle, regardless of type
|
161
157
|
|
162
158
|
private.users -> [john, wife]
|
@@ -30,11 +30,13 @@ module ActsPermissive
|
|
30
30
|
end
|
31
31
|
|
32
32
|
#TODO: Refactor this shit!
|
33
|
+
# One way to do this. Figure out a list of permission masks that would pass,
|
34
|
+
# then use that to do a straight SQL query using "perm.mask IN [list]"
|
33
35
|
def all_who_can *args
|
34
36
|
# Get a list of users who can do whatever symbol based permissions are
|
35
37
|
# listed. For instance
|
36
38
|
# authors = @thing.all_who_can(:read, :write)
|
37
|
-
|
39
|
+
warn "\nPermissiveObject::all_who_can works, yeah, but it's a time suck. Use Carefully!"
|
38
40
|
if args.include?(:see)
|
39
41
|
raise PermissiveError, "Can only use :see as an option by itself" if args.count > 1
|
40
42
|
return ActsPermissive::Grouping.who_can_see(self)
|
@@ -64,7 +64,7 @@ module ActsPermissive
|
|
64
64
|
def reset_permissions! *args
|
65
65
|
options = args.extract_options!
|
66
66
|
options.assert_valid_keys(:in)
|
67
|
-
|
67
|
+
|
68
68
|
raise PermissiveError, "Must be called with a circle as an argument" if options[:in].nil?
|
69
69
|
|
70
70
|
#get the permission, or build it if it doesn't exist
|
@@ -99,26 +99,47 @@ module ActsPermissive
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def can? *args
|
102
|
+
#TODO this is freakin long. Refactor this shit
|
102
103
|
options = args.extract_options!
|
103
104
|
options.assert_valid_keys(:in, :see)
|
104
105
|
|
106
|
+
# Get the bitmap for the selected permissions
|
107
|
+
bits = args.select{|o| o.class == Symbol}.map{|s| Permission.bit_for s}.inject(0){|sum, p| sum + p }
|
108
|
+
|
105
109
|
#if we're checking for :see, return right away
|
106
110
|
if options[:see]
|
107
111
|
return permissions_in(options[:see]).present?
|
108
112
|
end
|
109
113
|
|
110
|
-
#
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
if
|
116
|
-
|
114
|
+
# Get a list of objects that we might be searching on
|
115
|
+
objects = args.select{|o| o.respond_to? :is_used_permissively?}
|
116
|
+
|
117
|
+
raise "Cannot search in both circles and objects at the same time" if options[:in].present? and objects.count > 0
|
118
|
+
|
119
|
+
if options[:in].nil? and objects.count > 0
|
120
|
+
warn "You are testing permissions on multiple objects. This is an OR query, which will return true if ANY have the requested permission" if objects.count > 1
|
121
|
+
objects.each do |object|
|
122
|
+
object.circles.each do |circle|
|
123
|
+
# return true immediately if we find a circle where our permissions cover the bitmask
|
124
|
+
perm = permissions_in circle
|
125
|
+
if perm.present?
|
126
|
+
return true if perm.mask & bits == bits
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
elsif options[:in].present?
|
131
|
+
#Get the permissions and return
|
132
|
+
perm = permissions_in options[:in]
|
133
|
+
if perm.nil?
|
134
|
+
return false
|
135
|
+
else
|
136
|
+
return perm.mask & bits == bits
|
137
|
+
end
|
117
138
|
else
|
118
|
-
|
119
|
-
bits = args.select{|o| o.class == Symbol}.map{|s| Permission.bit_for s}.inject(0){|sum, p| sum + p }
|
120
|
-
perm.mask & bits == bits
|
139
|
+
warn "You haven't given an object or circle to search on. Failing silently. Argument list: #{args.inspect}"
|
121
140
|
end
|
141
|
+
# Failsafe to false
|
142
|
+
false
|
122
143
|
end
|
123
144
|
|
124
145
|
def revoke! *args
|
@@ -19,8 +19,8 @@ describe ActsPermissive::PermissiveObject do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
before :each do
|
22
|
-
@user =
|
23
|
-
@admin =
|
22
|
+
@user = FactoryGirl.create :user
|
23
|
+
@admin = FactoryGirl.create :admin
|
24
24
|
@rest_object = RestObject.find(321)
|
25
25
|
@circle = @user.build_circle :objects => [@rest_object]
|
26
26
|
end
|
@@ -66,8 +66,8 @@ describe ActsPermissive::PermissiveObject do
|
|
66
66
|
|
67
67
|
before :each do
|
68
68
|
@admin.can!(:admin, :in => @circle)
|
69
|
-
@anne =
|
70
|
-
@debbie =
|
69
|
+
@anne = FactoryGirl.create :user
|
70
|
+
@debbie = FactoryGirl.create :user
|
71
71
|
@anne.can!(:read, :in => @circle)
|
72
72
|
@widget = RestObject.find(123)
|
73
73
|
@widget.add_to @circle
|
@@ -81,26 +81,29 @@ describe ActsPermissive::PermissiveObject do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
it "should return a list of users who can perform the given functions" do
|
84
|
+
lst = @rest_object.all_who_can(:read)
|
84
85
|
[@user, @anne].each do |u|
|
85
|
-
|
86
|
+
lst.include?(u).should be_true
|
86
87
|
end
|
87
|
-
|
88
|
+
lst = @rest_object.all_who_can(:admin)
|
88
89
|
[@user, @admin].each do |u|
|
89
|
-
|
90
|
+
lst.include?(u).should be_true
|
90
91
|
end
|
91
92
|
end
|
92
93
|
|
93
94
|
it "should not include users who can't perform the function" do
|
95
|
+
lst = @rest_object.all_who_can(:write)
|
94
96
|
[@admin, @debbie, @anne].each do |u|
|
95
|
-
|
97
|
+
lst.include?(u).should be_false
|
96
98
|
end
|
97
99
|
end
|
98
100
|
|
99
101
|
it "Should correctly show all users who can :see an object" do
|
102
|
+
lst = @rest_object.all_who_can(:see)
|
100
103
|
[@admin, @anne, @user].each do |u|
|
101
|
-
|
104
|
+
lst.include?(u).should be_true
|
102
105
|
end
|
103
|
-
|
106
|
+
lst.include?(@debbie).should be_false
|
104
107
|
end
|
105
108
|
|
106
109
|
it "should throw an error when using :see with other permissions" do
|
@@ -2,15 +2,15 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
2
2
|
|
3
3
|
describe ActsPermissive do
|
4
4
|
before :each do
|
5
|
-
@user =
|
6
|
-
@admin =
|
7
|
-
@widget =
|
8
|
-
@widget2 =
|
9
|
-
@thing =
|
5
|
+
@user = FactoryGirl.create :user
|
6
|
+
@admin = FactoryGirl.create :admin
|
7
|
+
@widget = FactoryGirl.create :widget
|
8
|
+
@widget2 = FactoryGirl.create :widget
|
9
|
+
@thing = FactoryGirl.create :thing
|
10
10
|
@admin_circle = @admin.build_circle :name => "blah", :objects => [@widget, @widget2]
|
11
11
|
@user_circle = @user.build_circle :name => "yada", :objects => [@thing], :mask => 31
|
12
12
|
|
13
|
-
@new_user =
|
13
|
+
@new_user = FactoryGirl.create :user, :name => "@@@@@@@@@@@@@@@"
|
14
14
|
@new_user.can!(:read, :in => @admin_circle)
|
15
15
|
@new_user.can?(:read, :in => @admin_circle).should be_true
|
16
16
|
end
|
data/spec/dummy/log/test.log
CHANGED
Binary file
|
data/spec/permission_spec.rb
CHANGED
@@ -3,10 +3,10 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
3
3
|
describe ActsPermissive::Permission do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
@user =
|
7
|
-
@admin =
|
8
|
-
@widget =
|
9
|
-
@thing =
|
6
|
+
@user = FactoryGirl.create :user
|
7
|
+
@admin = FactoryGirl.create :admin
|
8
|
+
@widget = FactoryGirl.create :widget
|
9
|
+
@thing = FactoryGirl.create :thing
|
10
10
|
|
11
11
|
@admin_circle = @admin.build_circle :name => "blah", :objects => [@widget]
|
12
12
|
@user_circle = @user.build_circle :name => "yada", :objects => [@thing], :mask => 31
|
@@ -14,7 +14,7 @@ describe ActsPermissive::Permission do
|
|
14
14
|
@user.can!(:read, :write, :in => @admin_circle)
|
15
15
|
@admin.can!(:read, :write, :admin, :in => @user_circle)
|
16
16
|
|
17
|
-
@new_user =
|
17
|
+
@new_user = FactoryGirl.create :user
|
18
18
|
@new_user.can!(:read, :in => @user_circle)
|
19
19
|
@new_user.can!(:write, :in => @admin_circle)
|
20
20
|
end
|
@@ -3,10 +3,10 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
3
3
|
describe ActsPermissive::Circle do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
@user =
|
7
|
-
@admin =
|
8
|
-
@thing =
|
9
|
-
@widget =
|
6
|
+
@user = FactoryGirl.create :user
|
7
|
+
@admin = FactoryGirl.create :admin
|
8
|
+
@thing = FactoryGirl.create :thing
|
9
|
+
@widget = FactoryGirl.create :widget
|
10
10
|
end
|
11
11
|
|
12
12
|
describe "class" do
|
@@ -38,8 +38,8 @@ describe ActsPermissive::Circle do
|
|
38
38
|
describe "query methods" do
|
39
39
|
|
40
40
|
before :each do
|
41
|
-
@another_thing =
|
42
|
-
@another_widget =
|
41
|
+
@another_thing = FactoryGirl.create :thing
|
42
|
+
@another_widget = FactoryGirl.create :widget
|
43
43
|
@uc = @user.build_circle :name => "blah", :objects => [@thing, @another_thing]
|
44
44
|
@ac = @admin.build_circle :name => "yada", :objects => [@widget, @another_widget, @thing]
|
45
45
|
end
|
@@ -50,9 +50,9 @@ describe ActsPermissive::Circle do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should return the list of users in a circle" do
|
53
|
-
anne =
|
54
|
-
debbie =
|
55
|
-
frank =
|
53
|
+
anne = FactoryGirl.create :user
|
54
|
+
debbie = FactoryGirl.create :user
|
55
|
+
frank = FactoryGirl.create :user
|
56
56
|
anne.can!(:read, :in => @uc)
|
57
57
|
debbie.can!(:read, :write, :in => @uc)
|
58
58
|
frank.can!(:read, :in => @ac)
|
@@ -75,7 +75,7 @@ describe ActsPermissive::Circle do
|
|
75
75
|
|
76
76
|
describe "scopes" do
|
77
77
|
before :each do
|
78
|
-
@user =
|
78
|
+
@user = FactoryGirl.create :user
|
79
79
|
@circles = []
|
80
80
|
%w{one two three four five blah yada}.each do |w|
|
81
81
|
@circles << @user.build_circle( :name => w)
|
@@ -84,7 +84,7 @@ describe ActsPermissive::Circle do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "should return a list of users" do
|
87
|
-
another_user =
|
87
|
+
another_user = FactoryGirl.create :user
|
88
88
|
another_user.can!(:read, :in => @circles.first)
|
89
89
|
@circles.first.users.include?(@user).should be_true
|
90
90
|
@circles.first.users.include?(another_user).should be_true
|
@@ -3,10 +3,10 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
3
3
|
describe ActsPermissive::Grouping do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
@user =
|
7
|
-
@admin =
|
8
|
-
@widget =
|
9
|
-
@thing =
|
6
|
+
@user = FactoryGirl.create :user
|
7
|
+
@admin = FactoryGirl.create :admin
|
8
|
+
@widget = FactoryGirl.create :widget
|
9
|
+
@thing = FactoryGirl.create :thing
|
10
10
|
@admin_circle = @admin.build_circle :name => "blah", :objects => [@widget]
|
11
11
|
@user_circle = @user.build_circle :name => "yada", :objects => [@thing], :mask => 31
|
12
12
|
end
|
@@ -3,10 +3,10 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
3
3
|
describe ActsPermissive::PermissiveObject do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
@user =
|
7
|
-
@admin =
|
8
|
-
@thing =
|
9
|
-
@widget =
|
6
|
+
@user = FactoryGirl.create :user
|
7
|
+
@admin = FactoryGirl.create :admin
|
8
|
+
@thing = FactoryGirl.create :thing
|
9
|
+
@widget = FactoryGirl.create :widget
|
10
10
|
@circle = @user.build_circle :objects => [@thing]
|
11
11
|
end
|
12
12
|
|
@@ -40,8 +40,8 @@ describe ActsPermissive::PermissiveObject do
|
|
40
40
|
|
41
41
|
before :each do
|
42
42
|
@admin.can!(:admin, :in => @circle)
|
43
|
-
@anne =
|
44
|
-
@debbie =
|
43
|
+
@anne = FactoryGirl.create :user
|
44
|
+
@debbie = FactoryGirl.create :user
|
45
45
|
@anne.can!(:read, :in => @circle)
|
46
46
|
@widget.add_to @circle
|
47
47
|
end
|
@@ -76,10 +76,12 @@ describe ActsPermissive::PermissiveObject do
|
|
76
76
|
@thing.all_who_can(:see).include?(@debbie).should be_false
|
77
77
|
end
|
78
78
|
|
79
|
-
it "should throw an error when using :see with other permissions"
|
79
|
+
it "should throw an error when using :see with other permissions"
|
80
80
|
|
81
|
+
it "should throw a warning when using all_who_can" do
|
82
|
+
@thing.should_receive :warn
|
83
|
+
@thing.all_who_can(:write)
|
81
84
|
end
|
82
|
-
|
83
85
|
end
|
84
86
|
|
85
87
|
end
|
@@ -3,10 +3,10 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
3
3
|
describe ActsPermissive::PermissiveUser do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
@user =
|
7
|
-
@admin =
|
8
|
-
@widget =
|
9
|
-
@thing =
|
6
|
+
@user = FactoryGirl.create :user
|
7
|
+
@admin = FactoryGirl.create :admin
|
8
|
+
@widget = FactoryGirl.create :widget
|
9
|
+
@thing = FactoryGirl.create :thing
|
10
10
|
@admin_circle = @admin.build_circle :name => "blah", :objects => [@widget]
|
11
11
|
@user_circle = @user.build_circle :name => "yada", :objects => [@thing], :mask => 31
|
12
12
|
end
|
@@ -77,10 +77,39 @@ describe ActsPermissive::PermissiveUser do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should return false for a user without permissions" do
|
80
|
-
new_user =
|
80
|
+
new_user = FactoryGirl.create :user
|
81
81
|
new_user.can?(:see => @user_circle).should be_false
|
82
82
|
new_user.can?(:read, :in => @user_circle).should be_false
|
83
83
|
end
|
84
|
+
|
85
|
+
describe "can methods on objects instead of circles" do
|
86
|
+
|
87
|
+
before :each do
|
88
|
+
@new_user = FactoryGirl.create :user
|
89
|
+
@new_user.can!(:read, :in => @admin_circle)
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should allow using the can? method on a model" do
|
93
|
+
@new_user.can?(:read, @admin_circle.items.first).should be_true
|
94
|
+
@admin_circle.items.each{|i| @new_user.can?(:read, i).should be_true}
|
95
|
+
@admin_circle.items.each{|i| @new_user.can?(:write, i).should be_false}
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should work with work with more than one object, but throw a warning" do
|
99
|
+
@new_user.should_receive(:warn)
|
100
|
+
@new_user.can?(:read, @admin_circle.items.first, @admin_circle.items.last)
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should warn when returning false when no objects or circles are given" do
|
104
|
+
@new_user.should_receive(:warn)
|
105
|
+
@new_user.can?(:read)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should raise an exception if both circles and objects are given" do
|
109
|
+
lambda { @new_user.can?(:read, @admin_circle.items.first, :in => @admin_circle)}.should raise_error
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
84
113
|
end
|
85
114
|
|
86
115
|
describe "permissions methods" do
|
data/spec/sub_class_spec.rb
CHANGED
@@ -3,10 +3,10 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
3
3
|
describe SubClass do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
@user =
|
7
|
-
@admin =
|
8
|
-
@thing =
|
9
|
-
@widget =
|
6
|
+
@user = FactoryGirl.create :user
|
7
|
+
@admin = FactoryGirl.create :admin
|
8
|
+
@thing = FactoryGirl.create :thing
|
9
|
+
@widget = FactoryGirl.create :widget
|
10
10
|
end
|
11
11
|
|
12
12
|
describe "class" do
|
@@ -38,8 +38,8 @@ describe SubClass do
|
|
38
38
|
|
39
39
|
describe "query methods" do
|
40
40
|
before :each do
|
41
|
-
@another_thing =
|
42
|
-
@another_widget =
|
41
|
+
@another_thing = FactoryGirl.create :thing
|
42
|
+
@another_widget = FactoryGirl.create :widget
|
43
43
|
@uc = @user.build_circle :class => SubClass, :name => "blah", :objects => [@thing, @another_thing]
|
44
44
|
@ac = @admin.build_circle :class => SubClass, :name => "yada", :objects => [@widget, @another_widget, @thing]
|
45
45
|
end
|
@@ -50,9 +50,9 @@ describe SubClass do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should return the list of users in a circle" do
|
53
|
-
anne =
|
54
|
-
debbie =
|
55
|
-
frank =
|
53
|
+
anne = FactoryGirl.create :user
|
54
|
+
debbie = FactoryGirl.create :user
|
55
|
+
frank = FactoryGirl.create :user
|
56
56
|
anne.can!(:read, :in => @uc)
|
57
57
|
debbie.can!(:read, :write, :in => @uc)
|
58
58
|
frank.can!(:read, :in => @ac)
|
@@ -75,7 +75,7 @@ describe SubClass do
|
|
75
75
|
|
76
76
|
describe "scopes" do
|
77
77
|
before :each do
|
78
|
-
@user =
|
78
|
+
@user = FactoryGirl.create :user
|
79
79
|
@circles = []
|
80
80
|
%w{one two three four five blah yada}.each do |w|
|
81
81
|
@circles << @user.build_circle(:class => SubClass, :name => w)
|
@@ -84,7 +84,7 @@ describe SubClass do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "should return a list of users" do
|
87
|
-
another_user =
|
87
|
+
another_user = FactoryGirl.create :user
|
88
88
|
another_user.can!(:read, :in => @circles.first)
|
89
89
|
@circles.first.users.include?(@user).should be_true
|
90
90
|
@circles.first.users.include?(another_user).should be_true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_permissive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70238536645680 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.1.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70238536645680
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: uuidtools
|
27
|
-
requirement: &
|
27
|
+
requirement: &70238536644760 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70238536644760
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &70238536643540 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70238536643540
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sqlite3
|
49
|
-
requirement: &
|
49
|
+
requirement: &70238536642380 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70238536642380
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: pg
|
60
|
-
requirement: &
|
60
|
+
requirement: &70238536640340 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70238536640340
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: capybara
|
71
|
-
requirement: &
|
71
|
+
requirement: &70238536655020 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70238536655020
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &70238536652880 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,21 +87,21 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70238536652880
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: spork
|
93
|
-
requirement: &
|
93
|
+
requirement: &70238536651460 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0.9.0
|
98
|
+
version: 0.9.0
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70238536651460
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: guard-rspec
|
104
|
-
requirement: &
|
104
|
+
requirement: &70238536650340 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70238536650340
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: guard-spork
|
115
|
-
requirement: &
|
115
|
+
requirement: &70238536649120 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70238536649120
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: factory_girl_rails
|
126
|
-
requirement: &
|
126
|
+
requirement: &70238536661520 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *70238536661520
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: simplecov
|
137
|
-
requirement: &
|
137
|
+
requirement: &70238536655920 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *70238536655920
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: growl
|
148
|
-
requirement: &
|
148
|
+
requirement: &70238536671300 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ! '>='
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: '0'
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *70238536671300
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: fakeweb
|
159
|
-
requirement: &
|
159
|
+
requirement: &70238536669560 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ! '>='
|
@@ -164,7 +164,18 @@ dependencies:
|
|
164
164
|
version: '0'
|
165
165
|
type: :development
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *70238536669560
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: rb-fsevent
|
170
|
+
requirement: &70238536668660 !ruby/object:Gem::Requirement
|
171
|
+
none: false
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
176
|
+
type: :development
|
177
|
+
prerelease: false
|
178
|
+
version_requirements: *70238536668660
|
168
179
|
description: Allows for arbitrary permissions on arbitrary collections of objects,
|
169
180
|
rather than system-wide role based management
|
170
181
|
email:
|