aclatraz 0.0.1 → 0.1.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.
@@ -30,16 +30,6 @@ STORE_SPECS = proc do
30
30
  subject.check("bar", owner, target).should be_false
31
31
  end
32
32
 
33
- it "should allow to fetch list of permissions for current role" do
34
- subject.set("bar", owner)
35
- subject.set("bar", owner, target)
36
- class << owner; def id; 20; end; end
37
- subject.set("bar", owner, StubTarget)
38
-
39
- (subject.permissions("bar") - ["15", "15/StubTarget/10", "20/StubTarget"]).should be_empty
40
- subject.permissions("lala").should be_empty
41
- end
42
-
43
33
  it "should allow to fetch whole list of roles" do
44
34
  subject.set("foo", owner)
45
35
  subject.set("bar", owner)
@@ -59,28 +49,13 @@ STORE_SPECS = proc do
59
49
  end
60
50
 
61
51
  describe "Aclatraz" do
62
- it "should raise InvalidStore error when given store doesn't exists" do
63
- lambda { Aclatraz.store(:fooobar) }.should raise_error(Aclatraz::InvalidStore)
64
- end
65
-
66
- it "should raise StoreNotInitialized error when store has not been set yet" do
67
- Aclatraz.instance_variable_set('@store', nil)
68
- lambda { Aclatraz.store }.should raise_error(Aclatraz::StoreNotInitialized)
69
- end
70
-
71
- it "should properly set datastore when class given" do
72
- class TestStore; end
73
- lambda { Aclatraz.store(TestStore) }.should_not raise_error
74
- Aclatraz.store.should be_kind_of(TestStore)
75
- end
76
-
77
52
  let(:owner) { StubOwner.new }
78
53
  let(:target) { StubTarget.new }
79
54
 
80
55
  describe "Redis store" do
81
56
  before(:all) { @redis = Thread.new { `redis-server` } }
82
57
  after(:all) { @redis.exit! }
83
- subject { Aclatraz.store(:redis, "redis://localhost:6379/0") }
58
+ subject { Aclatraz.init(:redis, "redis://localhost:6379/0") }
84
59
  before(:each) { subject.clear }
85
60
 
86
61
  class_eval &STORE_SPECS
@@ -1,41 +1,41 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Aclatraz suspect" do
4
- before(:all) { Aclatraz.store(:redis, "redis://localhost:6379/0") }
4
+ before(:all) { Aclatraz.init(:redis, "redis://localhost:6379/0") }
5
5
  subject { StubSuspect.new }
6
6
  let(:target) { StubTarget.new }
7
7
 
8
8
  its(:acl_suspect?) { should be_true }
9
9
 
10
10
  it "1: should properly set given role" do
11
- subject.assign_role!(:foobar1)
12
- subject.assign_role!(:foobar2, StubTarget)
13
- subject.assign_role!(:foobar3, target)
11
+ subject.roles.assign(:foobar1)
12
+ subject.roles.assign(:foobar2, StubTarget)
13
+ subject.roles.assign(:foobar3, target)
14
14
 
15
- Aclatraz.store.permissions(:foobar1).should include("10")
16
- Aclatraz.store.permissions(:foobar2).should include("10/StubTarget")
17
- Aclatraz.store.permissions(:foobar3).should include("10/StubTarget/10")
15
+ subject.roles.has?(:foobar1).should be_true
16
+ subject.roles.has?(:foobar2, StubTarget).should be_true
17
+ subject.roles.has?(:foobar3, target).should be_true
18
18
  end
19
19
 
20
20
  it "2: should properly check given permissions" do
21
- subject.has_role?(:foobar1).should be_true
22
- subject.has_role?(:foobar2, StubTarget).should be_true
23
- subject.has_role?(:foobar3, target).should be_true
24
- subject.has_role?(:foobar1, StubTarget).should be_false
21
+ subject.roles.has?(:foobar1).should be_true
22
+ subject.roles.has?(:foobar2, StubTarget).should be_true
23
+ subject.roles.has?(:foobar3, target).should be_true
24
+ subject.roles.has?(:foobar1, StubTarget).should be_false
25
25
  end
