cantango-permits 0.1.1

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.
Files changed (166) hide show
  1. data/.rspec +1 -0
  2. data/Gemfile +39 -0
  3. data/Gemfile.lock +155 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.mdown +362 -0
  6. data/Rakefile +45 -0
  7. data/VERSION +1 -0
  8. data/lib/cantango/executor.rb +5 -0
  9. data/lib/cantango/executor/base.rb +9 -0
  10. data/lib/cantango/executor/permit.rb +7 -0
  11. data/lib/cantango/executor/permit/abstract.rb +27 -0
  12. data/lib/cantango/executor/permit/base.rb +19 -0
  13. data/lib/cantango/executor/permit/special.rb +9 -0
  14. data/lib/cantango/executor/permit_type.rb +50 -0
  15. data/lib/cantango/license.rb +19 -0
  16. data/lib/cantango/license/rules.rb +17 -0
  17. data/lib/cantango/permit.mdown +4 -0
  18. data/lib/cantango/permit.rb +5 -0
  19. data/lib/cantango/permit/account_type.rb +44 -0
  20. data/lib/cantango/permit/attribute.rb +71 -0
  21. data/lib/cantango/permit/base.rb +94 -0
  22. data/lib/cantango/permit/class_methods.rb +49 -0
  23. data/lib/cantango/permit/helper.rb +11 -0
  24. data/lib/cantango/permit/helper/execution.rb +38 -0
  25. data/lib/cantango/permit/helper/host.rb +13 -0
  26. data/lib/cantango/permit/helper/license.rb +34 -0
  27. data/lib/cantango/permit/helper/naming.rb +38 -0
  28. data/lib/cantango/permit/helper/state.rb +21 -0
  29. data/lib/cantango/permit/special.rb +17 -0
  30. data/lib/cantango/permit/user.rb +36 -0
  31. data/lib/cantango/permit/user_type.rb +34 -0
  32. data/lib/cantango/permits.rb +20 -0
  33. data/lib/cantango/permits_ext.rb +7 -0
  34. data/lib/cantango/permits_ext/ability.rb +7 -0
  35. data/lib/cantango/permits_ext/ability/helper.rb +9 -0
  36. data/lib/cantango/permits_ext/ability/helper/permits.rb +8 -0
  37. data/lib/cantango/permits_ext/builder.rb +7 -0
  38. data/lib/cantango/permits_ext/builder/permit.rb +9 -0
  39. data/lib/cantango/permits_ext/builder/permit/account_type.rb +13 -0
  40. data/lib/cantango/permits_ext/builder/permit/base.rb +94 -0
  41. data/lib/cantango/permits_ext/builder/permit/special.rb +13 -0
  42. data/lib/cantango/permits_ext/builder/permit/user_type.rb +7 -0
  43. data/lib/cantango/permits_ext/class_methods.rb +28 -0
  44. data/lib/cantango/permits_ext/config.rb +11 -0
  45. data/lib/cantango/permits_ext/config/engines.rb +9 -0
  46. data/lib/cantango/permits_ext/config/engines/permit.rb +20 -0
  47. data/lib/cantango/permits_ext/config/permits.rb +43 -0
  48. data/lib/cantango/permits_ext/config/permits/accounts.rb +15 -0
  49. data/lib/cantango/permits_ext/config/permits/disabling.rb +22 -0
  50. data/lib/cantango/permits_ext/config/permits/enabling.rb +14 -0
  51. data/lib/cantango/permits_ext/config/permits/execution.rb +21 -0
  52. data/lib/cantango/permits_ext/config/permits/key.rb +19 -0
  53. data/lib/cantango/permits_ext/config/permits/registration.rb +33 -0
  54. data/lib/cantango/permits_ext/config/permits/tracking.rb +19 -0
  55. data/lib/cantango/permits_ext/config/permits/types.rb +25 -0
  56. data/lib/cantango/permits_ext/engine.rb +7 -0
  57. data/lib/cantango/permits_ext/engine/permits.rb +75 -0
  58. data/lib/cantango/permits_ext/factory.rb +7 -0
  59. data/lib/cantango/permits_ext/factory/permits.rb +40 -0
  60. data/lib/cantango/permits_ext/finder.rb +7 -0
  61. data/lib/cantango/permits_ext/finder/base.rb +35 -0
  62. data/lib/cantango/permits_ext/finder/permit.rb +7 -0
  63. data/lib/cantango/permits_ext/finder/permit/account.rb +47 -0
  64. data/lib/cantango/permits_ext/finder/permit/base.rb +53 -0
  65. data/lib/cantango/permits_ext/loader.rb +7 -0
  66. data/lib/cantango/permits_ext/loader/categories.rb +50 -0
  67. data/lib/cantango/permits_ext/loader/license.rb +19 -0
  68. data/lib/cantango/permits_ext/macros.rb +7 -0
  69. data/lib/cantango/permits_ext/macros/permit.rb +32 -0
  70. data/lib/cantango/permits_ext/parser.rb +7 -0
  71. data/lib/cantango/permits_ext/parser/categories.rb +15 -0
  72. data/lib/cantango/permits_ext/registry.rb +7 -0
  73. data/lib/cantango/permits_ext/registry/permit.rb +45 -0
  74. data/lib/generators/cantango/account_permit/account_permit_generator.rb +37 -0
  75. data/lib/generators/cantango/account_permit/templates/account_permit.erb +23 -0
  76. data/lib/generators/cantango/base.rb +71 -0
  77. data/lib/generators/cantango/basic.rb +41 -0
  78. data/lib/generators/cantango/license/license_generator.rb +29 -0
  79. data/lib/generators/cantango/license/templates/license.erb +10 -0
  80. data/lib/generators/cantango/license_base.rb +15 -0
  81. data/lib/generators/cantango/licenses/licenses_generator.rb +26 -0
  82. data/lib/generators/cantango/permit_generator.rb +58 -0
  83. data/lib/generators/cantango/role_permit/role_permit_generator.rb +39 -0
  84. data/lib/generators/cantango/role_permit/templates/account_permit.erb +4 -0
  85. data/lib/generators/cantango/role_permit/templates/role_group_permit.erb +24 -0
  86. data/lib/generators/cantango/role_permit/templates/role_permit.erb +23 -0
  87. data/lib/generators/cantango/role_permits/role_permits_generator.rb +45 -0
  88. data/lib/generators/cantango/user_permit/templates/account_permit.erb +5 -0
  89. data/lib/generators/cantango/user_permit/templates/user_permit.erb +23 -0
  90. data/lib/generators/cantango/user_permit/user_permit_generator.rb +36 -0
  91. data/lib/tasks/permits_tasks.rake +4 -0
  92. data/spec/cantango/ability/helper/permits_spec.rb +14 -0
  93. data/spec/cantango/builder/permit/account_type_spec.rb +25 -0
  94. data/spec/cantango/builder/permit/base_spec.rb +30 -0
  95. data/spec/cantango/builder/permit/special_spec.rb +25 -0
  96. data/spec/cantango/builder/permit/user_type_spec.rb +27 -0
  97. data/spec/cantango/config/engines/permit_spec.rb +14 -0
  98. data/spec/cantango/config/engines_spec.rb +142 -0
  99. data/spec/cantango/config/permit_registry_ex.rb +9 -0
  100. data/spec/cantango/config/permit_registry_spec.rb +8 -0
  101. data/spec/cantango/config/permits/accounts_spec.rb +23 -0
  102. data/spec/cantango/config/permits/disabling_spec.rb +38 -0
  103. data/spec/cantango/config/permits/enabling_spec.rb +19 -0
  104. data/spec/cantango/config/permits/execution_spec.rb +27 -0
  105. data/spec/cantango/config/permits/registration_spec.rb +15 -0
  106. data/spec/cantango/config/permits/tracking_spec.rb +19 -0
  107. data/spec/cantango/config/permits/types_spec.rb +27 -0
  108. data/spec/cantango/config/permits_spec.rb +76 -0
  109. data/spec/cantango/engine/permit_cached_spec.rb +52 -0
  110. data/spec/cantango/engine/permit_spec.rb +58 -0
  111. data/spec/cantango/engine/permit_static_dynamic_spec.rb +65 -0
  112. data/spec/cantango/executor/custom_permit_spec.rb +65 -0
  113. data/spec/cantango/executor/more_permit_spec.rb +45 -0
  114. data/spec/cantango/executor/permit_base_spec.rb +46 -0
  115. data/spec/cantango/executor/permit_spec.rb +53 -0
  116. data/spec/cantango/executor/special_permit_spec.rb +36 -0
  117. data/spec/cantango/factory/permits_spec.rb +70 -0
  118. data/spec/cantango/finder/account_permit_spec.rb +30 -0
  119. data/spec/cantango/finder/permit_spec.rb +23 -0
  120. data/spec/cantango/license/save_license_spec.rb +24 -0
  121. data/spec/cantango/license_spec.rb +0 -0
  122. data/spec/cantango/loader/categories_spec.rb +47 -0
  123. data/spec/cantango/loader/license_spec.rb +7 -0
  124. data/spec/cantango/macros/permit_spec.rb +38 -0
  125. data/spec/cantango/parser/categories_spec.rb +19 -0
  126. data/spec/cantango/permit/account_type_spec.rb +34 -0
  127. data/spec/cantango/permit/attribute_permit_spec.rb +65 -0
  128. data/spec/cantango/permit/base_spec.rb +106 -0
  129. data/spec/cantango/permit/class_methods_spec.rb +34 -0
  130. data/spec/cantango/permit/helper/execution_spec.rb +54 -0
  131. data/spec/cantango/permit/helper/host_spec.rb +29 -0
  132. data/spec/cantango/permit/helper/license_spec.rb +37 -0
  133. data/spec/cantango/permit/helper/naming_spec.rb +56 -0
  134. data/spec/cantango/permit/helper/state_spec.rb +24 -0
  135. data/spec/cantango/permit/special_default_spec.rb +2 -0
  136. data/spec/cantango/permit/special_first_spec.rb +2 -0
  137. data/spec/cantango/permit/user_type_spec.rb +78 -0
  138. data/spec/cantango/registry/permit_spec.rb +67 -0
  139. data/spec/fixtures/config/cantango_permissions.yml +49 -0
  140. data/spec/fixtures/config/categories.yml +6 -0
  141. data/spec/fixtures/config/evaluator_fixtures.yml +18 -0
  142. data/spec/fixtures/config/licenses.yml +4 -0
  143. data/spec/fixtures/config/permissions.yml +60 -0
  144. data/spec/fixtures/config/role_group.yml +4 -0
  145. data/spec/fixtures/config/roles.yml +4 -0
  146. data/spec/fixtures/config/test_permissions.yml +55 -0
  147. data/spec/fixtures/config/user_permissions.yml +8 -0
  148. data/spec/fixtures/models.rb +15 -0
  149. data/spec/fixtures/models/admin.rb +2 -0
  150. data/spec/fixtures/models/admin_account.rb +22 -0
  151. data/spec/fixtures/models/items.rb +11 -0
  152. data/spec/fixtures/models/permission.rb +12 -0
  153. data/spec/fixtures/models/simple_roles.rb +49 -0
  154. data/spec/fixtures/models/user.rb +52 -0
  155. data/spec/fixtures/models/user_account.rb +21 -0
  156. data/spec/fixtures/tango_fixtures.rb +29 -0
  157. data/spec/generators/cantango/account_role_permit_generator_spec.rb +35 -0
  158. data/spec/generators/cantango/account_role_permits_generator_spec.rb +59 -0
  159. data/spec/generators/cantango/license_generator_spec.rb +33 -0
  160. data/spec/generators/cantango/licenses_generator_spec.rb +58 -0
  161. data/spec/generators/cantango/role_permit_generator_spec.rb +35 -0
  162. data/spec/generators/cantango/role_permits_generator_spec.rb +58 -0
  163. data/spec/helpers/current_user_accounts.rb +20 -0
  164. data/spec/helpers/current_users.rb +10 -0
  165. data/spec/spec_helper.rb +24 -0
  166. metadata +325 -0
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'fixtures/models'
3
+
4
+ class MyOwnPermit < CanTango::Permit::Base
5
+ include CanTango::Permit::Helper::Host
6
+ end
7
+
8
+ class RequestHost
9
+ attr_accessor :host
10
+
11
+ def initialize host
12
+ @host = host
13
+ end
14
+ end
15
+
16
+ describe CanTango::Permit::Helper::Naming do
17
+ before do
18
+ @localhost_req = RequestHost.new 'localhost'
19
+ @user = SimpleUser.new
20
+ @ability = CanTango::Ability::Base.new @user, :request => @localhost_req
21
+ end
22
+
23
+ subject { MyOwnPermit.new @ability }
24
+
25
+ context 'localhost' do
26
+ specify { subject.local_host?.should be_true }
27
+ specify { subject.public_host?.should be_false }
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'fixtures/models'
3
+
4
+ class MyOwnPermit < CanTango::Ability::Base
5
+ include CanTango::Permit::Helper::License
6
+ end
7
+
8
+ class BloggingLicense < CanTango::License
9
+ def initialize ability
10
+ super
11
+ end
12
+
13
+ def calc_rules
14
+ can :edit, Project
15
+ end
16
+ end
17
+
18
+ describe CanTango::Permit::Helper::License do
19
+ before do
20
+ @user = User.new 'kris', 'kris@mail.ru', :roles => [:editor]
21
+ end
22
+ subject { MyOwnPermit.new @user }
23
+
24
+ describe 'license name' do
25
+ before do
26
+ subject.license(:blogging)
27
+ end
28
+ specify { subject.rules.should_not be_empty }
29
+ end
30
+
31
+ describe 'licenses *names' do
32
+ before do
33
+ subject.licenses(:blogging)
34
+ end
35
+ specify { subject.rules.should_not be_empty }
36
+ end
37
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+ require 'fixtures/models'
3
+
4
+ class MyOwnPermit
5
+ include CanTango::Permit::Helper::Naming
6
+ extend CanTango::Permit::Helper::Naming
7
+ end
8
+
9
+ class CanTango::Permit::Mine
10
+ include CanTango::Permit::Helper::Naming
11
+ extend CanTango::Permit::Helper::Naming
12
+ end
13
+
14
+ module AdminPermits
15
+ class MyOwnPermit
16
+ include CanTango::Permit::Helper::Naming
17
+ extend CanTango::Permit::Helper::Naming
18
+ end
19
+ end
20
+
21
+ describe CanTango::Permit::Helper::Naming do
22
+ subject { MyOwnPermit.new }
23
+ describe '#permit_name' do
24
+ describe 'permit_name clazz' do
25
+ specify { subject.permit_name(MyOwnPermit).should == :my_own }
26
+ end
27
+
28
+ describe 'permit_name clazz' do
29
+ specify { CanTango::Permit::Mine.permit_name.should == :mine }
30
+ end
31
+
32
+ describe 'clazz.permit_name' do
33
+ specify { MyOwnPermit.permit_name.should == :my_own }
34
+ end
35
+ end
36
+
37
+ describe '#account_name' do
38
+ describe 'account_name clazz' do
39
+ specify { subject.account_name(MyOwnPermit).should == nil }
40
+ end
41
+
42
+ describe 'account_name clazz' do
43
+ specify { MyOwnPermit.account_name.should == nil }
44
+ end
45
+
46
+ describe 'account_name clazz' do
47
+ specify { CanTango::Permit::Mine.account_name.should == nil }
48
+ end
49
+
50
+ context 'wrapped in valid account namespace' do
51
+ describe 'account_name clazz' do
52
+ specify { AdminPermits::MyOwnPermit.account_name.should == :admin }
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ class MyOwnPermit
4
+ include CanTango::Permit::Helper::State
5
+ end
6
+
7
+ describe CanTango::Permit::Helper::Naming do
8
+ subject { MyOwnPermit.new }
9
+ describe '#enable!' do
10
+ before do
11
+ subject.enable!
12
+ end
13
+ specify { subject.enabled?.should be_true }
14
+ specify { subject.disabled?.should be_false }
15
+ end
16
+
17
+ describe '#disable!' do
18
+ before do
19
+ subject.disable!
20
+ end
21
+ specify { subject.enabled?.should be_false }
22
+ specify { subject.disabled?.should be_true }
23
+ end
24
+ end
@@ -0,0 +1,2 @@
1
+ # The special Default permit which will be executed last for any candidate regardless unless break-out
2
+ # has occured
@@ -0,0 +1,2 @@
1
+ # The special First permit to be executed which has the potential to break out of the
2
+ # execution loop on some specific condition
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+ require 'fixtures/models'
3
+
4
+ class AdminPermit < CanTango::Permit::UserType
5
+ def initialize ability
6
+ super
7
+ end
8
+
9
+ protected
10
+
11
+ def static_rules
12
+ can :read, Article
13
+ end
14
+ end
15
+
16
+
17
+ describe CanTango::Permit::UserType do
18
+ before do
19
+ @user = SimpleUser.new
20
+ @ability = CanTango::Ability::Base.new @user
21
+ @permit = AdminPermit.new @ability
22
+ end
23
+
24
+ subject { @permit }
25
+
26
+ describe 'registration' do
27
+ describe 'permit types' do
28
+ specify { CanTango.config.permits.types.registered.should include(:user_type) }
29
+ end
30
+
31
+ describe 'permits of type' do
32
+ specify { CanTango.config.permits.registered_for(:user_type, :admin).should == AdminPermit }
33
+ end
34
+ end
35
+
36
+ describe 'attributes' do
37
+ it "should be the permit for the :admin user" do
38
+ subject.permit_name.should == :admin
39
+ end
40
+
41
+ it "should have a user candidate" do
42
+ subject.candidate.should be_a(SimpleUser)
43
+ end
44
+
45
+ it "should have a user subject" do
46
+ subject.send(:user).should be_a(SimpleUser)
47
+ end
48
+
49
+ it "should have an ability" do
50
+ subject.ability.should be_a(CanTango::Ability::Base)
51
+ end
52
+ end
53
+
54
+ context 'config permits' do
55
+ let(:permits) { CanTango.config.permits }
56
+
57
+ describe 'disable Admin Permit' do
58
+ before do
59
+ permits.disable_for :user_type, [:admin, :editor]
60
+ end
61
+
62
+ it "should have an ability" do
63
+ subject.disabled?.should be_true
64
+ end
65
+ end
66
+
67
+ describe 'enable all Permits' do
68
+ before do
69
+ permits.enable_all!
70
+ end
71
+
72
+ it "should be disabled" do
73
+ permits.disabled.should be_empty
74
+ subject.disabled?.should be_false
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ class AdminUserPermit
4
+ end
5
+
6
+ class PermitReg
7
+ include CanTango::Registry::Permit
8
+ end
9
+
10
+ describe CanTango::Registry::Permit do
11
+ before do
12
+ @reg = PermitReg.new
13
+
14
+ CanTango.config.permits.types.register :user_type
15
+
16
+ # puts CanTango.config.permits.types.inspect
17
+
18
+ permit_registry = @reg.registry_for(:user_type)
19
+ permit_registry[:admin] = AdminUserPermit
20
+ end
21
+ subject { @reg }
22
+
23
+ describe 'registry_for type' do
24
+ context 'existing type' do
25
+ specify { subject.registry_for(:user_type).should be_a CanTango::Registry::Hash }
26
+ end
27
+
28
+ context 'non-existing type' do
29
+ specify do
30
+ lambda { subject.registry_for(:unknown) }.should raise_error
31
+ end
32
+ end
33
+ end
34
+
35
+ describe 'registered_for type, name = nil' do
36
+ context 'existing permit' do
37
+ specify { subject.registered_for(:user_type, :admin).should == AdminUserPermit }
38
+ end
39
+
40
+ context 'non-existing permit type' do
41
+ specify do
42
+ lambda { subject.registered_for(:not_there, :unknown) }.should raise_error
43
+ end
44
+ end
45
+
46
+ context 'non-existing permit' do
47
+ specify do
48
+ subject.registered_for(:user_type, :unknown).should be_nil
49
+ end
50
+ end
51
+ end
52
+
53
+ describe 'all' do
54
+ specify do
55
+ subject.all.first.registered.admin.should be_true
56
+ end
57
+ end
58
+
59
+ describe 'show_all' do
60
+ before do
61
+ puts subject.show_all
62
+ end
63
+ specify do
64
+ subject.show_all.should match(/admin/)
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,49 @@
1
+ ---
2
+ roles:
3
+ admin:
4
+ can:
5
+ manage:
6
+ - all
7
+ user:
8
+ can:
9
+ read:
10
+ - ^articles
11
+ - Post
12
+ write:
13
+ - Comment
14
+ cannot:
15
+ write:
16
+ - Article
17
+ role_groups:
18
+ bloggers:
19
+ can:
20
+ read:
21
+ - Article
22
+ - Comment
23
+ cannot:
24
+ write:
25
+ - Article
26
+ - Post
27
+ editors:
28
+ can:
29
+ read:
30
+ - Article
31
+ - Comment
32
+ cannot:
33
+ write:
34
+ - Article
35
+ - Post
36
+ licenses:
37
+ editors:
38
+ can:
39
+ manage:
40
+ - all
41
+ users:
42
+ kris@gmail.com:
43
+ can:
44
+ read:
45
+ - Article
46
+ user_types: {}
47
+
48
+ account_types: {}
49
+
@@ -0,0 +1,6 @@
1
+ another_articles:
2
+ [Post, Article]
3
+ articles:
4
+ [Article, Post, Comment]
5
+ user_models:
6
+ [Admin, Guest, User]
@@ -0,0 +1,18 @@
1
+ bloggers:
2
+ can:
3
+ read:
4
+ - Article
5
+ - Comment
6
+ cannot:
7
+ write:
8
+ - Article
9
+ - Post
10
+ editors:
11
+ can:
12
+ read:
13
+ - Article
14
+ - Comment
15
+ cannot:
16
+ write:
17
+ - Article
18
+ - Post
@@ -0,0 +1,4 @@
1
+ bloggers:
2
+ can:
3
+ manage:
4
+ - Comment
@@ -0,0 +1,60 @@
1
+ user_types:
2
+ admin:
3
+ can:
4
+ manage:
5
+ - all
6
+
7
+ account_types:
8
+ editor:
9
+ can:
10
+ manage:
11
+ - all
12
+
13
+ roles:
14
+ admin:
15
+ can:
16
+ manage:
17
+ - all
18
+
19
+ user:
20
+ can:
21
+ read:
22
+ - Comment
23
+ - Post
24
+ - Article
25
+ - User
26
+ write:
27
+ - Article
28
+ manage:
29
+ - Comment
30
+ - Post
31
+
32
+ role_groups:
33
+ bloggers:
34
+ can:
35
+ read:
36
+ - Article
37
+ - Comment
38
+ cannot:
39
+ write:
40
+ - Article
41
+ - Post
42
+ editors:
43
+ can:
44
+ read:
45
+ - Article
46
+ - Comment
47
+ cannot:
48
+ write:
49
+ - Article
50
+ - Post
51
+
52
+ licenses:
53
+ editors:
54
+ can:
55
+ manage:
56
+ - all
57
+ users:
58
+ kris@gmail.com:
59
+ can:
60
+ cannot: