cantango 0.8.0 → 0.8.5.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 (270) hide show
  1. data/Gemfile +32 -19
  2. data/README.textile +79 -131
  3. data/VERSION +1 -1
  4. data/cantango.gemspec +94 -61
  5. data/lib/cantango.rb +4 -6
  6. data/lib/cantango/ability.rb +28 -17
  7. data/lib/cantango/ability/cache.rb +30 -60
  8. data/lib/cantango/ability/cache/base_cache.rb +1 -1
  9. data/lib/cantango/ability/cache/key.rb +39 -0
  10. data/lib/cantango/ability/cache/kompiler.rb +22 -6
  11. data/lib/cantango/ability/cache/moneta_cache.rb +1 -1
  12. data/lib/cantango/ability/cache/reader.rb +32 -0
  13. data/lib/cantango/ability/cache/rules_cache.rb +31 -0
  14. data/lib/cantango/ability/cache/session_cache.rb +3 -2
  15. data/lib/cantango/ability/cache/writer.rb +42 -0
  16. data/lib/cantango/ability/cache_helpers.rb +28 -0
  17. data/lib/cantango/ability/masquerade_helpers.rb +7 -2
  18. data/lib/cantango/ability/permission_helpers.rb +0 -8
  19. data/lib/cantango/ability/permit_helpers.rb +0 -17
  20. data/lib/cantango/ability/role_helpers.rb +0 -2
  21. data/lib/cantango/ability/user_helpers.rb +1 -0
  22. data/lib/cantango/adapter/compiler.rb +9 -0
  23. data/lib/cantango/adapter/moneta.rb +23 -0
  24. data/lib/cantango/api.rb +1 -1
  25. data/lib/cantango/api/aliases.rb +4 -8
  26. data/lib/cantango/api/attributes.rb +17 -0
  27. data/lib/cantango/api/common.rb +6 -0
  28. data/lib/cantango/api/options.rb +9 -5
  29. data/lib/cantango/cache.rb +1 -1
  30. data/lib/cantango/cache/hash_cache.rb +34 -0
  31. data/lib/cantango/configuration.rb +13 -8
  32. data/lib/cantango/configuration/adapters.rb +25 -0
  33. data/lib/cantango/configuration/categories.rb +3 -1
  34. data/lib/cantango/configuration/engines.rb +83 -11
  35. data/lib/cantango/configuration/engines/cache.rb +12 -1
  36. data/lib/cantango/configuration/engines/engine.rb +5 -5
  37. data/lib/cantango/configuration/engines/permission.rb +1 -1
  38. data/lib/cantango/configuration/permit_registry.rb +17 -0
  39. data/lib/cantango/configuration/permits.rb +29 -0
  40. data/lib/cantango/configuration/registry.rb +5 -2
  41. data/lib/cantango/configuration/role_groups.rb +3 -0
  42. data/lib/cantango/configuration/role_registry.rb +4 -0
  43. data/lib/cantango/configuration/roles.rb +2 -0
  44. data/lib/cantango/configuration/user_accounts.rb +1 -0
  45. data/lib/cantango/configuration/users.rb +1 -0
  46. data/lib/cantango/engine.rb +13 -0
  47. data/lib/cantango/filters.rb +5 -0
  48. data/lib/cantango/filters/filter.rb +34 -0
  49. data/lib/cantango/filters/role_filter.rb +29 -0
  50. data/lib/cantango/filters/role_group_filter.rb +28 -0
  51. data/lib/cantango/permission_engine.rb +26 -1
  52. data/lib/cantango/permission_engine/collector.rb +7 -2
  53. data/lib/cantango/permission_engine/compiler.rb +8 -1
  54. data/lib/cantango/permission_engine/evaluator.rb +2 -2
  55. data/lib/cantango/permission_engine/factory.rb +8 -12
  56. data/lib/cantango/permission_engine/loader.rb +1 -1
  57. data/lib/cantango/permission_engine/loader/base.rb +1 -1
  58. data/lib/cantango/permission_engine/loader/categories.rb +3 -3
  59. data/lib/cantango/permission_engine/loader/permissions.rb +8 -5
  60. data/lib/cantango/permission_engine/moneta_store.rb +2 -2
  61. data/lib/cantango/permission_engine/parser.rb +1 -1
  62. data/lib/cantango/permission_engine/parser/categories.rb +1 -1
  63. data/lib/cantango/permission_engine/parser/category.rb +1 -1
  64. data/lib/cantango/permission_engine/parser/default.rb +1 -2
  65. data/lib/cantango/permission_engine/parser/ownership.rb +1 -1
  66. data/lib/cantango/permission_engine/parser/permissions.rb +1 -1
  67. data/lib/cantango/permission_engine/parser/regex.rb +2 -2
  68. data/lib/cantango/permission_engine/parser/relationship.rb +1 -1
  69. data/lib/cantango/permission_engine/parser/rule.rb +1 -1
  70. data/lib/cantango/permission_engine/permission.rb +2 -2
  71. data/lib/cantango/permission_engine/selector.rb +3 -3
  72. data/lib/cantango/permission_engine/selector/account_types.rb +24 -0
  73. data/lib/cantango/permission_engine/selector/base.rb +3 -3
  74. data/lib/cantango/permission_engine/selector/licenses.rb +2 -2
  75. data/lib/cantango/permission_engine/selector/role_groups.rb +7 -6
  76. data/lib/cantango/permission_engine/selector/roles.rb +10 -6
  77. data/lib/cantango/permission_engine/selector/user_types.rb +23 -0
  78. data/lib/cantango/permission_engine/selector/users.rb +2 -2
  79. data/lib/cantango/permission_engine/statement.rb +10 -9
  80. data/lib/cantango/permission_engine/statements.rb +27 -25
  81. data/lib/cantango/permission_engine/store.rb +1 -1
  82. data/lib/cantango/permission_engine/yaml_store.rb +2 -2
  83. data/lib/cantango/permit_engine.rb +29 -4
  84. data/lib/cantango/permit_engine/builder.rb +2 -3
  85. data/lib/cantango/permit_engine/builder/base.rb +9 -1
  86. data/lib/cantango/permit_engine/builder/special_permits.rb +7 -8
  87. data/lib/cantango/permit_engine/compatibility.rb +1 -1
  88. data/lib/cantango/permit_engine/executor.rb +1 -1
  89. data/lib/cantango/permit_engine/executor/abstract.rb +1 -1
  90. data/lib/cantango/permit_engine/executor/base.rb +1 -1
  91. data/lib/cantango/permit_engine/executor/system.rb +1 -1
  92. data/lib/cantango/permit_engine/factory.rb +2 -7
  93. data/lib/cantango/permit_engine/finder.rb +43 -9
  94. data/lib/cantango/permit_engine/role_matcher.rb +1 -1
  95. data/lib/cantango/permit_engine/util.rb +2 -1
  96. data/lib/cantango/permits.rb +9 -0
  97. data/lib/cantango/{permit_engine → permits}/account_permit.rb +15 -4
  98. data/lib/cantango/{permit_engine → permits}/account_permit/builder.rb +2 -6
  99. data/lib/cantango/{permit_engine → permits}/account_permit/finder.rb +2 -2
  100. data/lib/cantango/{permit_engine → permits}/license.rb +1 -1
  101. data/lib/cantango/{permit_engine → permits}/license/loader.rb +1 -1
  102. data/lib/cantango/{permit_engine → permits}/license/rules.rb +1 -1
  103. data/lib/cantango/permits/macros.rb +19 -0
  104. data/lib/cantango/{permit_engine → permits}/permit.rb +13 -1
  105. data/lib/cantango/{permit_engine → permits}/role_group_permit.rb +15 -3
  106. data/lib/cantango/{permit_engine → permits}/role_group_permit/builder.rb +10 -22
  107. data/lib/cantango/{permit_engine → permits}/role_group_permit/finder.rb +2 -2
  108. data/lib/cantango/{permit_engine → permits}/role_permit.rb +15 -3
  109. data/lib/cantango/permits/role_permit/builder.rb +27 -0
  110. data/lib/cantango/{permit_engine → permits}/role_permit/finder.rb +2 -2
  111. data/lib/cantango/{permit_engine → permits}/user_permit.rb +15 -3
  112. data/lib/cantango/{permit_engine → permits}/user_permit/builder.rb +2 -6
  113. data/lib/cantango/{permit_engine → permits}/user_permit/finder.rb +2 -2
  114. data/lib/cantango/rails.rb +3 -1
  115. data/lib/cantango/rails/engine.rb +11 -6
  116. data/lib/cantango/rails/helpers/base_helper.rb +28 -0
  117. data/lib/cantango/rails/helpers/controller_helper.rb +17 -0
  118. data/lib/cantango/rails/helpers/rest_helper.rb +44 -0
  119. data/lib/cantango/rails/helpers/view_helper.rb +17 -0
  120. data/lib/cantango/rails/railtie.rb +1 -1
  121. data/lib/cantango/rspec/config.rb +1 -1
  122. data/lib/cantango/rspec/matchers/be_allowed_to.rb +5 -3
  123. data/lib/cantango/rules/user_relation.rb +1 -1
  124. data/lib/cantango/users/macros.rb +8 -2
  125. data/lib/cantango/users/user.rb +1 -1
  126. data/lib/generators/cantango/account_permit/account_permit_generator.rb +37 -0
  127. data/lib/generators/cantango/account_permit/templates/account_permit.erb +13 -0
  128. data/lib/generators/cantango/base.rb +15 -18
  129. data/lib/generators/cantango/basic.rb +41 -0
  130. data/lib/generators/cantango/install/install_generator.rb +37 -0
  131. data/lib/generators/cantango/install/templates/cantango.rb +4 -0
  132. data/{spec/active_record/scenarios/user_accounts/config/account_permits.yml → lib/generators/cantango/install/templates/categories.yml} +0 -0
  133. data/lib/generators/cantango/install/templates/permissions.yml +4 -0
  134. data/lib/generators/cantango/license/license_generator.rb +6 -11
  135. data/lib/generators/cantango/license/templates/license.erb +1 -1
  136. data/lib/generators/cantango/license_base.rb +2 -2
  137. data/lib/generators/cantango/licenses/licenses_generator.rb +2 -7
  138. data/lib/generators/cantango/permit_generator.rb +31 -10
  139. data/lib/generators/cantango/role_permit/role_permit_generator.rb +11 -14
  140. data/lib/generators/cantango/role_permit/templates/account_permit.erb +2 -2
  141. data/lib/generators/cantango/role_permit/templates/role_group_permit.erb +2 -2
  142. data/lib/generators/cantango/role_permit/templates/role_permit.erb +2 -2
  143. data/lib/generators/cantango/role_permits/role_permits_generator.rb +16 -98
  144. data/lib/generators/cantango/user_permit/templates/account_permit.erb +5 -0
  145. data/lib/generators/cantango/user_permit/templates/user_permit.erb +13 -0
  146. data/lib/generators/cantango/user_permit/user_permit_generator.rb +36 -0
  147. data/spec/TODO +1 -6
  148. data/spec/active_record/helper/permits_config.rb +1 -1
  149. data/spec/active_record/scenarios/engines/permission_engine/{cantango_permissions.yml → permissions.yml} +2 -1
  150. data/spec/active_record/scenarios/engines/permission_engine/tango_permission_yml_spec.rb +8 -9
  151. data/spec/active_record/scenarios/engines/permit_engine/licenses_spec.rb +2 -2
  152. data/spec/active_record/scenarios/engines/permit_engine/role_groups_permits_spec.rb +2 -2
  153. data/spec/active_record/scenarios/shared/{can_tango.rb → cantango.rb} +1 -1
  154. data/spec/active_record/scenarios/shared/models/items.rb +0 -1
  155. data/spec/active_record/scenarios/shared/models/users.rb +6 -1
  156. data/spec/active_record/spec_helper.rb +6 -4
  157. data/spec/cantango/ability/cache/key_spec.rb +64 -0
  158. data/spec/cantango/ability/cache/{compiler_spec.rb → kompiler_spec.rb} +9 -21
  159. data/spec/cantango/ability/cache/reader_compile_spec.rb +42 -0
  160. data/spec/cantango/ability/cache/reader_spec.rb +33 -0
  161. data/spec/cantango/ability/cache/rules_cache_spec.rb +15 -0
  162. data/spec/cantango/ability/cache/session_cache_spec.rb +1 -1
  163. data/spec/cantango/ability/cache/writer_spec.rb +21 -0
  164. data/spec/cantango/ability/cache_spec.rb +6 -2
  165. data/spec/cantango/ability_filters_spec.rb +5 -10
  166. data/spec/cantango/ability_spec.rb +2 -3
  167. data/spec/cantango/api/attributes_spec.rb +27 -0
  168. data/spec/cantango/api/user/can_api_spec.rb +2 -2
  169. data/spec/cantango/api/user_account/can_api_spec.rb +2 -2
  170. data/spec/cantango/configuration/adapter_spec.rb +28 -0
  171. data/spec/cantango/configuration/engines/cache_spec.rb +2 -2
  172. data/spec/cantango/configuration/engines/permission_spec.rb +3 -3
  173. data/spec/cantango/configuration/engines/permit_spec.rb +1 -1
  174. data/spec/cantango/configuration/engines/store_shared.rb +3 -1
  175. data/spec/cantango/configuration/engines_spec.rb +106 -3
  176. data/spec/cantango/configuration/hash_registry_spec.rb +1 -1
  177. data/spec/cantango/configuration/permit_registry_spec.rb +14 -0
  178. data/spec/cantango/configuration/permits_spec.rb +25 -0
  179. data/spec/cantango/configuration/registry_spec.rb +1 -1
  180. data/spec/cantango/configuration/shared/registry_ex.rb +2 -1
  181. data/spec/cantango/configuration_spec.rb +5 -5
  182. data/spec/cantango/permission_engine/compiler_spec.rb +8 -0
  183. data/spec/cantango/permission_engine/permission_spec.rb +1 -1
  184. data/spec/cantango/permission_engine/yaml_store_spec.rb +14 -4
  185. data/spec/cantango/permission_engine_spec.rb +0 -0
  186. data/spec/cantango/permit_engine/account_permit_spec.rb +2 -4
  187. data/spec/cantango/permit_engine/builder/role_group_permits_spec.rb +4 -7
  188. data/spec/cantango/permit_engine/builder/role_permits_spec.rb +5 -6
  189. data/spec/cantango/permit_engine/builder/special_permits_spec.rb +3 -4
  190. data/spec/cantango/permit_engine/executor/system_spec.rb +2 -2
  191. data/spec/cantango/permit_engine/factory_spec.rb +2 -3
  192. data/spec/cantango/permit_engine/finder_spec.rb +144 -23
  193. data/spec/cantango/permit_engine/permit/permit_static_and_dynamic_rules_spec.rb +4 -5
  194. data/spec/cantango/permit_engine/role_group_permit_spec.rb +1 -1
  195. data/spec/cantango/permit_engine/role_permit_spec.rb +6 -7
  196. data/spec/cantango/permit_engine/user_permit_spec.rb +2 -3
  197. data/spec/cantango/permit_engine_spec.rb +2 -0
  198. data/spec/cantango/permits/macros_spec.rb +41 -0
  199. data/spec/cantango/permits/permit_spec.rb +46 -0
  200. data/spec/cantango_spec.rb +13 -0
  201. data/spec/devise-dummy/app/helpers/application_helper.rb +7 -0
  202. data/spec/devise-dummy/app/views/articles/admin.html.haml +1 -1
  203. data/spec/devise-dummy/app/views/articles/admin_account.html.haml +1 -1
  204. data/spec/devise-dummy/app/views/articles/guest.html.haml +1 -1
  205. data/spec/devise-dummy/app/views/articles/index.html.haml +1 -1
  206. data/spec/devise-dummy/app/views/comments/guest.html.haml +1 -1
  207. data/spec/devise-dummy/app/views/comments/index.html.haml +1 -1
  208. data/spec/devise-dummy/app/views/concertos/admin.html.haml +1 -1
  209. data/spec/devise-dummy/app/views/concertos/admin_account.html.haml +1 -1
  210. data/spec/devise-dummy/app/views/concertos/guest.html.haml +1 -1
  211. data/spec/devise-dummy/app/views/concertos/index.html.haml +1 -1
  212. data/spec/devise-dummy/app/views/users/index.html.haml +1 -1
  213. data/spec/devise-dummy/config/initializers/cantango.rb +3 -3
  214. data/spec/devise-dummy/config/{cantango_permissions.yml → permissions.yml} +2 -1
  215. data/spec/devise-integration/concerto_spec.rb +1 -1
  216. data/spec/dummy/app/models/user.rb +1 -0
  217. data/spec/dummy/app/views/articles/admin.html.haml +1 -1
  218. data/spec/dummy/app/views/articles/admin_account.html.haml +1 -1
  219. data/spec/dummy/app/views/articles/guest.html.haml +1 -1
  220. data/spec/dummy/app/views/articles/index.html.haml +1 -1
  221. data/spec/dummy/app/views/comments/guest.html.haml +1 -1
  222. data/spec/dummy/app/views/comments/index.html.haml +1 -1
  223. data/spec/dummy/app/views/concertos/admin.html.haml +1 -1
  224. data/spec/dummy/app/views/concertos/admin_account.html.haml +1 -1
  225. data/spec/dummy/app/views/concertos/guest.html.haml +1 -1
  226. data/spec/dummy/app/views/concertos/index.html.haml +1 -1
  227. data/spec/dummy/app/views/posts/admin.html.haml +1 -1
  228. data/spec/dummy/app/views/posts/admin_account.html.haml +1 -1
  229. data/spec/dummy/app/views/posts/guest.html.haml +1 -1
  230. data/spec/dummy/app/views/posts/index.html.haml +1 -1
  231. data/spec/dummy/app/views/users/admin.html.haml +1 -1
  232. data/spec/dummy/app/views/users/admin_account.html.haml +1 -1
  233. data/spec/dummy/app/views/users/guest.html.haml +1 -1
  234. data/spec/dummy/app/views/users/index.html.haml +1 -1
  235. data/spec/dummy/config/application.rb +1 -0
  236. data/spec/dummy/config/initializers/cantango.rb +1 -3
  237. data/spec/dummy/config/{cantango_permissions.yml → permissions.yml} +2 -2
  238. data/spec/dummy_spec_helper.rb +2 -0
  239. data/spec/entire_suite_spec.rb +2 -0
  240. data/spec/factories/user.rb +8 -0
  241. data/spec/factories/user_account.rb +6 -0
  242. data/spec/fixtures/config/permissions.yml +60 -19
  243. data/spec/fixtures/models/admin.rb +2 -0
  244. data/spec/fixtures/models/admin_account.rb +22 -0
  245. data/spec/fixtures/models/simple_roles.rb +5 -0
  246. data/spec/fixtures/models/user.rb +4 -0
  247. data/spec/helpers/dummy_app_ability.rb +2 -5
  248. data/spec/integration/cache_using_moneta_spec.rb +3 -1
  249. data/spec/integration/cache_using_session_spec.rb +2 -2
  250. data/spec/integration/user/articles_spec.rb +1 -1
  251. data/spec/integration/user/concerto_spec.rb +1 -1
  252. data/spec/spec_helper.rb +5 -5
  253. metadata +120 -95
  254. data/lib/cantango/ability/class_methods.rb +0 -27
  255. data/lib/cantango/api/aliases/account_permit.rb +0 -8
  256. data/lib/cantango/api/aliases/license.rb +0 -7
  257. data/lib/cantango/api/aliases/permit.rb +0 -9
  258. data/lib/cantango/api/aliases/role_group_permit.rb +0 -7
  259. data/lib/cantango/api/aliases/role_permit.rb +0 -7
  260. data/lib/cantango/api/aliases/user_permit.rb +0 -8
  261. data/lib/cantango/permission_engine/builder.rb +0 -6
  262. data/lib/cantango/permit_engine/role_permit/builder.rb +0 -46
  263. data/lib/cantango/rails/base_helpers.rb +0 -26
  264. data/lib/cantango/rails/controller_helpers.rb +0 -15
  265. data/lib/cantango/rails/view_helpers.rb +0 -15
  266. data/spec/active_record/scenarios/shared/permits/PERMITS README.textile +0 -3
  267. data/spec/active_record/scenarios/user_accounts/docs/USER_ACCOUNTS_SCENARIO.textile +0 -20
  268. data/spec/active_record/scenarios/user_accounts/docs/basic_rules_spec_possible_samples.txt +0 -84
  269. data/spec/factories.rb +0 -8
  270. data/spec/fixtures/config/cantango_permissions.yml +0 -48
