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,41 @@
1
+ module Cantango
2
+ module Generators
3
+ module Basic
4
+ def rules_logic
5
+ ''
6
+ end
7
+
8
+ def license_logic
9
+ ''
10
+ end
11
+
12
+ def base_logic
13
+ %{
14
+ }
15
+ end
16
+
17
+ def admin_logic
18
+ %{
19
+ can :manage, :all
20
+ }
21
+ end
22
+
23
+ def guest_logic
24
+ %{
25
+ can :read, :all
26
+ }
27
+ end
28
+
29
+ def account
30
+ options[:account]
31
+ end
32
+
33
+ [:is_user, :is_account, :is_group].each do |name|
34
+ define_method :"#{name}?" do
35
+ false
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
@@ -0,0 +1,29 @@
1
+ require 'generators/cantango/base'
2
+ require 'generators/cantango/license_base'
3
+
4
+ module Cantango
5
+ module Generators
6
+ class LicenseGenerator < Cantango::Generators::Base
7
+ desc "Creates a License for a Permit in 'app/licenses' with reusable permissions"
8
+
9
+ argument :name, :type => :string, :desc => "Name of license"
10
+
11
+ class_option :licenses, :type => :array, :default => [], :desc => "Sub licenses"
12
+
13
+ source_root File.dirname(__FILE__) + '/templates'
14
+
15
+ def main_flow
16
+ return if name.empty?
17
+ create_license
18
+ end
19
+
20
+ protected
21
+
22
+ def create_license
23
+ template "license.erb", "app/permits/licenses/#{name}_license.rb"
24
+ end
25
+
26
+ include Cantango::Generators::LicenseBase
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ class <%= name.to_s.camelize %>License < CanTango::License
2
+ def initialize name
3
+ super
4
+ end
5
+
6
+ def permit_rules
7
+ <%= rules_logic.strip %>
8
+ <%= license_logic %>
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ module Cantango
2
+ module Generators
3
+ module LicenseBase
4
+ def licenses
5
+ options[:licenses]
6
+ end
7
+
8
+ def license_logic
9
+ return ' # use any licenses here' if licenses.empty?
10
+ ls = licenses.map{|c| ":#{c}"}.join(", ")
11
+ "licenses #{ls}"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module Cantango
2
+ module Generators
3
+ class LicensesGenerator < Rails::Generators::Base
4
+ desc "Creates Licenses for use with CanCan Permits"
5
+
6
+ argument :licenses, :type => :array, :desc => "Licenses"
7
+
8
+ source_root File.dirname(__FILE__) + '/../license/templates'
9
+
10
+ def main_flow
11
+ licenses.each do |license|
12
+ template_license(license)
13
+ end
14
+ end
15
+
16
+ protected
17
+
18
+ attr_accessor :license_name
19
+
20
+ def template_license name
21
+ self.license_name = name
22
+ template "license.erb", "app/licenses/#{name}_license.rb"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,58 @@
1
+ require 'generators/cantango/basic'
2
+
3
+ module Cantango
4
+ module Generators
5
+ module PermitGenerator
6
+ attr_accessor :permit_name, :permit_logic
7
+
8
+ include Cantango::Generators::Basic
9
+
10
+ def template_permit name, account = nil
11
+ @permit_name = name
12
+ set_logic name
13
+ account.present? ? template_account_permit(name, account) : template_simple_permit(name)
14
+ end
15
+
16
+ def template_simple_permit name
17
+ template permit_source, "app/permits/#{permit_target(name)}"
18
+ end
19
+
20
+ def template_account_permit name, account
21
+ template "account_permit.erb" , "app/permits/#{account}/#{permit_target(name)}"
22
+ end
23
+
24
+ def load_permit_template name
25
+ template = ERB.new File.open(template_filepath).read.gsub(/\n/, "\n\s\s")
26
+ template.result(binding)
27
+ end
28
+
29
+ def template_filepath
30
+ File.join source_path, permit_source
31
+ end
32
+
33
+ def source_path
34
+ source_paths.first
35
+ end
36
+
37
+ def permit_source
38
+ return "user_permit.erb" if is_user?
39
+ return "account_permit.erb" if is_account?
40
+
41
+ is_group? ? "role_group_permit.erb" : "role_permit.erb"
42
+ end
43
+
44
+ def permit_target name
45
+ name = name.to_s.underscore
46
+ return "#{name}_permit.rb" if is_user?
47
+ return "#{name}_account_permit.rb" if is_account?
48
+
49
+ is_group? ? "#{name}_role_group_permit.rb" : "#{name}_role_permit.rb"
50
+ end
51
+
52
+ def set_logic name
53
+ meth = "#{name}_logic"
54
+ @permit_logic = respond_to?(meth) ? send(meth) : base_logic
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,39 @@
1
+ require 'generators/cantango/base'
2
+ require 'generators/cantango/license_base'
3
+ require 'generators/cantango/permit_generator'
4
+
5
+ module Cantango
6
+ module Generators
7
+ class RolePermitGenerator < Cantango::Generators::Base
8
+ desc "Creates a Permit for a role in 'app/permits' with specific permissions and/or licenses"
9
+
10
+ argument :role, :type => :string,
11
+ :desc => "Role to create permit for"
12
+
13
+ class_option :licenses, :type => :array, :default => [],
14
+ :desc => "Licenses to use in Permit"
15
+
16
+ class_option :account, :type => :string,
17
+ :desc => "Generate permits for a specific user account"
18
+
19
+ class_option :group, :type => :boolean, :default => false, :desc => "Generate permit for a role group"
20
+
21
+ source_root File.dirname(__FILE__) + '/templates'
22
+
23
+ def main_flow
24
+ template_permit role
25
+ end
26
+
27
+ protected
28
+
29
+ include Cantango::Generators::LicenseBase
30
+ include Cantango::Generators::PermitGenerator
31
+
32
+ alias_method :role_group, :role
33
+
34
+ def is_group?
35
+ options[:group]
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,4 @@
1
+ module <%= account.to_s.camelize%>AccountPermits
2
+ <%= load_permit_template :role_permit %>
3
+ end
4
+
@@ -0,0 +1,24 @@
1
+ class <%= permit_name.to_s.camelize %>RoleGroupPermit < CanTango::RoleGroupPermit
2
+ def initialize ability
3
+ super
4
+ end
5
+
6
+ protected
7
+
8
+ def permit_rules
9
+ # insert your can, cannot and any other rule statements here
10
+ <%= rules_logic.strip %>
11
+ <%= license_logic %>
12
+ end
13
+
14
+ module Cached
15
+ def permit_rules
16
+ end
17
+ end
18
+
19
+ module NonCached
20
+ def permit_rules
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,23 @@
1
+ class <%= permit_name.to_s.camelize %>RolePermit < CanTango::RolePermit
2
+ def initialize ability
3
+ super
4
+ end
5
+
6
+ protected
7
+
8
+ def permit_rules
9
+ # insert your can, cannot and any other rule statements here
10
+ <%= rules_logic.strip %>
11
+ <%= license_logic %>
12
+ end
13
+
14
+ module Cached
15
+ def permit_rules
16
+ end
17
+ end
18
+
19
+ module NonCached
20
+ def permit_rules
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,45 @@
1
+ require 'generators/cantango/permit_generator'
2
+
3
+ module Cantango
4
+ module Generators
5
+ class RolePermitsGenerator < Rails::Generators::Base
6
+ desc "Creates a Permit for each role in 'app/permits' and ensures that the permit folder is added to Rails load path."
7
+
8
+ argument :roles, :type => :array,
9
+ :desc => "Roles to create permits for"
10
+
11
+ class_option :special_permits, :type => :boolean, :default => false,
12
+ :desc => "Create special permits Syatem and Any"
13
+
14
+ class_option :account, :type => :string,
15
+ :desc => "Generate permits for a specific user account"
16
+
17
+ class_option :group, :type => :boolean, :default => false,
18
+ :desc => "Generate permits for role groups"
19
+
20
+ source_root File.dirname(__FILE__) + '/../role_permit/templates'
21
+
22
+ def main_flow
23
+ create_special_permits if special_permits?
24
+ create_permits
25
+ end
26
+
27
+ protected
28
+
29
+ include Cantango::Generators::PermitGenerator
30
+
31
+ def create_special_permits
32
+ template_permit :any
33
+ template_permit :system
34
+ end
35
+
36
+ def create_permits
37
+ roles.each { |role| template_permit role }
38
+ end
39
+
40
+ def special_permits?
41
+ options[:special_permits]
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,5 @@
1
+ module <%= account.to_s.camelize%>AccountPermits
2
+ <%= load_permit_template :user_permit %>
3
+ end
4
+
5
+
@@ -0,0 +1,23 @@
1
+ class <%= user.to_s.camelize %>Permit < CanTango::UserPermit
2
+ def initialize ability
3
+ super
4
+ end
5
+
6
+ protected
7
+
8
+ def permit_rules
9
+ # insert your can, cannot and any other rule statements here
10
+ <%= permit_logic.strip %>
11
+ <%= license_logic %>
12
+ end
13
+
14
+ module Cached
15
+ def permit_rules
16
+ end
17
+ end
18
+
19
+ module NonCached
20
+ def permit_rules
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,36 @@
1
+ require 'generators/cantango/base'
2
+ require 'generators/cantango/license_base'
3
+ require 'generators/cantango/permit_generator'
4
+
5
+ module Cantango
6
+ module Generators
7
+ class UserPermitGenerator < Cantango::Generators::Base
8
+ desc "Creates a Permit for a user in 'app/permits' with specific permissions and/or licenses"
9
+
10
+ argument :user, :type => :string, :desc => "User class to create permit for"
11
+
12
+ class_option :licenses, :type => :array, :default => [], :desc => "Licenses to use in Permit"
13
+
14
+ class_option :account, :type => :string,
15
+ :desc => "Generate permits for a specific user account"
16
+
17
+ class_option :group, :type => :boolean, :default => false, :desc => "Generate permit for a role group"
18
+
19
+ source_root File.dirname(__FILE__) + '/templates'
20
+
21
+ def main_flow
22
+ template_permit user, account
23
+ end
24
+
25
+ protected
26
+
27
+ def is_user?
28
+ true
29
+ end
30
+
31
+ include Cantango::Generators::LicenseBase
32
+ include Cantango::Generators::PermitGenerator
33
+ end
34
+ end
35
+ end
36
+
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :permits do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ class Context
4
+ include CanTango::Ability::Helper::Permits
5
+ end
6
+
7
+ describe CanTango::Ability::Helper::Permits do
8
+ subject { Context.new }
9
+ describe 'permits?' do
10
+ specify do
11
+ subject.permits?.should == CanTango.config.permits.on?
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ class AdminAccountPermitBuilder < CanTango::Builder::Permit::AccountType
4
+ end
5
+
6
+ describe CanTango::Builder::Permit::AccountType do
7
+ before do
8
+ @user = User.new 'kris', 'kris@mail.ru', :roles => [:editor]
9
+ @ability = CanTango::Ability::Base.new @user
10
+ end
11
+
12
+ subject do
13
+ AdminAccountPermitBuilder.new @ability
14
+ end
15
+
16
+ its(:permit_type) { should == :account_type }
17
+
18
+ describe 'build' do
19
+ its(:build) { should be_a CanTango::Permit::AccountType }
20
+ end
21
+
22
+ describe 'self.permit_type' do
23
+ specify { AdminAccountPermitBuilder.permit_type.should == :account_type }
24
+ end
25
+ end