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,52 @@
1
+ require 'rspec'
2
+ require 'cantango'
3
+ require 'fixtures/models'
4
+ require 'cantango/rspec'
5
+
6
+ def config_folder
7
+ File.dirname(__FILE__)+ "/../fixtures/config/"
8
+ end
9
+
10
+ CanTango.configure do |config|
11
+ config.clear!
12
+ config.ability.mode = :no_cache
13
+ config.engine(:permit).set :on
14
+ config.debug!
15
+ end
16
+
17
+ class UserPermit < CanTango::Permit::UserType
18
+ def initialize ability
19
+ super
20
+ end
21
+
22
+ protected
23
+
24
+ def calc_rules
25
+ can :read, Article
26
+ end
27
+ end
28
+
29
+ describe CanTango::Engine::Permit do
30
+ context 'cache' do
31
+ before do
32
+ @user = User.new 'kris', 'kris@mail.ru', :roles => [:editor]
33
+ @ability = CanTango::Ability::Base.new @user
34
+ end
35
+
36
+ subject { CanTango::PermitEngine.new ability }
37
+
38
+ describe '#execute!' do
39
+ before do
40
+ subject.execute!
41
+ end
42
+
43
+ it 'engine should have rules' do
44
+ subject.send(:rules).should_not be_empty
45
+ end
46
+
47
+ it 'engine cache should have rules' do
48
+ subject.cache.empty?.should be_false
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,58 @@
1
+ require 'rspec'
2
+ require 'cantango'
3
+ require 'fixtures/models'
4
+ require 'cantango/rspec'
5
+
6
+ def config_folder
7
+ File.dirname(__FILE__)+ "/../fixtures/config/"
8
+ end
9
+
10
+ CanTango.configure do |config|
11
+ config.clear!
12
+ config.ability.mode = :no_cache
13
+ config.engine(:permit) do |engine|
14
+ engine.mode = :no_cache
15
+ end
16
+ config.debug!
17
+ end
18
+
19
+ class UserPermit < CanTango::UserPermit
20
+ def initialize ability
21
+ super
22
+ end
23
+
24
+ protected
25
+
26
+ def calc_rules
27
+ can :read, Article
28
+ end
29
+ end
30
+
31
+ describe CanTango::PermitEngine do
32
+ context 'no-cache' do
33
+ before do
34
+ @user = User.new 'kris', 'kris@mail.ru', :roles => [:editor]
35
+ end
36
+
37
+ describe 'Permit engine' do
38
+ let (:ability) do
39
+ CanTango::Ability.new @user
40
+ end
41
+ subject { CanTango::PermitEngine.new ability }
42
+
43
+ describe '#execute!' do
44
+ before do
45
+ subject.execute!
46
+ end
47
+
48
+ it 'engine should have rules' do
49
+ subject.send(:rules).should_not be_empty
50
+ end
51
+
52
+ it 'engine cache should be empty' do
53
+ subject.cache.empty?.should be_true
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+ require 'fixtures/models'
3
+
4
+ class UserRolePermit < CanTango::Permit::Role
5
+ def initialize ability
6
+ super
7
+ end
8
+
9
+ protected
10
+
11
+ def calc_rules
12
+ can(:read, Post) if $test == true
13
+ end
14
+ end
15
+
16
+ class AdminRolePermit < CanTango::Permit::Role
17
+ def initialize ability
18
+ super
19
+ end
20
+
21
+ protected
22
+
23
+ def calc_rules
24
+ can(:read, Article) do |article|
25
+ $test == true
26
+ end
27
+ end
28
+ end
29
+
30
+ describe CanTango::Permits::Permit::Role do
31
+ before do
32
+ @user = User.new 'kris', 'kris@mail.ru', :roles => [:editor]
33
+ @ua = UserAccount.new user, :roles => [:admin, :user], :role_groups => []
34
+ @user.account = @ua
35
+
36
+ @ability = CanTango::Ability::Base.new user_account
37
+ @permit = AdminRolePermit.new ability
38
+ end
39
+
40
+ before(:each) do
41
+ CanTango.configure do |config|
42
+ config.engine(:permit).set :on
43
+ end
44
+ end
45
+
46
+ describe 'Having some dynamic conditions based on global things' do
47
+ it "shoud react if global thing changed" do
48
+ pending
49
+ $test = true
50
+ ability.can?(:read, Article.new).should == true
51
+ $test = false
52
+ ability.can?(:read, Article.new).should == false
53
+ end
54
+ end
55
+
56
+ describe 'Having some dynamic conditions based on global things' do
57
+ it "shoud react if global thing changed" do
58
+ pending "Need to reveal CanCan's situation and caching"
59
+ #$test = true
60
+ #ability.can?(:read, Post.new).should == true
61
+ #$test = false
62
+ #ability.can?(:read, Post.new).should == false
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+ require 'fixtures/models'
3
+
4
+ class MembershipPermit < CanTango::Permit::Attribute
5
+ class Builder < CanTango::Permit::Attribute::Builder
6
+ attribute :membership
7
+ end
8
+
9
+ def self.inherited(base_clazz)
10
+ register base_clazz, :name => attribute_name(base_clazz)
11
+ end
12
+
13
+ # attribute :membership
14
+ end
15
+
16
+ class CanTango::Ability::Base
17
+ def subject
18
+ candidate
19
+ end
20
+
21
+ def user
22
+ subject
23
+ end
24
+ end
25
+
26
+ class AdminMembershipPermit < MembershipPermit
27
+ protected
28
+
29
+ def calc_rules
30
+ can :read, Article
31
+ end
32
+ end
33
+
34
+ class Admin
35
+ def memberships
36
+ [:admin]
37
+ end
38
+ end
39
+
40
+ describe 'Custom Permit registration - Membership' do
41
+ it 'should register :membership as available permit' do
42
+ CanTango.config.permits.registered_for(:membership, :admin).should == AdminMembershipPermit
43
+ end
44
+
45
+ it 'should register :membership as available permit type' do
46
+ CanTango.config.permits.types.available.should include(:membership)
47
+ end
48
+
49
+ before do
50
+ @user = Admin.new 'kris', 'kris@mail.ru'
51
+ @ability = CanTango::Ability::Base.new @user
52
+ @permit = AdminMembershipPermit.new @ability
53
+ @executor = CanTango::Executor::Permit::Base.new @permit
54
+ end
55
+
56
+ describe '#execute!' do
57
+ describe 'should define read Article rule' do
58
+ specify do
59
+ @executor.execute!
60
+ @executor.permit.rules.should_not be_empty
61
+ end
62
+ end
63
+ end
64
+ end
65
+
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ module AdminAccountPermits
4
+ class AdminRolePermit < CanTango::Permit::Role
5
+ end
6
+ end
7
+
8
+ class MusicianRolePermit < CanTango::Permit::Role; end
9
+ class EditorsRoleGroupPermit < CanTango::Permit::RoleGroup; end
10
+ class AdminAccountPermit < CanTango::Permit::AccountType; end
11
+ class AdminPermit < CanTango::Permit::UserType; end
12
+
13
+ describe CanTango::Permit do
14
+
15
+ it "should register RolePermit-based permits" do
16
+ CanTango.config.permits.admin_account.role[:admin].should == AdminAccountPermits::AdminRolePermit
17
+ CanTango.config.permits.role[:musician].should == MusicianRolePermit
18
+ end
19
+
20
+ it "should register RoleGroupPermit-based permits" do
21
+ CanTango.config.permits.role_group[:editors].should == EditorsRoleGroupPermit
22
+ end
23
+
24
+ it "should register UserPermit-based permits" do
25
+ CanTango.config.permits.user[:admin].should == AdminPermit
26
+ end
27
+ it "should register AccountPermit-based permits" do
28
+ CanTango.config.permits.account[:admin].should == AdminAccountPermit
29
+ end
30
+
31
+ context "registration of double-inherited permits (fx RolePermit ones) - specially for Kris ;)" do
32
+ before do
33
+ class GuitaristRolePermit < MusicianRolePermit; end
34
+ class AdminAccountPermits::AngryAdminRolePermit < AdminAccountPermits::AdminRolePermit; end
35
+ end
36
+
37
+ it "should register basic namespaced" do
38
+ CanTango.config.permits.role[:guitarist].should == GuitaristRolePermit
39
+ end
40
+
41
+ it "should register account-namespaced" do
42
+ CanTango.config.permits.admin_account.role[:angry_admin].should == AdminAccountPermits::AngryAdminRolePermit
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,46 @@
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 calc_rules
12
+ can :read, Article
13
+ end
14
+ end
15
+
16
+ class CanTango::Ability::Base
17
+ def subject
18
+ candidate
19
+ end
20
+
21
+ def user
22
+ subject
23
+ end
24
+ end
25
+
26
+ describe CanTango::Executor::Permit::Base do
27
+ before do
28
+ @user = Admin.new 'kris', 'kris@mail.ru'
29
+ @ability = CanTango::Ability::Base.new @user
30
+ @permit = AdminPermit.new @ability
31
+ @executor = CanTango::Executor::Permit::Base.new @permit
32
+ end
33
+
34
+ describe '#execute!' do
35
+ describe 'should find permit based on #user_type' do
36
+ specify { lambda{ @executor.execute! }.should_not raise_error }
37
+ end
38
+
39
+ describe 'should define read Article rule' do
40
+ specify do
41
+ @executor.execute!
42
+ @executor.permit.rules.should_not be_empty
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,53 @@
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 no_cache_rules
12
+ can :edit, Article
13
+ can :delete, Article
14
+ end
15
+ end
16
+
17
+ class CanTango::Ability::Base
18
+ def subject
19
+ candidate
20
+ end
21
+
22
+ def user
23
+ subject
24
+ end
25
+ end
26
+
27
+ describe CanTango::Executor::Permit::Base do
28
+ context 'non-cached only' do
29
+ before do
30
+ CanTango.configure.ability.modes.execution.register :no_cache
31
+
32
+ @admin = Admin.new 'kris', 'kris@mail.ru'
33
+ @ability = CanTango::Ability::Base.new @admin
34
+ @permit = AdminPermit.new @ability
35
+ @executor = CanTango::Executor::Permit::Base.new @permit
36
+ end
37
+
38
+ subject { @executor }
39
+
40
+ describe 'config no_cache' do
41
+ specify { CanTango.configure.ability.modes.execution.registered.should == [:no_cache] }
42
+ end
43
+
44
+ describe 'rules contain only non-cached rules' do
45
+ before do
46
+ subject.execute!
47
+ end
48
+ it 'should have 2 rules' do
49
+ subject.rules.size.should == @ability.rules.size
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+ require 'fixtures/models'
3
+
4
+ class SystemPermit < CanTango::Permit::Special
5
+ def initialize ability
6
+ super
7
+ end
8
+
9
+ protected
10
+
11
+ def calc_rules
12
+ can :read, Article
13
+ can :write, Post
14
+ can :create, Comment
15
+ :break
16
+ end
17
+ end
18
+
19
+ describe CanTango::Executor::Permit::System do
20
+ before do
21
+ @user = User.new 'kris', 'kris@mail.ru'
22
+ @ua = UserAccount.new @user
23
+ @user.account = @ua
24
+
25
+ @ability = CanTango::Ability::Base.new @user
26
+
27
+ @permit = SystemRolePermit.new @ability
28
+ @executor = CanTango::Executor::Permit::System.new @permit
29
+ end
30
+
31
+ describe '#execute!' do
32
+ describe 'should execute permit' do
33
+ specify { lambda{ executor.execute! }.should_not raise_error }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+ require 'fixtures/models'
3
+
4
+ CanTango.config.debug.set :on
5
+
6
+ class AdminPermit < CanTango::Permit::UserType
7
+ def initialize ability
8
+ super
9
+ end
10
+
11
+ protected
12
+
13
+ def calc_rules
14
+ end
15
+ end
16
+
17
+ class CanTango::Ability::Base
18
+ def subject
19
+ candidate
20
+ end
21
+
22
+ def user
23
+ subject
24
+ end
25
+ end
26
+
27
+ describe CanTango::Factory::Permits do
28
+ before do
29
+ @user = User.new 'kris', 'kris@mail.ru'
30
+ @admin = Admin.new 'admin', 'admin@mail.ru'
31
+ @ua = UserAccount.new @user
32
+ @user.account = @ua
33
+
34
+ @ability = CanTango::Ability::Base.new @user
35
+ @admin_ability = CanTango::Ability::Base.new @admin
36
+
37
+ @factory = CanTango::Factory::Permits.new @ability, :user_type
38
+ @admin_factory = CanTango::Factory::Permits.new @admin_ability, :user_type
39
+ end
40
+
41
+ context 'Admin permits factory' do
42
+ subject { @factory }
43
+
44
+ describe '#create' do
45
+ it 'should build a list of permits' do
46
+ subject.create.should be_empty
47
+ end
48
+ end
49
+ end
50
+
51
+ context 'Admin permits factory' do
52
+ subject { @admin_factory }
53
+
54
+ describe 'attributes' do
55
+ it "should have an ability" do
56
+ subject.ability.should be_a(CanTango::Ability::Base)
57
+ end
58
+ end
59
+
60
+ describe '#create' do
61
+ it 'should build a list of permits' do
62
+ subject.create.should_not be_empty
63
+ end
64
+
65
+ it 'should have the AdminPermit in the list' do
66
+ subject.create.first.should be_a AdminPermit
67
+ end
68
+ end
69
+ end
70
+ end