@@ -0,0 +1,13 @@
1
+ class <%= account.to_s.camelize %>AccountPermit < CanTango::AccountPermit
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
+ end
@@ -1,23 +1,14 @@
1
- require 'rails/generators/base'
2
- require 'sugar-high/array'
3
- require 'active_support/inflector'
4
- require 'rails_artifactor'
1
+ require 'generators/cantango/basic'
5
2
 
6
- module CanTango
3
+ module Cantango
7
4
  module Generators
8
5
  class Base < ::Rails::Generators::Base
9
- def self.inherited(subclass)
10
- subclass.extend ClassMethods
11
- end
12
6
 
13
- module ClassMethods
14
- def can_actions
15
- [:create, :update, :manage, :read, :access]
16
- end
17
- end
18
- extend ClassMethods
7
+ include Cantango::Generators::Basic
8
+
9
+ CAN_ACTIONS = [:create, :update, :manage, :read, :access]
19
10
 
20
- can_actions.each do |action|
11
+ CAN_ACTIONS.each do |action|
21
12
  class_eval %{
22
13
  class_option :#{action}, :type => :array, :default => [], :desc => "Models allowed to #{action}"
23
14
  }
@@ -25,7 +16,13 @@ module CanTango
25
16
 
26
17
  protected
27
18
 
28
- can_actions.each do |action|
19
+ [:user, :account].each do |name|
20
+ define_method :"#{name}?" do
21
+ false
22
+ end
23
+ end
24
+
25
+ CAN_ACTIONS.each do |action|
29
26
  class_eval %{
30
27
  def #{action}
31
28
  options[:#{action}]
@@ -34,11 +31,11 @@ module CanTango
34
31
  end
35
32
 
36
33
  def rules_logic
37
- self.class.can_actions.map do |action|
34
+ CAN_ACTIONS.map do |action|
38
35
  send(action).map do |c|
39
36
  "can(:#{action}, #{act_model(c)})"
40
37
  end.join("\n ")
41
- end.join("\n ")
38
+ end.join("\n")
42
39
  end
43
40
 
44
41
  def act_model name
@@ -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,37 @@
1
+ module Cantango
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ desc "Add role strategy to a User model"
5
+
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ class_option :categories, :type => :boolean, :default => true, :desc => "Create categories"
9
+ class_option :permissions, :type => :boolean, :default => true, :desc => "Create yaml permissions store"
10
+
11
+ def copy_initializer
12
+ template "cantango.rb", "config/initializers/cantango.rb"
13
+ end
14
+
15
+ def copy_categories
16
+ return unless categories?
17
+ template "categories.yml", "config/categories.yml"
18
+ end
19
+
20
+ def copy_permissions
21
+ return unless permissions?
22
+ template "permissions.yml", "config/permissions.yml"
23
+ end
24
+
25
+ protected
26
+
27
+ def permissions?
28
+ options[:permissions]
29
+ end
30
+
31
+ def categories?
32
+ options[:categories]
33
+ end
34
+ end
35
+ end
36
+ end
37
+
@@ -0,0 +1,4 @@
1
+ CanTango.config do |config|
2
+ config.engines.all :on
3
+ # more configuration here...
4
+ end
@@ -0,0 +1,4 @@
1
+ roles:
2
+ role_groups:
3
+ licenses:
4
+ users:
@@ -1,17 +1,12 @@
1
- require 'rails/generators/base'
2
- require 'sugar-high/array'
3
- require 'active_support/inflector'
4
- require 'rails_artifactor'
5
-
6
1
  require 'generators/cantango/base'
7
2
  require 'generators/cantango/license_base'
8
3
 
9
- module CanTango
4
+ module Cantango
10
5
  module Generators
11
- class LicenseGenerator < CanTango::Generators::Base
6
+ class LicenseGenerator < Cantango::Generators::Base
12
7
  desc "Creates a License for a Permit in 'app/licenses' with reusable permissions"
13
8
 
14
- argument :name, :type => :string, :default => '', :desc => "Name of license"
9
+ argument :name, :type => :string, :desc => "Name of license"
15
10
 
16
11
  class_option :licenses, :type => :array, :default => [], :desc => "Sub licenses"
17
12
 
@@ -25,10 +20,10 @@ module CanTango
25
20
  protected
26
21
 
27
22
  def create_license
28
- template "license.erb", "app/licenses/#{name}_license.rb"
23
+ template "license.erb", "app/permits/licenses/#{name}_license.rb"
29
24
  end
30
25
 
31
- include CanTango::Generators::LicenseBase
32
- end
26
+ include Cantango::Generators::LicenseBase
27
+ end
33
28
  end
34
29
  end
@@ -1,4 +1,4 @@
1
- class <%= name.to_s.camelize %>License < CanTango::PermitEngine::License
1
+ class <%= name.to_s.camelize %>License < CanTango::License
2
2
  def initialize name
3
3
  super
4
4
  end
@@ -1,4 +1,4 @@
1
- module CanTango
1
+ module Cantango
2
2
  module Generators
3
3
  module LicenseBase
4
4
  def licenses
@@ -6,7 +6,7 @@ module CanTango
6
6
  end
7
7
 
8
8
  def license_logic
9
- return '' if licenses.empty?
9
+ return ' # use any licenses here' if licenses.empty?
10
10
  ls = licenses.map{|c| ":#{c}"}.join(", ")
11
11
  "licenses #{ls}"
12
12
  end
@@ -1,14 +1,9 @@
1
- require 'rails/generators/base'
2
- require 'sugar-high/array'
3
- require 'active_support/inflector'
4
- require 'rails_artifactor'
5
-
6
- module CanTango
1
+ module Cantango
7
2
  module Generators
8
3
  class LicensesGenerator < Rails::Generators::Base
9
4
  desc "Creates Licenses for use with CanCan Permits"
10
5
 
11
- argument :licenses, :type => :array, :default => [], :desc => "Licenses"
6
+ argument :licenses, :type => :array, :desc => "Licenses"
12
7
 
13
8
  source_root File.dirname(__FILE__) + '/../license/templates'
14
9
 
@@ -1,18 +1,28 @@
1
- module CanTango
1
+ require 'generators/cantango/basic'
2
+
3
+ module Cantango
2
4
  module Generators
3
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
4
15
 
5
- def template_permit role, account = nil
6
- template_account_permit role, account if account
7
- template permit_source, "app/permits/#{permit_target(role)}" unless account
16
+ def template_simple_permit name
17
+ template permit_source, "app/permits/#{permit_target(name)}"
8
18
  end
9
19
 
10
- def template_account_permit role, account
11
- template "account_permit.erb" , "app/permits/#{account}_permits/#{permit_target(role)}"
20
+ def template_account_permit name, account
21
+ template "account_permit.erb" , "app/permits/#{account}/#{permit_target(name)}"
12
22
  end
13
23
 
14
24
  def load_permit_template name
15
- template = ERB.new File.open(template_filepath).read
25
+ template = ERB.new File.open(template_filepath).read.gsub(/\n/, "\n\s\s")
16
26
  template.result(binding)
17
27
  end
18
28
 
@@ -25,11 +35,22 @@ module CanTango
25
35
  end
26
36
 
27
37
  def permit_source
28
- group? ? "role_group_permit.erb" : "role_permit.erb"
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
+ return "#{name}_permit.rb" if is_user?
46
+ return "#{name}_account_permit.rb" if is_account?
47
+
48
+ is_group? ? "#{name}_role_group_permit.rb" : "#{name}_role_permit.rb"
29
49
  end
30
50
 
31
- def permit_target role
32
- group? ? "#{role}_group_permit.rb" : "#{role}_permit.rb"
51
+ def set_logic name
52
+ meth = "#{name}_logic"
53
+ @permit_logic = respond_to?(meth) ? send(meth) : base_logic
33
54
  end
34
55
  end
35
56
  end
@@ -1,21 +1,17 @@
1
- require 'rails/generators/base'
2
- require 'sugar-high/array'
3
- require 'active_support/inflector'
4
- require 'rails_artifactor'
5
- # require 'logging_assist'
6
- #
7
1
  require 'generators/cantango/base'
8
2
  require 'generators/cantango/license_base'
9
3
  require 'generators/cantango/permit_generator'
10
4
 
11
- module CanTango
5
+ module Cantango
12
6
  module Generators
13
- class RolePermitGenerator < CanTango::Generators::Base
7
+ class RolePermitGenerator < Cantango::Generators::Base
14
8
  desc "Creates a Permit for a role in 'app/permits' with specific permissions and/or licenses"
15
9
 
16
- argument :role, :type => :string, :default => '', :desc => "Role to create permit for"
10
+ argument :role, :type => :string,
11
+ :desc => "Role to create permit for"
17
12
 
18
- class_option :licenses, :type => :array, :default => [], :desc => "Licenses to use in Permit"
13
+ class_option :licenses, :type => :array, :default => [],
14
+ :desc => "Licenses to use in Permit"
19
15
 
20
16
  class_option :account, :type => :string,
21
17
  :desc => "Generate permits for a specific user account"
@@ -25,16 +21,17 @@ module CanTango
25
21
  source_root File.dirname(__FILE__) + '/templates'
26
22
 
27
23
  def main_flow
28
- return if role.empty?
29
24
  template_permit role
30
25
  end
31
26
 
32
27
  protected
33
28
 
34
- include CanTango::Generators::Base
35
- include CanTango::Generators::LicenceBase
29
+ include Cantango::Generators::LicenseBase
30
+ include Cantango::Generators::PermitGenerator
36
31
 
37
- def group?
32
+ alias_method :role_group, :role
33
+
34
+ def is_group?
38
35
  options[:group]
39
36
  end
40
37
  end
@@ -1,4 +1,4 @@
1
- module <%= account%>Permits
2
- <%= load_permit_template :role_permit %>
1
+ module <%= account.to_s.camelize%>AccountPermits
2
+ <%= load_permit_template :role_permit %>
3
3
  end
4
4
 
@@ -1,4 +1,4 @@
1
- class <%= role_group.to_s.camelize %>RoleGroupPermit < CanTango::PermitEngine::RoleGroupPermit
1
+ class <%= permit_name.to_s.camelize %>RoleGroupPermit < CanTango::RoleGroupPermit
2
2
  def initialize ability
3
3
  super
4
4
  end
@@ -7,7 +7,7 @@ class <%= role_group.to_s.camelize %>RoleGroupPermit < CanTango::PermitEngine::R
7
7
 
8
8
  def permit_rules
9
9
  # insert your can, cannot and any other rule statements here
10
- <%= permit_logic.strip %>
10
+ <%= rules_logic.strip %>
11
11
  <%= license_logic %>
12
12
  end
13
13
  end
@@ -1,4 +1,4 @@
1
- class <%= role.to_s.camelize %>RolePermit < CanTango::PermitEngine::RolePermit
1
+ class <%= permit_name.to_s.camelize %>RolePermit < CanTango::RolePermit
2
2
  def initialize ability
3
3
  super
4
4
  end
@@ -7,7 +7,7 @@ class <%= role.to_s.camelize %>RolePermit < CanTango::PermitEngine::RolePermit
7
7
 
8
8
  def permit_rules
9
9
  # insert your can, cannot and any other rule statements here
10
- <%= permit_logic.strip %>
10
+ <%= rules_logic.strip %>
11
11
  <%= license_logic %>
12
12
  end
13
13
  end
@@ -1,26 +1,15 @@
1
- require 'rails/generators/base'
2
- require 'sugar-high/array'
3
- require 'active_support/inflector'
4
- require 'rails_artifactor'
5
- # require 'logging_assist'
1
+ require 'generators/cantango/permit_generator'
6
2
 
7
- module CanTango
3
+ module Cantango
8
4
  module Generators
9
- class PermitsGenerator < Rails::Generators::Base
5
+ class RolePermitsGenerator < Rails::Generators::Base
10
6
  desc "Creates a Permit for each role in 'app/permits' and ensures that the permit folder is added to Rails load path."
11
7
 
12
- argument :roles, :type => :array, :default => [],
8
+ argument :roles, :type => :array,
13
9
  :desc => "Roles to create permits for"
14
10
 
15
- # ORM to use
16
- class_option :orm, :type => :string, :default => 'active_record',
17
- :desc => "ORM to use"
18
-
19
- class_option :initializer, :type => :boolean, :default => true,
20
- :desc => "Create Permits initializer"
21
-
22
- class_option :default_permits, :type => :boolean, :default => true,
23
- :desc => "Create default permits for guest and admin roles"
11
+ class_option :special_permits, :type => :boolean, :default => false,
12
+ :desc => "Create special permits Syatem and Any"
24
13
 
25
14
  class_option :account, :type => :string,
26
15
  :desc => "Generate permits for a specific user account"
@@ -31,96 +20,25 @@ module CanTango
31
20
  source_root File.dirname(__FILE__) + '/../role_permit/templates'
32
21
 
33
22
  def main_flow
34
- default_roles.each do |role|
35
- template_permit role
36
- end
37
-
38
- template_permit :any
39
- template_permit :system
40
-
41
- permit_logic = base_logic
42
- get_roles.each do |role|
43
- template_permit(role) if !skip_permit?(role)
44
- end
45
-
46
- permits_initializer if permits_initializer?
23
+ create_special_permits if special_permits?
24
+ create_permits
47
25
  end
48
26
 
49
27
  protected
50
28
 
51
- include PermitGenerator
52
-
53
- extend RailsAssist::UseMacro
54
-
55
- use_helpers :app, :file, :special
56
-
57
- attr_accessor :permit_name, :permit_logic
58
-
59
- def default_roles
60
- [:guest, :admin]
61
- end
62
-
63
- def permits_initializer?
64
- options[:initializer]
65
- end
66
-
67
- def skip_permit? permit
68
- default_permits? && default_roles.include?(permit.to_sym)
69
- end
70
-
71
-
72
- # TODO: merge with any registered roles in application
73
- def get_roles
74
- roles.uniq.to_symbols
75
- end
76
-
77
- def default_permits?
78
- options[:default_permits]
79
- end
80
-
81
- def orm
82
- options[:orm]
83
- end
84
-
85
- def permits_initializer
86
- create_initializer :permits do
87
- %Q{CanTango.configure do |config|
88
- config.orm = :#{orm}
89
- end
90
- }
91
- end
92
- end
93
-
94
- def template_permit role, template_name=nil
95
- if permit_roles.include?(role)
96
- meth = "#{role}_logic"
97
- self.permit_logic = respond_to?(meth) ? send(meth) : base_logic
98
- end
99
- self.permit_name = role
100
- template_permit role
101
- end
102
-
103
- private
29
+ include Cantango::Generators::PermitGenerator
104
30
 
105
- def permit_roles
106
- [:admin, :guest, :any, :system]
107
- end
108
-
109
- def base_logic
110
- %{
111
- }
31
+ def create_special_permits
32
+ template_permit :any
33
+ template_permit :system
112
34
  end
113
35
 
114
- def admin_logic
115
- %{
116
- can :manage, :all
117
- }
36
+ def create_permits
37
+ roles.each { |role| template_permit role }
118
38
  end
119
39
 
120
- def guest_logic
121
- %{
122
- can :read, :all
123
- }
40
+ def special_permits?
41
+ options[:special_permits]
124
42
  end
125
43
  end
126
44
  end