26
26
 
27
27
  it "3: should allow to get list of roles assigned to user" do
28
- (subject.roles - ["foobar1", "foobar2", "foobar3"]) .should be_empty
28
+ (subject.roles.all - ["foobar1", "foobar2", "foobar3"]) .should be_empty
29
29
  end
30
30
 
31
31
  it "4: should properly remove given permissions" do
32
- subject.delete_role!(:foobar1)
33
- subject.delete_role!(:foobar2, StubTarget)
34
- subject.delete_role!(:foobar3, target)
32
+ subject.roles.delete(:foobar1)
33
+ subject.roles.delete(:foobar2, StubTarget)
34
+ subject.roles.delete(:foobar3, target)
35
35
 
36
- subject.has_role?(:foobar1).should be_false
37
- subject.has_role?(:foobar2, StubTarget).should be_false
38
- subject.has_role?(:foobar3, target).should be_false
36
+ subject.roles.has?(:foobar1).should be_false
37
+ subject.roles.has?(:foobar2, StubTarget).should be_false
38
+ subject.roles.has?(:foobar3, target).should be_false
39
39
  end
40
40
 
41
41
  describe "syntactic sugars" do
@@ -48,13 +48,13 @@ describe "Aclatraz suspect" do
48
48
  subject.is.foobar6_by!(target)
49
49
  subject.is.foobar7_in!(target)
50
50
 
51
- subject.has_role?(:foobar1).should be_true
52
- subject.has_role?(:foobar2_of, StubTarget).should be_true
53
- subject.has_role?(:foobar3_for, target).should be_true
54
- subject.has_role?(:foobar4_of, target).should be_true
55
- subject.has_role?(:foobar5_at, target).should be_true
56
- subject.has_role?(:foobar6_by, target).should be_true
57
- subject.has_role?(:foobar7_in, target).should be_true
51
+ subject.roles.has?(:foobar1).should be_true
52
+ subject.roles.has?(:foobar2_of, StubTarget).should be_true
53
+ subject.roles.has?(:foobar3_for, target).should be_true
54
+ subject.roles.has?(:foobar4_of, target).should be_true
55
+ subject.roles.has?(:foobar5_at, target).should be_true
56
+ subject.roles.has?(:foobar6_by, target).should be_true
57
+ subject.roles.has?(:foobar7_in, target).should be_true
58
58
  end
59
59
 
60
60
  it "2: should properly check given permissions" do
@@ -1,6 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Aclatraz" do
4
-
4
+ describe "on init" do
5
+ it "should raise InvalidStore error when given store doesn't exists" do
6
+ lambda { Aclatraz.init(:fooobar) }.should raise_error(Aclatraz::InvalidStore)
7
+ end
8
+
9
+ it "should properly set datastore when class given" do
10
+ class TestStore; end
11
+ lambda { Aclatraz.init(TestStore) }.should_not raise_error
12
+ Aclatraz.store.should be_kind_of(TestStore)
13
+ end
14
+ end
15
+
16
+ it "should raise StoreNotInitialized error when store has not been set yet" do
17
+ Aclatraz.instance_variable_set('@store', nil)
18
+ lambda { Aclatraz.store }.should raise_error(Aclatraz::StoreNotInitialized)
19
+ end
5
20
  end
