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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 50b0ce4d721281f6862803084c1bc877d0e16194
4
- data.tar.gz: 3a68d53325063176c30fe76ac76eec1e33dc81e5
2
+ SHA256:
3
+ metadata.gz: 3ea9f11c0722efc41a64baff3ca74086dd34d878a482cc00a95ebe3d40e3523a
4
+ data.tar.gz: dbb330580027c71ba91d1b0f6a50d2adf69f79280f9b2ee77a61f64b4426f0aa
5
5
  SHA512:
6
- metadata.gz: b95f322b9997282163ab7ea8e5ae97ceec3337317c6b862624c9477e563c8c346e3c135a7cba49d88edc4f5a2426a0e25a19169a64c86b0cd92604f650c5c9db
7
- data.tar.gz: 16a35e6b5be3ee64c92bbc9ea8c95d0e6bb2c9ed1e6bbf3e24071b639b99cef6e52856703d176bfaba853f8b3197a4ace434d307541265656f28f7dbe069bb9b
6
+ metadata.gz: 12f29a42a12e324e635e99c804cdc51f3f877e36592a34e64d82251ba2a69c82250805a4ae2194910d87fcd725e9a2d07093651adfec3bfff0896262bec795c9
7
+ data.tar.gz: efa55e48d456fecd90b82139b1d13ef7de91413f7087c543a3f40a42a4139d8e2c1829a31382e9a7b590b7b1f2752cec783156a34eadc3d0946335df2a6eb83e
data/.gitignore CHANGED
@@ -9,4 +9,5 @@
9
9
  /spec/reports/
10
10
  /tmp/
11
11
  /gemfiles/*.gemfile.lock
12
+ /gemfiles/.bundle/*
12
13
  /gemfiles/vendor/
@@ -1,17 +1,20 @@
1
- inherit_from:
2
- - .ruby-style.yml
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ inherit_gem:
4
+ onkcop:
5
+ - "config/rubocop.yml"
6
+ # uncomment if use rails cops
7
+ # - "config/rails.yml"
8
+ # uncomment if use rspec cops
9
+ # - "config/rspec.yml"
3
10
 
4
11
  AllCops:
12
+ TargetRubyVersion: 2.2
13
+ # uncomment if use rails cops
14
+ # TargetRailsVersion: 5.1
5
15
  Exclude:
6
- - "bin/*"
7
- - "vendor/**/*"
8
- - "gemfiles/**/*"
9
16
  - "spec/rails/**/*"
10
- - "lib/generators/active_admin_role/templates/**/*"
11
- - Gemfile
12
- - Rakefile
13
- DisplayCopNames: true
14
- TargetRubyVersion: 2.1
15
-
16
- Metrics/LineLength:
17
- Enabled: false
17
+ - "vendor/bundle/**/*"
18
+ - "gemfiles/vendor/**/*"
19
+ - "gemfiles/.bundle/**/*"
20
+ - "tmp/**/*"
@@ -0,0 +1,23 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2018-04-08 11:32:33 +0900 using RuboCop version 0.53.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 2
10
+ # Configuration parameters: CheckForMethodsWithNoSideEffects.
11
+ Lint/Void:
12
+ Exclude:
13
+ - 'spec/features/integration_spec.rb'
14
+
15
+ # Offense count: 1
16
+ Metrics/AbcSize:
17
+ Max: 28
18
+
19
+ # Offense count: 2
20
+ Naming/MemoizedInstanceVariableName:
21
+ Exclude:
22
+ - 'app/models/active_admin/manageable_resource.rb'
23
+ - 'app/models/concerns/active_admin_role/role_based_authorizable.rb'
@@ -1,5 +1,14 @@
1
- sudo: false
2
1
  language: ruby
2
+ before_install:
3
+ - gem update --system
4
+ - gem install bundler
5
+ gemfiles:
6
+ - gemfiles/5.0.gemfile
7
+ - gemfiles/5.1.gemfile
8
+ - gemfiles/5.2.gemfile
3
9
  rvm:
4
- - 2.0.0
5
- before_install: gem install bundler -v 1.12.1
10
+ - 2.3.7
11
+ - 2.4.4
12
+ - 2.5.1
13
+ script:
14
+ - bundle exec rspec
data/Appraisals CHANGED
@@ -1,12 +1,11 @@
1
- appraise 'rails42' do
2
- gem 'rails', '~> 4.2.0'
3
- gem 'devise', '~> 4.2.0'
4
- gem 'activeadmin', '1.0.0.pre4'
1
+ appraise "5.0" do
2
+ gem "rails", "~> 5.0.0"
5
3
  end
6
4
 
7
- appraise 'rails50' do
8
- gem 'rails', '~> 5.0.0'
9
- gem 'devise', '~> 4.2.0'
10
- gem 'inherited_resources', github: 'activeadmin/inherited_resources'
11
- gem 'activeadmin', github: 'activeadmin/activeadmin'
5
+ appraise "5.1" do
6
+ gem "rails", "~> 5.1.0"
7
+ end
8
+
9
+ appraise "5.2" do
10
+ gem "rails", "~> 5.2.0.rc2"
12
11
  end
data/Gemfile CHANGED
@@ -1,23 +1,26 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
2
4
 
3
5
  gemspec
4
6
 
5
- gem "rails", "~> 4.2.0"
6
- gem "activeadmin", "1.0.0.pre4"
7
- gem "devise", "~> 4.2.0"
8
- gem "pry"
9
7
  gem "appraisal"
8
+ gem "devise"
9
+ gem "jquery-ui-rails", "~> 4.2.1"
10
+ gem "rails", ">= 5.0.0"
11
+
12
+ group :development, :test do
13
+ gem "sqlite3", platforms: :mri
14
+ end
10
15
 
11
16
  group :development do
12
- gem "rake", "~> 10.0"
13
- gem "rubocop", "~> 0.40.0"
17
+ gem "onkcop", require: false
14
18
  end
15
19
 
16
20
  group :test do
17
21
  gem "capybara"
18
- gem "rspec-rails"
19
22
  gem "database_cleaner"
20
- gem "shoulda-matchers"
21
- gem "sqlite3", platforms: :mri
22
23
  gem "poltergeist"
24
+ gem "rspec-rails"
25
+ gem "shoulda-matchers"
23
26
  end
data/README.md CHANGED
@@ -14,10 +14,14 @@ And run `bundle`
14
14
 
15
15
  ## Dependencies
16
16
 
17
- - rails (>= 4.2)
18
- - activeadmin (>= 1.0.0.pre4)
17
+ - rails (>= 5.0.0)
18
+ - activeadmin (>= 1.2.0)
19
19
  - cancancan (>= 1.15.0)
20
20
 
21
+ ## Sample application
22
+
23
+ https://github.com/yhirano55-playground/active_admin_role_sample
24
+
21
25
  ## Usage
22
26
 
23
27
  1. Run this command after `rails generate active_admin:install`:
@@ -31,8 +35,8 @@ $ bin/rails generate active_admin_role:install
31
35
  create db/migrate/20161128090643_create_active_admin_permissions.rb
32
36
  create app/models/ability.rb
33
37
  gsub config/initializers/active_admin.rb
34
- create app/admin/permission.rb
35
- insert app/admin/admin_user.rb
38
+ create app/admin/permissions.rb
39
+ insert app/admin/admin_users.rb
36
40
 
37
41
  $ bin/rails db:migrate
38
42
  ```
data/Rakefile CHANGED
@@ -1,7 +1,36 @@
1
- require 'bundler'
2
- require 'rake'
1
+ require "bundler"
2
+ require "rake"
3
3
 
4
4
  Bundler.setup
5
5
  Bundler::GemHelper.install_tasks
6
6
 
7
- FileList['tasks/**/*.rake'].each { |task| import task }
7
+ require "rspec/core/rake_task"
8
+ RSpec::Core::RakeTask.new(:spec)
9
+ task default: :spec
10
+
11
+ desc "Creates a test rails app for the specs to run against"
12
+ task :setup do
13
+ require "rails/version"
14
+ system "bundle exec rails --version"
15
+ system <<-COMMAND
16
+ bundle exec rails new tmp/rails-#{Rails::VERSION::STRING} \
17
+ -m spec/support/rails_template.rb \
18
+ --skip-spring \
19
+ --skip-listen \
20
+ --skip-turbolinks \
21
+ --skip-bootsnap \
22
+ --skip-test \
23
+ --skip-git \
24
+ --skip-yarn \
25
+ --skip-puma \
26
+ --skip-action-mailer \
27
+ --skip-action-cable
28
+ COMMAND
29
+ end
30
+
31
+ namespace :tmp do
32
+ task :clear do
33
+ require "fileutils"
34
+ FileUtils.rm_r("tmp")
35
+ end
36
+ end
@@ -11,11 +11,12 @@ Gem::Specification.new do |gem|
11
11
  gem.homepage = "https://github.com/yhirano55/active_admin_role"
12
12
  gem.license = "MIT"
13
13
 
14
- gem.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
14
+ gem.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
15
15
  gem.require_paths = ["lib"]
16
16
 
17
- gem.required_ruby_version = ">= 2.1.0"
17
+ gem.required_ruby_version = ">= 2.2.2"
18
18
 
19
- gem.add_dependency "activeadmin", ">= 1.0.0.pre4"
19
+ gem.add_dependency "activeadmin", ">= 1.2.0"
20
20
  gem.add_dependency "cancancan", ">= 1.15.0"
21
+ gem.add_dependency "railties", ">= 5.0.0"
21
22
  end
@@ -0,0 +1,51 @@
1
+ require "set"
2
+
3
+ module ActiveAdmin
4
+ class ManageableResource
5
+ class << self
6
+ def call
7
+ new.call
8
+ end
9
+ end
10
+
11
+ def call
12
+ namespace = ::ActiveAdmin.application.default_namespace
13
+ ::ActiveAdmin.application.namespaces[namespace].resources.inject([]) do |result, resource|
14
+ class_name = resource.controller.resource_class.to_s
15
+ name = resource.resource_name.name
16
+ actions = collect_defined_actions(resource)
17
+
18
+ result += eval_actions(actions).map do |action|
19
+ { class_name: class_name, name: name, action: action }
20
+ end
21
+
22
+ result
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def collect_defined_actions(resource)
29
+ if resource.respond_to?(:defined_actions)
30
+ defined_actions = resource.defined_actions
31
+ member_actions = resource.member_actions.map(&:name)
32
+ collection_actions = resource.collection_actions.map(&:name)
33
+ batch_actions = resource.batch_actions_enabled? ? [:batch_action] : []
34
+
35
+ defined_actions | member_actions | member_actions | collection_actions | batch_actions
36
+ else
37
+ resource.page_actions.map(&:name) | [:index]
38
+ end
39
+ end
40
+
41
+ def eval_actions(actions)
42
+ actions.inject(Set.new) do |result, action|
43
+ result << (actions_dictionary[action] || action).to_s
44
+ end
45
+ end
46
+
47
+ def actions_dictionary
48
+ @_actions_dictionary ||= ::ActiveAdmin::BaseController::Authorization::ACTIONS_DICTIONARY.dup
49
+ end
50
+ end
51
+ end
@@ -1,16 +1,13 @@
1
1
  module ActiveAdmin
2
2
  class ManagedResource < ActiveRecord::Base
3
- self.table_name = :active_admin_managed_resources
3
+ self.table_name = "active_admin_managed_resources"
4
4
 
5
5
  has_many :permissions, dependent: :destroy
6
-
7
- with_options presence: true do
8
- validates :class_name
9
- validates :action
10
- end
6
+ validates :class_name, presence: true
7
+ validates :action, presence: true
11
8
 
12
9
  def const
13
- @_const ||= class_name.try(:safe_constantize)
10
+ @const ||= class_name.try(:safe_constantize)
14
11
  end
15
12
 
16
13
  def active?
@@ -23,41 +20,7 @@ module ActiveAdmin
23
20
 
24
21
  class << self
25
22
  def reload
26
- ActiveRecord::Base.transaction do
27
- clear_cache
28
- update_managed_resources
29
- cleanup_managed_resources
30
- update_permissions
31
- end
32
- end
33
-
34
- private
35
-
36
- def update_managed_resources
37
- manageable_resources.each(&method(:find_or_create_by!))
38
- end
39
-
40
- def cleanup_managed_resources
41
- (persisted_resources - manageable_resources).each do |condition|
42
- where(condition).destroy_all
43
- end
44
- end
45
-
46
- def update_permissions
47
- ::ActiveAdmin::Permission.clear_cache
48
- ::ActiveAdmin::Permission.update_all_from_managed_resources(all)
49
- end
50
-
51
- def persisted_resources
52
- all.map(&:attributes).map { |attribute| attribute.slice(*%w(class_name action name)).symbolize_keys }
53
- end
54
-
55
- def manageable_resources
56
- @_manageable_resources ||= ::ActiveAdminRole::ManageableResource.new.call
57
- end
58
-
59
- def clear_cache
60
- @_manageable_resources = nil
23
+ ActiveAdmin::PermissionReloader.reload
61
24
  end
62
25
  end
63
26
  end
@@ -1,26 +1,21 @@
1
1
  module ActiveAdmin
2
2
  class Permission < ActiveRecord::Base
3
3
  self.table_name = :active_admin_permissions
4
-
5
4
  role_based_authorizable
6
5
 
7
6
  enum state: { cannot: 0, can: 1 }
8
7
 
9
8
  belongs_to :managed_resource
10
-
11
9
  delegate :class_name, :action, :name, :const, :active?, :for_active_admin_page?, to: :managed_resource
12
- delegate :clear_cache, to: :class
13
10
 
14
- after_update :clear_cache
11
+ validates :role, presence: true
12
+ validates :state, presence: true
13
+ validates :managed_resource_id, uniqueness: { scope: :role }
15
14
 
16
- with_options presence: true do
17
- validates :managed_resource_id
18
- validates :role
19
- validates :state
15
+ after_update do
16
+ self.class.clear_cache
20
17
  end
21
18
 
22
- validates :managed_resource_id, uniqueness: { scope: [:role] }
23
-
24
19
  def to_condition
25
20
  [].tap do |cond|
26
21
  cond << state
@@ -31,8 +26,8 @@ module ActiveAdmin
31
26
  end
32
27
 
33
28
  class << self
34
- def update_all_from_managed_resources(managed_resources)
35
- managed_resources.each do |managed_resource|
29
+ def update_all_from_managed_resources
30
+ ::ActiveAdmin::ManagedResource.all.find_each do |managed_resource|
36
31
  manageable_roles.values.each do |value_of_role|
37
32
  find_or_create_by!(managed_resource_id: managed_resource.id, role: value_of_role) do |permission|
38
33
  permission.state = default_state
@@ -42,18 +37,18 @@ module ActiveAdmin
42
37
  end
43
38
 
44
39
  def indexed_cache
45
- @_indexed_cache ||= eager_load(:managed_resource).all.group_by(&:role)
40
+ @indexed_cache ||= eager_load(:managed_resource).all.group_by(&:role)
46
41
  end
47
42
 
48
43
  def clear_cache
49
- @_indexed_cache = nil
44
+ @indexed_cache = nil
50
45
  end
51
46
 
52
47
  private
53
48
 
54
- def default_state
55
- @_default_state ||= ::ActiveAdminRole.config.default_state
56
- end
49
+ def default_state
50
+ @default_state ||= ::ActiveAdminRole.config.default_state
51
+ end
57
52
  end
58
53
  end
59
54
  end
@@ -0,0 +1,47 @@
1
+ module ActiveAdmin
2
+ module PermissionReloader
3
+ class << self
4
+ def reload
5
+ ActiveRecord::Base.transaction do
6
+ clear_cache
7
+ update_managed_resources
8
+ cleanup_managed_resources
9
+ update_permissions
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def clear_cache
16
+ @manageable_resources = nil
17
+ end
18
+
19
+ def update_managed_resources
20
+ manageable_resources.each do |manageable_resource|
21
+ ::ActiveAdmin::ManagedResource.find_or_create_by!(manageable_resource)
22
+ end
23
+ end
24
+
25
+ def cleanup_managed_resources
26
+ (persisted_resources - manageable_resources).each do |condition|
27
+ ::ActiveAdmin::ManagedResource.where(condition).destroy_all
28
+ end
29
+ end
30
+
31
+ def update_permissions
32
+ ::ActiveAdmin::Permission.clear_cache
33
+ ::ActiveAdmin::Permission.update_all_from_managed_resources
34
+ end
35
+
36
+ def persisted_resources
37
+ ::ActiveAdmin::ManagedResource.all.map(&:attributes).map do |attribute|
38
+ attribute.slice("class_name", "action", "name").symbolize_keys
39
+ end
40
+ end
41
+
42
+ def manageable_resources
43
+ @manageable_resources ||= ::ActiveAdmin::ManageableResource.call
44
+ end
45
+ end
46
+ end
47
+ end