active_admin_role 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +16 -13
  4. data/.rubocop_todo.yml +23 -0
  5. data/.travis.yml +12 -3
  6. data/Appraisals +8 -9
  7. data/Gemfile +13 -10
  8. data/README.md +8 -4
  9. data/Rakefile +32 -3
  10. data/active_admin_role.gemspec +4 -3
  11. data/app/models/active_admin/manageable_resource.rb +51 -0
  12. data/app/models/active_admin/managed_resource.rb +5 -42
  13. data/app/models/active_admin/permission.rb +12 -17
  14. data/app/models/active_admin/permission_reloader.rb +47 -0
  15. data/app/models/active_admin_role/can_can/ability.rb +17 -0
  16. data/app/models/active_admin_role/dsl.rb +7 -0
  17. data/app/models/active_admin_role/role_based_authorizable.rb +43 -0
  18. data/gemfiles/{rails42.gemfile → 5.0.gemfile} +11 -11
  19. data/gemfiles/5.1.gemfile +26 -0
  20. data/gemfiles/5.2.gemfile +26 -0
  21. data/lib/active_admin_role.rb +3 -10
  22. data/lib/active_admin_role/active_admin/dsl.rb +1 -2
  23. data/lib/active_admin_role/active_admin/resource_controller.rb +11 -11
  24. data/lib/active_admin_role/config.rb +3 -2
  25. data/lib/active_admin_role/engine.rb +5 -2
  26. data/lib/active_admin_role/version.rb +1 -1
  27. data/lib/generators/active_admin_role/helper.rb +41 -41
  28. data/lib/generators/active_admin_role/install_generator.rb +16 -13
  29. data/lib/generators/active_admin_role/templates/admin/{permission.rb → permissions.tt} +1 -1
  30. data/lib/generators/active_admin_role/templates/{initializer.rb → initializer.tt} +0 -0
  31. data/lib/generators/active_admin_role/templates/migration/{add_role_to_admin_users.rb → add_role_to_admin_users.tt} +0 -0
  32. data/lib/generators/active_admin_role/templates/migration/{create_active_admin_managed_resources.rb → create_active_admin_managed_resources.tt} +0 -0
  33. data/lib/generators/active_admin_role/templates/migration/{create_active_admin_permissions.rb → create_active_admin_permissions.tt} +0 -0
  34. data/lib/generators/active_admin_role/templates/model/{ability.rb → ability.tt} +0 -0
  35. metadata +35 -21
  36. data/.ruby-style.yml +0 -242
  37. data/gemfiles/.bundle/config +0 -2
  38. data/gemfiles/rails50.gemfile +0 -27
  39. data/lib/active_admin_role/can_can/ability.rb +0 -15
  40. data/lib/active_admin_role/manageable_resource.rb +0 -45
  41. data/lib/active_admin_role/model.rb +0 -7
  42. data/lib/active_admin_role/role_based_authorizable.rb +0 -45
  43. data/tasks/test.rake +0 -10
@@ -0,0 +1,17 @@
1
+ module ActiveAdminRole
2
+ module CanCan
3
+ module Ability
4
+ extend ActiveSupport::Concern
5
+
6
+ private
7
+
8
+ def register_role_based_abilities(user)
9
+ return if user.guest_user?
10
+
11
+ (::ActiveAdmin::Permission.indexed_cache[user.role] || []).select(&:active?).each do |permission|
12
+ send(*permission.to_condition)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ module ActiveAdminRole
2
+ module Dsl
3
+ def role_based_authorizable
4
+ include ::ActiveAdminRole::RoleBasedAuthorizable
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,43 @@
1
+ module ActiveAdminRole
2
+ module RoleBasedAuthorizable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ enum role: config.roles
7
+ delegate :super_user_roles, :guest_user_roles, to: :class
8
+ validates :role, presence: true
9
+ end
10
+
11
+ def super_user?
12
+ role.in?(super_user_roles)
13
+ end
14
+
15
+ def guest_user?
16
+ role.in?(guest_user_roles)
17
+ end
18
+
19
+ class_methods do
20
+ def manageable_roles
21
+ @manageable_roles ||= roles.except(*manageless_roles)
22
+ end
23
+
24
+ def super_user_roles
25
+ @super_user_roles ||= config.super_user_roles.try(:map, &:to_s) || []
26
+ end
27
+
28
+ def guest_user_roles
29
+ @guest_user_roles ||= config.guest_user_roles.try(:map, &:to_s) || []
30
+ end
31
+
32
+ private
33
+
34
+ def manageless_roles
35
+ (super_user_roles + guest_user_roles).flatten.compact
36
+ end
37
+
38
+ def config
39
+ ::ActiveAdminRole.config
40
+ end
41
+ end
42
+ end
43
+ end
@@ -2,25 +2,25 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "~> 4.2.0"
6
- gem "activeadmin", "1.0.0.pre4"
7
- gem "devise", "~> 4.2.0"
8
- gem "pry"
9
5
  gem "appraisal"
6
+ gem "devise"
7
+ gem "jquery-ui-rails", "~> 4.2.1"
8
+ gem "rails", "~> 5.0.0"
9
+
10
+ group :development, :test do
11
+ gem "sqlite3", platforms: :mri
12
+ end
10
13
 
11
14
  group :development do
12
- gem "bundler", "~> 1.13.0"
13
- gem "rake", "~> 10.0"
14
- gem "rubocop", "~> 0.40.0"
15
+ gem "onkcop", require: false
15
16
  end
16
17
 
17
18
  group :test do
18
19
  gem "capybara"
19
- gem "rspec-rails"
20
20
  gem "database_cleaner"
21
- gem "shoulda-matchers"
22
- gem "sqlite3", :platforms => :mri
23
21
  gem "poltergeist"
22
+ gem "rspec-rails"
23
+ gem "shoulda-matchers"
24
24
  end
25
25
 
26
- gemspec :path => "../"
26
+ gemspec path: "../"
@@ -0,0 +1,26 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "appraisal"
6
+ gem "devise"
7
+ gem "jquery-ui-rails", "~> 4.2.1"
8
+ gem "rails", "~> 5.1.0"
9
+
10
+ group :development, :test do
11
+ gem "sqlite3", platforms: :mri
12
+ end
13
+
14
+ group :development do
15
+ gem "onkcop", require: false
16
+ end
17
+
18
+ group :test do
19
+ gem "capybara"
20
+ gem "database_cleaner"
21
+ gem "poltergeist"
22
+ gem "rspec-rails"
23
+ gem "shoulda-matchers"
24
+ end
25
+
26
+ gemspec path: "../"
@@ -0,0 +1,26 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "appraisal"
6
+ gem "devise"
7
+ gem "jquery-ui-rails", "~> 4.2.1"
8
+ gem "rails", "~> 5.2.0.rc2"
9
+
10
+ group :development, :test do
11
+ gem "sqlite3", platforms: :mri
12
+ end
13
+
14
+ group :development do
15
+ gem "onkcop", require: false
16
+ end
17
+
18
+ group :test do
19
+ gem "capybara"
20
+ gem "database_cleaner"
21
+ gem "poltergeist"
22
+ gem "rspec-rails"
23
+ gem "shoulda-matchers"
24
+ end
25
+
26
+ gemspec path: "../"
@@ -1,12 +1,4 @@
1
1
  require "active_admin"
2
- require "active_admin_role/active_admin/dsl"
3
- require "active_admin_role/active_admin/resource_controller"
4
- require "active_admin_role/can_can/ability"
5
- require "active_admin_role/config"
6
- require "active_admin_role/engine"
7
- require "active_admin_role/manageable_resource"
8
- require "active_admin_role/model"
9
- require "active_admin_role/role_based_authorizable"
10
2
 
11
3
  module ActiveAdminRole
12
4
  def self.configure
@@ -14,8 +6,9 @@ module ActiveAdminRole
14
6
  end
15
7
 
16
8
  def self.config
17
- @_config ||= Config.new
9
+ @config ||= Config.new
18
10
  end
19
11
  end
20
12
 
21
- ::ActiveAdmin::DSL.send :include, ActiveAdminRole::ActiveAdmin::DSL
13
+ require "active_admin_role/config"
14
+ require "active_admin_role/engine" if defined?(Rails)
@@ -1,11 +1,10 @@
1
1
  module ActiveAdminRole
2
2
  module ActiveAdmin
3
- module DSL
3
+ module Dsl
4
4
  def role_changeable
5
5
  scope(:all, default: true)
6
6
 
7
7
  controller.resource_class.roles.each_key(&method(:scope))
8
-
9
8
  controller.resource_class.roles.each_key do |role|
10
9
  batch_action "assign as #{role}" do |ids|
11
10
  formatted_ids = ids - [active_admin_role_current_user.try!(:id).to_s]
@@ -4,26 +4,26 @@ module ActiveAdminRole
4
4
  def self.included(klass)
5
5
  klass.class_eval do
6
6
  if Rails::VERSION::MAJOR >= 4
7
- before_action :authorize_access_resource!, except: %i(index new create show edit update destroy)
7
+ before_action :authorize_access_resource!, except: %i[index new create show edit update destroy]
8
8
  else
9
- before_filter :authorize_access_resource!, except: %i(index new create show edit update destroy)
9
+ before_filter :authorize_access_resource!, except: %i[index new create show edit update destroy]
10
10
  end
11
11
  end
12
12
  end
13
13
 
14
14
  private
15
15
 
16
- def authorize_access_resource!
17
- authorize_resource!(active_admin_config.resource_class)
18
- end
16
+ def authorize_access_resource!
17
+ authorize_resource!(active_admin_config.resource_class)
18
+ end
19
19
 
20
- def active_admin_role_current_user
21
- send(active_admin_role_current_user_method_name)
22
- end
20
+ def active_admin_role_current_user
21
+ send(active_admin_role_current_user_method_name)
22
+ end
23
23
 
24
- def active_admin_role_current_user_method_name
25
- ActiveAdminRole.config.current_user_method_name
26
- end
24
+ def active_admin_role_current_user_method_name
25
+ ActiveAdminRole.config.current_user_method_name
26
+ end
27
27
  end
28
28
  end
29
29
  end
@@ -1,6 +1,7 @@
1
1
  module ActiveAdminRole
2
2
  class Config
3
- attr_accessor :roles, :super_user_roles, :guest_user_roles, :user_class_name, :default_state, :current_user_method_name
3
+ attr_accessor :roles, :super_user_roles, :guest_user_roles, :user_class_name, :current_user_method_name
4
+ attr_reader :default_state
4
5
 
5
6
  def initialize
6
7
  @roles = { guest: 0, support: 1, staff: 2, manager: 3, admin: 99 }
@@ -12,7 +13,7 @@ module ActiveAdminRole
12
13
  end
13
14
 
14
15
  def default_state=(value)
15
- @default_state = value.to_s == "can" ? :can : :cannot
16
+ @default_state = (value.to_s == "can") ? :can : :cannot
16
17
  end
17
18
  end
18
19
  end
@@ -4,11 +4,14 @@ module ActiveAdminRole
4
4
  class Engine < ::Rails::Engine
5
5
  initializer "active_admin_role" do
6
6
  ActiveSupport.on_load :active_record do
7
- ActiveRecord::Base.send :extend, ::ActiveAdminRole::Model
7
+ extend ActiveAdminRole::Dsl
8
8
  end
9
9
 
10
10
  ActiveSupport.on_load :after_initialize do
11
- ::ActiveAdmin::ResourceController.send :include, ::ActiveAdminRole::ActiveAdmin::ResourceController
11
+ require "active_admin_role/active_admin/dsl"
12
+ require "active_admin_role/active_admin/resource_controller"
13
+ ::ActiveAdmin::DSL.send :include, ActiveAdminRole::ActiveAdmin::Dsl
14
+ ::ActiveAdmin::ResourceController.send :include, ActiveAdminRole::ActiveAdmin::ResourceController
12
15
  end
13
16
  end
14
17
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveAdminRole
2
- VERSION = "0.1.1".freeze
2
+ VERSION = "0.2.0".freeze
3
3
  end
@@ -7,58 +7,58 @@ module ActiveAdminRole
7
7
 
8
8
  private
9
9
 
10
- def model_class_name
11
- options[:model] ? options[:model].classify : "AdminUser"
12
- end
13
-
14
- def model_file_path
15
- model_name.underscore
16
- end
10
+ def model_class_name
11
+ options[:model] ? options[:model].classify : "AdminUser"
12
+ end
17
13
 
18
- def model_path
19
- @model_path ||= File.join("app", "models", "#{model_file_path}.rb")
20
- end
14
+ def model_file_path
15
+ model_name.underscore
16
+ end
21
17
 
22
- def namespace
23
- Rails::Generators.namespace if Rails::Generators.respond_to?(:namespace)
24
- end
18
+ def model_path
19
+ @model_path ||= File.join("app", "models", "#{model_file_path}.rb")
20
+ end
25
21
 
26
- def namespaced?
27
- !!namespace
28
- end
22
+ def namespace
23
+ Rails::Generators.namespace if Rails::Generators.respond_to?(:namespace)
24
+ end
29
25
 
30
- def model_name
31
- if namespaced?
32
- [namespace.to_s] + [model_class_name]
33
- else
34
- [model_class_name]
35
- end.join("::")
36
- end
26
+ def namespaced?
27
+ !!namespace
28
+ end
37
29
 
38
- def inject_into_model
39
- indents = " " * (namespaced? ? 2 : 1)
40
- inject_into_class model_path, model_class_name, "#{indents}role_based_authorizable\n"
41
- end
30
+ def model_name
31
+ if namespaced?
32
+ [namespace.to_s] + [model_class_name]
33
+ else
34
+ [model_class_name]
35
+ end.join("::")
36
+ end
42
37
 
43
- def migration_class_name
44
- if Rails::VERSION::MAJOR >= 5
45
- "ActiveRecord::Migration[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
46
- else
47
- "ActiveRecord::Migration"
38
+ def inject_into_model
39
+ indents = " " * (namespaced? ? 2 : 1)
40
+ inject_into_class model_path, model_class_name, "#{indents}role_based_authorizable\n"
48
41
  end
49
- end
50
42
 
51
- module ClassMethods
52
- # Define the next_migration_number method (necessary for the migration_template method to work)
53
- def next_migration_number(dirname)
54
- if ActiveRecord::Base.timestamped_migrations
55
- sleep 1 # make sure each time we get a different timestamp
56
- Time.new.utc.strftime("%Y%m%d%H%M%S")
43
+ def migration_class_name
44
+ if Rails::VERSION::MAJOR >= 5
45
+ "ActiveRecord::Migration[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
57
46
  else
58
- format("%.3d", (current_migration_number(dirname) + 1))
47
+ "ActiveRecord::Migration"
48
+ end
49
+ end
50
+
51
+ module ClassMethods
52
+ # Define the next_migration_number method (necessary for the migration_template method to work)
53
+ def next_migration_number(dirname)
54
+ if ActiveRecord::Base.timestamped_migrations
55
+ sleep 1 # make sure each time we get a different timestamp
56
+ Time.new.utc.strftime("%Y%m%d%H%M%S")
57
+ else
58
+ "%.3d" % (current_migration_number(dirname) + 1)
59
+ end
59
60
  end
60
61
  end
61
- end
62
62
  end
63
63
  end
64
64
  end
@@ -6,9 +6,7 @@ module ActiveAdminRole
6
6
  class InstallGenerator < ::Rails::Generators::Base
7
7
  include Rails::Generators::Migration
8
8
  include ActiveAdminRole::Generators::Helper
9
-
10
- source_root File.expand_path("../templates", __FILE__)
11
-
9
+ source_root File.expand_path("./templates", __dir__)
12
10
  class_option :model, optional: true,
13
11
  type: :string,
14
12
  banner: "model",
@@ -16,22 +14,27 @@ module ActiveAdminRole
16
14
  default: "AdminUser"
17
15
 
18
16
  def copy_initializer_file
19
- template "initializer.rb", "config/initializers/active_admin_role.rb"
17
+ template "initializer.tt", "config/initializers/active_admin_role.rb"
20
18
  end
21
19
 
22
20
  def configure_model
23
- generate :"active_admin:install #{model_class_name}" unless model_class_name.safe_constantize
24
21
  inject_into_model
25
22
  end
26
23
 
27
24
  def copy_migration_files
28
- migration_template "migration/add_role_to_admin_users.rb", "db/migrate/add_role_to_#{model_class_name.tableize}.rb", migration_class_name: migration_class_name
29
- migration_template "migration/create_active_admin_managed_resources.rb", "db/migrate/create_active_admin_managed_resources.rb", migration_class_name: migration_class_name
30
- migration_template "migration/create_active_admin_permissions.rb", "db/migrate/create_active_admin_permissions.rb", migration_class_name: migration_class_name
25
+ migration_template "migration/add_role_to_admin_users.tt",
26
+ "db/migrate/add_role_to_#{model_class_name.tableize}.rb",
27
+ migration_class_name: migration_class_name
28
+ migration_template "migration/create_active_admin_managed_resources.tt",
29
+ "db/migrate/create_active_admin_managed_resources.rb",
30
+ migration_class_name: migration_class_name
31
+ migration_template "migration/create_active_admin_permissions.tt",
32
+ "db/migrate/create_active_admin_permissions.rb",
33
+ migration_class_name: migration_class_name
31
34
  end
32
35
 
33
36
  def copy_model_file
34
- template "model/ability.rb", "app/models/ability.rb"
37
+ template "model/ability.tt", "app/models/ability.rb"
35
38
  end
36
39
 
37
40
  def configure_active_admin
@@ -40,12 +43,12 @@ module ActiveAdminRole
40
43
  "config.authorization_adapter = ActiveAdmin::CanCanAdapter"
41
44
  end
42
45
 
43
- def copy_admin_permission_file
44
- template "admin/permission.rb", "app/admin/permission.rb"
46
+ def copy_admin_permissions_file
47
+ template "admin/permissions.tt", "app/admin/permissions.rb"
45
48
  end
46
49
 
47
- def configure_admin_user_file
48
- inject_into_file "app/admin/#{model_file_path}.rb",
50
+ def configure_admin_users_file
51
+ inject_into_file "app/admin/#{model_class_name.tableize}.rb",
49
52
  " role_changeable\n",
50
53
  after: "ActiveAdmin.register #{model_class_name} do\n"
51
54
  end
@@ -62,7 +62,7 @@ ActiveAdmin.register ::ActiveAdmin::Permission, as: "Permission" do
62
62
  selectable_column
63
63
  column :role
64
64
  column(:state) do |record|
65
- status_tag(record.state, record.can? ? :ok : nil)
65
+ status_tag(record.state, class: record.can? ? "completed ok" : "null", label: record.state)
66
66
  end
67
67
  column :action
68
68
  column :name