6
-
@@ -0,0 +1,54 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+
3
+ require "aclatraz"
4
+
5
+ Aclatraz.init :redis, "redis://localhost:6379/0"
6
+
7
+ class Account
8
+ include Aclatraz::Suspect
9
+ def id; 30; end
10
+ end
11
+
12
+ $account = Account.new
13
+ $account.is.bla_of!($account)
14
+
15
+ class Foo
16
+ include Aclatraz::Guard
17
+
18
+ suspects :account do
19
+ allow :foo
20
+ deny :bar
21
+ on :foo do
22
+ allow :bla_of => $account
23
+ allow :foo
24
+ end
25
+ on :bar do
26
+ allow :bar
27
+ end
28
+ end
29
+
30
+ def account
31
+ $account
32
+ end
33
+
34
+ def test
35
+ guard!(:foo, :bar)
36
+ rescue
37
+ end
38
+ end
39
+
40
+ $foo = Foo.new
41
+
42
+ ns = [1000, 2000, 5000, 10000]
43
+
44
+ ns.each do |n|
45
+ puts "#{n} times:"
46
+ Benchmark.bm(10) do |bm|
47
+ bm.report("Assign:") { n.times {|x| $account.assign_role!("foo#{x}") } }
48
+ bm.report("Check:") { n.times {|x| $account.has_role?("foo#{x}") } }
49
+ bm.report("Guard:") { n.times {|x| $foo.test } }
50
+ bm.report("Delete:") { n.times {|x| $account.delete_role!("foo#{x}") } }
51
+ end
52
+ puts
53
+ end
54
+
data/spec/spec_helper.rb CHANGED
@@ -17,6 +17,13 @@ class StubSuspect
17
17
  def id; 10; end
18
18
  end
19
19
 
20
+ class StubGuarded
21
+ include Aclatraz::Guard
22
+ class << self
23
+ attr_accessor :name
24
+ end
25
+ end
26
+
20
27
  class StubTarget
21
28
  def id; 10; end
22
29
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aclatraz
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kriss 'nu7hatch' Kowalik
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-10 00:00:00 +02:00
18
+ date: 2010-09-16 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -79,7 +79,7 @@ dependencies:
79
79
  version: "1.0"
80
80
  type: :runtime
81
81
  version_requirements: *id004
82
- description: Extremaly fast and flexible access control mechanism inspired by *nix ACLs, powered by fast key value stores like Redis or TokyoCabinet.
82
+ description: " Extremaly fast and flexible access control mechanism inspired by *nix ACLs, \n powered by fast key value stores like Redis or TokyoCabinet.\n"
83
83
  email: kriss.kowalik@gmail.com
84
84
  executables: []
85
85
 
@@ -91,10 +91,14 @@ extra_rdoc_files:
91
91
  files:
92
92
  - .document
93
93
  - .gitignore
94
+ - CHANGELOG.rdoc
94
95
  - LICENSE
95
96
  - README.rdoc
96
97
  - Rakefile
98
+ - TODO.rdoc
97
99
  - VERSION
100
+ - aclatraz.gemspec
101
+ - examples/dinner.rb
98
102
  - lib/aclatraz.rb
99
103
  - lib/aclatraz/acl.rb
100
104
  - lib/aclatraz/guard.rb
@@ -108,6 +112,7 @@ files:
108
112
  - spec/aclatraz/stores_spec.rb
109
113
  - spec/aclatraz/suspect_spec.rb
110
114
  - spec/aclatraz_spec.rb
115
+ - spec/alcatraz_bm.rb
111
116
  - spec/spec.opts
112
117
  - spec/spec_helper.rb
113
118
  has_rdoc: true
@@ -145,6 +150,7 @@ signing_key:
145
150
  specification_version: 3
146
151
  summary: Flexible access control that doesn't sucks!
147
152
  test_files:
153
+ - spec/alcatraz_bm.rb
148
154
  - spec/spec_helper.rb
149
155
  - spec/aclatraz/guard_spec.rb
150
156
  - spec/aclatraz/helpers_spec.rb
@@ -152,3 +158,4 @@ test_files:
152
158
  - spec/aclatraz/stores_spec.rb
153
159
  - spec/aclatraz/suspect_spec.rb
154
160
  - spec/aclatraz_spec.rb
161
+ - examples/dinner.rb