acts_permissive 0.2.5 → 0.3.0

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.
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: