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 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
- # We're only using this if there are circles- not on generic objects, which should be INSIDE circles
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
- # We're only using this if there are circles- not on generic objects, which should be INSIDE circles
111
- raise PermissiveError, "Must be called with a circle as an argument" if options[:in].nil?
112
-
113
- #Get the permissions and return
114
- perm = permissions_in options[:in]
115
- if perm.nil?
116
- false
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
- #add up the bits and do a bitwise and to check permissions
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
@@ -1,3 +1,3 @@
1
1
  module ActsPermissive
2
- VERSION = "0.2.5"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -19,8 +19,8 @@ describe ActsPermissive::PermissiveObject do
19
19
  end
20
20
 
21
21
  before :each do
22
- @user = Factory :user
23
- @admin = Factory :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 = Factory :user
70
- @debbie = Factory :user
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
- @rest_object.all_who_can(:read).include?(u).should be_true
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
- @rest_object.all_who_can(:admin).include?(u).should be_true
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
- @rest_object.all_who_can(:write).include?(u).should be_false
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
- @rest_object.all_who_can(:see).include?(u).should be_true
104
+ lst.include?(u).should be_true
102
105
  end
103
- @rest_object.all_who_can(:see).include?(@debbie).should be_false
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 = Factory :user
6
- @admin = Factory :admin
7
- @widget = Factory :widget
8
- @widget2 = Factory :widget
9
- @thing = Factory :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 = Factory :user, :name => "@@@@@@@@@@@@@@@"
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
Binary file
@@ -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 = Factory :user
7
- @admin = Factory :admin
8
- @widget = Factory :widget
9
- @thing = Factory :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 = Factory :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 = Factory :user
7
- @admin = Factory :admin
8
- @thing = Factory :thing
9
- @widget = Factory :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 = Factory :thing
42
- @another_widget = Factory :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 = Factory :user
54
- debbie = Factory :user
55
- frank = Factory :user
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 = Factory :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 = Factory :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 = Factory :user
7
- @admin = Factory :admin
8
- @widget = Factory :widget
9
- @thing = Factory :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 = Factory :user
7
- @admin = Factory :admin
8
- @thing = Factory :thing
9
- @widget = Factory :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 = Factory :user
44
- @debbie = Factory :user
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" do
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 = Factory :user
7
- @admin = Factory :admin
8
- @widget = Factory :widget
9
- @thing = Factory :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 = Factory :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
@@ -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 = Factory :user
7
- @admin = Factory :admin
8
- @thing = Factory :thing
9
- @widget = Factory :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 = Factory :thing
42
- @another_widget = Factory :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 = Factory :user
54
- debbie = Factory :user
55
- frank = Factory :user
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 = Factory :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 = Factory :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.2.5
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-03-10 00:00:00.000000000 Z
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: &70330060202220 !ruby/object:Gem::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: *70330060202220
24
+ version_requirements: *70238536645680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: uuidtools
27
- requirement: &70330060201800 !ruby/object:Gem::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: *70330060201800
35
+ version_requirements: *70238536644760
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec-rails
38
- requirement: &70330060201340 !ruby/object:Gem::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: *70330060201340
46
+ version_requirements: *70238536643540
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sqlite3
49
- requirement: &70330060200920 !ruby/object:Gem::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: *70330060200920
57
+ version_requirements: *70238536642380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: pg
60
- requirement: &70330060200500 !ruby/object:Gem::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: *70330060200500
68
+ version_requirements: *70238536640340
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: capybara
71
- requirement: &70330060200080 !ruby/object:Gem::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: *70330060200080
79
+ version_requirements: *70238536655020
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &70330060199660 !ruby/object:Gem::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: *70330060199660
90
+ version_requirements: *70238536652880
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: spork
93
- requirement: &70330060199160 !ruby/object:Gem::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.rc
98
+ version: 0.9.0
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70330060199160
101
+ version_requirements: *70238536651460
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: guard-rspec
104
- requirement: &70330060198740 !ruby/object:Gem::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: *70330060198740
112
+ version_requirements: *70238536650340
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: guard-spork
115
- requirement: &70330060198280 !ruby/object:Gem::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: *70330060198280
123
+ version_requirements: *70238536649120
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: factory_girl_rails
126
- requirement: &70330044178940 !ruby/object:Gem::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: *70330044178940
134
+ version_requirements: *70238536661520
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: simplecov
137
- requirement: &70330044178380 !ruby/object:Gem::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: *70330044178380
145
+ version_requirements: *70238536655920
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: growl
148
- requirement: &70330044177940 !ruby/object:Gem::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: *70330044177940
156
+ version_requirements: *70238536671300
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: fakeweb
159
- requirement: &70330044177460 !ruby/object:Gem::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: *70330044177460
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: