From c04fb823417a506288e5adb0ac4b7c5c9b541c76 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 2 Feb 2019 08:23:17 +0500 Subject: [PATCH 01/12] Improve code --- lib/rolify.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/rolify.rb b/lib/rolify.rb index 5c02eb5e..3ed72fc5 100644 --- a/lib/rolify.rb +++ b/lib/rolify.rb @@ -8,7 +8,16 @@ module Rolify extend Configure + ROLIFY_ASSOCIATION_OPTIONS = %i[ + before_add + after_add + before_remove + after_remove + inverse_of + ].freeze + attr_accessor :role_cname, :adapter, :resource_adapter, :role_join_table_name, :role_table_name, :strict_rolify + @@resource_types = [] def rolify(options = {}) @@ -25,7 +34,7 @@ def rolify(options = {}) rolify_options = { :class_name => options[:role_cname].camelize } rolify_options.merge!({ :join_table => self.role_join_table_name }) if Rolify.orm == "active_record" - rolify_options.merge!(options.reject{ |k,v| ![ :before_add, :after_add, :before_remove, :after_remove, :inverse_of ].include? k.to_sym }) + rolify_options.merge!(options.select { |k, v| ROLIFY_ASSOCIATION_OPTIONS.include? k.to_sym }) has_and_belongs_to_many :roles, rolify_options From fbdf4008d9a3ad072d1c3d31bd06ba76ded8a27a Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:01:15 +0500 Subject: [PATCH 02/12] Use RuboCop --- .gitignore | 9 +++++++-- .rubocop.yml | 42 ++++++++++++++++++++++++++++++++++++++++++ Rakefile | 7 +++++++ rolify.gemspec | 1 + 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 .rubocop.yml diff --git a/.gitignore b/.gitignore index 0f259af7..c6859843 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ *.gem .bundle -Gemfile.lock -gemfiles/*.lock pkg/* tmp/* coverage/* @@ -9,3 +7,10 @@ log*/* .rbx/* .rspec *.swp + +# for a library or gem, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +/Gemfile.lock +/gemfiles/*.lock +/.ruby-version +/.ruby-gemset diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 00000000..3db62a37 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,42 @@ +AllCops: + TargetRubyVersion: 2.3 + DisplayCopNames: true + + Exclude: + - 'vendor/**/*' + +Layout/AccessModifierIndentation: + EnforcedStyle: outdent + +Layout/AlignHash: + EnforcedColonStyle: table + EnforcedHashRocketStyle: table + +Metrics/BlockLength: + Exclude: + - '*.gemspec' + - 'spec/**/*' + +Style/AndOr: + EnforcedStyle: conditionals + +Style/Documentation: + Enabled: false + +Style/DoubleNegation: + Enabled: false + +Style/RescueStandardError: + Enabled: false + +Style/TrailingCommaInArguments: + EnforcedStyleForMultiline: comma + +Style/TrailingCommaInArrayLiteral: + EnforcedStyleForMultiline: comma + +Style/TrailingCommaInHashLiteral: + EnforcedStyleForMultiline: comma + +Style/VariableInterpolation: + Enabled: false diff --git a/Rakefile b/Rakefile index 37774c2f..ffdac762 100644 --- a/Rakefile +++ b/Rakefile @@ -37,3 +37,10 @@ task :spec_all do system "ADAPTER=#{model_adapter} rake" end end + +begin + require 'rubocop/rake_task' + RuboCop::RakeTask.new +rescue LoadError + nil +end diff --git a/rolify.gemspec b/rolify.gemspec index 9fe6d2ab..472a7605 100644 --- a/rolify.gemspec +++ b/rolify.gemspec @@ -33,4 +33,5 @@ Gem::Specification.new do |s| s.add_development_dependency 'bundler', '~> 2.0' # packaging feature s.add_development_dependency 'rake', '~> 12.3' # Tasks manager s.add_development_dependency 'rspec-rails', '~> 3.8' + s.add_development_dependency 'rubocop', '~> 0.67.2' end From d82c38bfc2c33f14bcf3a43f51f7af77e0143175 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:15:02 +0500 Subject: [PATCH 03/12] Fix code style --- Appraisals | 32 +++++++++++++++------------- Gemfile | 12 ++++++----- Rakefile | 14 +++++++------ rolify.gemspec | 57 +++++++++++++++++++++++++++++--------------------- 4 files changed, 65 insertions(+), 50 deletions(-) diff --git a/Appraisals b/Appraisals index 00dfd7cc..357e7944 100644 --- a/Appraisals +++ b/Appraisals @@ -1,30 +1,32 @@ +# frozen_string_literal: true + appraise 'mongoid-6' do - gem "mongoid", "~> 6" - gem "bson_ext", :platform => "ruby" + gem 'mongoid', '~> 6' + gem 'bson_ext', platform: 'ruby' end appraise 'mongoid-7' do - gem "mongoid", "~> 7" - gem "bson_ext", :platform => "ruby" + gem 'mongoid', '~> 7' + gem 'bson_ext', platform: 'ruby' end appraise 'activerecord-4' do - gem "sqlite3", "~> 1.3.6", :platform => "ruby" - gem "activerecord", "~> 4.2.11", :require => "active_record" + gem 'sqlite3', '~> 1.3.6', platform: 'ruby' + gem 'activerecord', '~> 4.2.11', require: 'active_record' end appraise 'activerecord-5' do - gem "sqlite3", "~> 1.3.6", :platform => "ruby" - gem "activerecord", ">= 5.2.0", :require => "active_record" + gem 'sqlite3', '~> 1.3.6', platform: 'ruby' + gem 'activerecord', '>= 5.2.0', require: 'active_record' # Ammeter dependencies: - gem "actionpack", ">= 5.2.0" - gem "activemodel", ">= 5.2.0" - gem "railties", ">= 5.2.0" + gem 'actionpack', '>= 5.2.0' + gem 'activemodel', '>= 5.2.0' + gem 'railties', '>= 5.2.0' - gem 'rspec-rails' , github: 'rspec/rspec-rails' - gem 'rspec-core' , github: 'rspec/rspec-core' + gem 'rspec-rails', github: 'rspec/rspec-rails' + gem 'rspec-core', github: 'rspec/rspec-core' gem 'rspec-expectations', github: 'rspec/rspec-expectations' - gem 'rspec-mocks' , github: 'rspec/rspec-mocks' - gem 'rspec-support' , github: 'rspec/rspec-support' + gem 'rspec-mocks', github: 'rspec/rspec-mocks' + gem 'rspec-support', github: 'rspec/rspec-support' end diff --git a/Gemfile b/Gemfile index 402f2f6c..aa4cecf6 100644 --- a/Gemfile +++ b/Gemfile @@ -1,14 +1,16 @@ -source "https://rubygems.org" +# frozen_string_literal: true + +source 'https://rubygems.org' + +gemspec group :test do gem 'appraisal' - gem 'coveralls', :require => false + gem 'coveralls', require: false gem 'its' gem 'byebug' gem 'pry-byebug' gem 'test-unit' # Implicitly loaded by ammeter gem 'database_cleaner', '~> 1.6.2' - gem 'codeclimate-test-reporter', :require => nil + gem 'codeclimate-test-reporter', require: nil end - -gemspec diff --git a/Rakefile b/Rakefile index ffdac762..ab24bdd9 100644 --- a/Rakefile +++ b/Rakefile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'bundler' require 'rspec/core/rake_task' require 'coveralls/rake/task' @@ -15,19 +17,19 @@ RSpec::Core::RakeTask.new(:rolify) do |task| task.pattern = 'spec/rolify/**/*_spec.rb' end -if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"] - task :default => :appraisal +if !ENV['APPRAISAL_INITIALIZED'] && !ENV['TRAVIS'] + task default: :appraisal else - task :default => [ :spec, 'coveralls:push' ] + task default: %i[spec coveralls:push] end desc 'Run all specs' task 'spec' do Rake::Task['generators'].invoke - return_code1 = $?.exitstatus + return_code1 = $CHILD_STATUS.exitstatus Rake::Task['rolify'].invoke - return_code2 = $?.exitstatus - fail if return_code1 != 0 || return_code2 != 0 + return_code2 = $CHILD_STATUS.exitstatus + raise if return_code1 != 0 || return_code2 != 0 end desc 'Run specs for all adapters' diff --git a/rolify.gemspec b/rolify.gemspec index 472a7605..3c00f07f 100644 --- a/rolify.gemspec +++ b/rolify.gemspec @@ -1,33 +1,42 @@ -# -*- encoding: utf-8 -*- -$:.push File.expand_path('../lib', __FILE__) +# frozen_string_literal: true + +lib = File.expand_path('lib', __dir__).freeze +$LOAD_PATH.unshift lib unless $LOAD_PATH.include? lib + require 'rolify/version' Gem::Specification.new do |s| - s.name = 'rolify' - s.summary = %q{Roles library with resource scoping} - s.description = %q{Very simple Roles library without any authorization enforcement supporting scope on resource objects (instance or class). Supports ActiveRecord and Mongoid ORMs.} - s.version = Rolify::VERSION - s.platform = Gem::Platform::RUBY - s.homepage = 'https://github.com/RolifyCommunity/rolify' - s.rubyforge_project = s.name - - s.license = 'MIT' - - s.authors = [ - 'Florent Monbillard', - 'Wellington Cordeiro' - ] - s.email = [ - 'f.monbillard@gmail.com', - 'wellington@wellingtoncordeiro.com' - ] + s.name = 'rolify' + s.version = Rolify::VERSION + s.license = 'MIT' + s.homepage = 'https://github.com/RolifyCommunity/rolify' + s.summary = 'Roles library with resource scoping' + s.platform = Gem::Platform::RUBY - s.files = `git ls-files`.split("\n") - s.test_files = `git ls-files -- spec/*`.split("\n") - s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } + s.required_ruby_version = '>= 2.3' + s.rubyforge_project = s.name + + s.authors = ['Florent Monbillard', 'Wellington Cordeiro'] + s.email = ['f.monbillard@gmail.com', 'wellington@wellingtoncordeiro.com'] + + s.description = <<~DESCRIPTION.split("\n").join(' ') + Very simple Roles library without any authorization enforcement + supporting scope on resource objects (instance or class). + Supports ActiveRecord and Mongoid ORMs. + DESCRIPTION + + s.metadata = { + 'homepage_uri' => 'https://github.com/RolifyCommunity/rolify', + 'source_code_uri' => 'https://github.com/RolifyCommunity/rolify', + 'bug_tracker_uri' => 'https://github.com/RolifyCommunity/rolify/issues', + }.freeze + + s.bindir = 'exe' s.require_paths = ['lib'] - s.required_ruby_version = '>= 2.3' + s.files = `git ls-files`.split("\n") + s.test_files = `git ls-files -- spec/*`.split("\n") + s.executables = `git ls-files -- exe/*`.split("\n").map { |f| File.basename(f) } s.add_development_dependency 'ammeter', '~> 1.1' # Spec generator s.add_development_dependency 'bundler', '~> 2.0' # packaging feature From 61c4daf7126327e22779ea5250fa5178d052f0bb Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:18:54 +0500 Subject: [PATCH 04/12] Fix access modifier indentation --- lib/rolify/adapters/active_record/resource_adapter.rb | 2 +- lib/rolify/adapters/active_record/role_adapter.rb | 2 +- lib/rolify/adapters/mongoid/role_adapter.rb | 2 +- lib/rolify/configure.rb | 2 +- lib/rolify/finders.rb | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/rolify/adapters/active_record/resource_adapter.rb b/lib/rolify/adapters/active_record/resource_adapter.rb index aa18c3c7..4b79d96e 100644 --- a/lib/rolify/adapters/active_record/resource_adapter.rb +++ b/lib/rolify/adapters/active_record/resource_adapter.rb @@ -43,7 +43,7 @@ def all_except(resource, excluded_obj) resource.where.not(prime_key => excluded_obj.pluck(prime_key)) end - private + private def quote_column(column) ActiveRecord::Base.connection.quote_column_name column diff --git a/lib/rolify/adapters/active_record/role_adapter.rb b/lib/rolify/adapters/active_record/role_adapter.rb index 011a0411..0d5c9383 100644 --- a/lib/rolify/adapters/active_record/role_adapter.rb +++ b/lib/rolify/adapters/active_record/role_adapter.rb @@ -77,7 +77,7 @@ def all_except(user, excluded_obj) user.where.not(user.primary_key => excluded_obj) end - private + private def build_conditions(relation, args) conditions = [] diff --git a/lib/rolify/adapters/mongoid/role_adapter.rb b/lib/rolify/adapters/mongoid/role_adapter.rb index 042a8b73..c4d01b68 100644 --- a/lib/rolify/adapters/mongoid/role_adapter.rb +++ b/lib/rolify/adapters/mongoid/role_adapter.rb @@ -95,7 +95,7 @@ def all_except(user, excluded_obj) user.not_in(_id: excluded_obj.to_a) end - private + private def build_conditions(relation, args) conditions = [] diff --git a/lib/rolify/configure.rb b/lib/rolify/configure.rb index 96c00c74..11a9581f 100644 --- a/lib/rolify/configure.rb +++ b/lib/rolify/configure.rb @@ -49,7 +49,7 @@ def remove_role_if_empty @@remove_role_if_empty end - private + private def sanity_check(role_cnames) return true if ARGV.reduce(nil) { |acc,arg| arg =~ /assets:/ if acc.nil? } == 0 diff --git a/lib/rolify/finders.rb b/lib/rolify/finders.rb index b17557d5..1b86736d 100644 --- a/lib/rolify/finders.rb +++ b/lib/rolify/finders.rb @@ -27,7 +27,7 @@ def with_any_role(*args) end end - private +private def parse_args(args, users, &block) args.each do |arg| @@ -41,4 +41,4 @@ def parse_args(args, users, &block) block.call(users_to_add) end end -end \ No newline at end of file +end From 9899905c86aa0476e92486f1652962ea248bc5e0 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:22:10 +0500 Subject: [PATCH 05/12] Exclude files from style checks --- .rubocop.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.rubocop.yml b/.rubocop.yml index 3db62a37..6bb03f56 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -3,6 +3,7 @@ AllCops: DisplayCopNames: true Exclude: + - 'gemfiles/*' - 'vendor/**/*' Layout/AccessModifierIndentation: From f1540effec705277f0cf81bba77e7706ebea7ff1 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:24:51 +0500 Subject: [PATCH 06/12] Add contributor --- CONTRIBUTORS | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 2adb9960..d52008e2 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -15,3 +15,4 @@ Sergey Alekseev (@sergey-alekseev) Sankalp Kulshreshtha (@sankalpk) Kirill Sevastyanenko (@kirillseva) Denis Shevchenko (@SimplySorc) +Alex Kotov (@kotovalexarian) From 227193f9ae32443d4c75a4c7b140c9594c432266 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:25:57 +0500 Subject: [PATCH 07/12] Reorder gems --- Gemfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index aa4cecf6..2f4e47b5 100644 --- a/Gemfile +++ b/Gemfile @@ -6,11 +6,11 @@ gemspec group :test do gem 'appraisal' + gem 'byebug' + gem 'codeclimate-test-reporter', require: nil gem 'coveralls', require: false + gem 'database_cleaner', '~> 1.6.2' gem 'its' - gem 'byebug' gem 'pry-byebug' gem 'test-unit' # Implicitly loaded by ammeter - gem 'database_cleaner', '~> 1.6.2' - gem 'codeclimate-test-reporter', require: nil end From 10dbc61ca925d0f54e1c8f3dd2fbf94dedf8f2fe Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:26:36 +0500 Subject: [PATCH 08/12] Fix code style --- lib/rolify/version.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/rolify/version.rb b/lib/rolify/version.rb index 86327cb3..cdae12dd 100644 --- a/lib/rolify/version.rb +++ b/lib/rolify/version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Rolify - VERSION = "6.0.0" + VERSION = '6.0.0' end From 2ee5f3e28f890d235925c521b333a79fbdb2bd35 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:28:46 +0500 Subject: [PATCH 09/12] Fix code style --- lib/rolify/matchers.rb | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/rolify/matchers.rb b/lib/rolify/matchers.rb index c7ca3f13..bc458713 100644 --- a/lib/rolify/matchers.rb +++ b/lib/rolify/matchers.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'rspec/expectations' RSpec::Matchers.define :have_role do |*args| @@ -5,27 +7,28 @@ resource.has_role?(*args) end - failure_message do |resource| - "expected to have role #{args.map(&:inspect).join(" ")}" + failure_message do |_resource| + "expected to have role #{args.map(&:inspect).join(' ')}" end - failure_message_when_negated do |resource| - "expected not to have role #{args.map(&:inspect).join(" ")}" + failure_message_when_negated do |_resource| + "expected not to have role #{args.map(&:inspect).join(' ')}" end end RSpec::Matchers.define :be_the_same_role do |*expected| match do |actual| - if expected.size > 1 + if expected.size > 1 if expected[1].is_a? Class - actual[:name] == expected[0] && actual[:resource_type] == expected[1].to_s + actual[:name] == expected[0] && + actual[:resource_type] == expected[1].to_s else - actual[:name] == expected[0] && - actual[:resource_type] == expected[1].class.name && - actual[:resource_id] == expected[1].id + actual[:name] == expected[0] && + actual[:resource_type] == expected[1].class.name && + actual[:resource_id] == expected[1].id end else actual[:name] == expected[0] end end -end \ No newline at end of file +end From 66a144a6d5e1c62be9756619d3eec271615ba8c7 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:35:07 +0500 Subject: [PATCH 10/12] Fix code style --- lib/rolify/configure.rb | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/lib/rolify/configure.rb b/lib/rolify/configure.rb index 11a9581f..fa6cb699 100644 --- a/lib/rolify/configure.rb +++ b/lib/rolify/configure.rb @@ -1,11 +1,14 @@ +# frozen_string_literal: true + module Rolify module Configure @@dynamic_shortcuts = false - @@orm = "active_record" + @@orm = 'active_record' @@remove_role_if_empty = true def configure(*role_cnames) - return if !sanity_check(role_cnames) + return unless sanity_check role_cnames + yield self if block_given? end @@ -26,18 +29,19 @@ def orm=(orm) end def use_mongoid - self.orm = "mongoid" + self.orm = 'mongoid' end def use_dynamic_shortcuts - return if !sanity_check([]) + return unless sanity_check [] + self.dynamic_shortcuts = true end def use_defaults configure do |config| config.dynamic_shortcuts = false - config.orm = "active_record" + config.orm = 'active_record' end end @@ -52,15 +56,19 @@ def remove_role_if_empty private def sanity_check(role_cnames) - return true if ARGV.reduce(nil) { |acc,arg| arg =~ /assets:/ if acc.nil? } == 0 + return true if ARGV.reduce(nil) { |acc, arg| arg =~ /assets:/ if acc.nil? } == 0 role_cnames.each do |role_cname| role_class = role_cname.constantize - if role_class.superclass.to_s == "ActiveRecord::Base" && role_table_missing?(role_class) - warn "[WARN] table '#{role_cname}' doesn't exist. Did you run the migration? Ignoring rolify config." - return false - end + + next unless role_class.superclass.to_s == 'ActiveRecord::Base' && + role_table_missing?(role_class) + + warn "[WARN] table '#{role_cname}' doesn't exist. " \ + 'Did you run the migration? Ignoring rolify config.' + return false end + true end @@ -69,6 +77,5 @@ def role_table_missing?(role_class) rescue ActiveRecord::NoDatabaseError true end - end end From e490bf3392e70009df0de8fd3f49914b9d6ab630 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:36:52 +0500 Subject: [PATCH 11/12] Fix error --- Rakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index ab24bdd9..6247241e 100644 --- a/Rakefile +++ b/Rakefile @@ -26,9 +26,9 @@ end desc 'Run all specs' task 'spec' do Rake::Task['generators'].invoke - return_code1 = $CHILD_STATUS.exitstatus + return_code1 = $?.exitstatus Rake::Task['rolify'].invoke - return_code2 = $CHILD_STATUS.exitstatus + return_code2 = $?.exitstatus raise if return_code1 != 0 || return_code2 != 0 end From fe1636cf9b5ae1167a172fa0e5f108d49bde8695 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 27 Apr 2019 12:43:59 +0500 Subject: [PATCH 12/12] Fix code style --- lib/rolify.rb | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/lib/rolify.rb b/lib/rolify.rb index 3ed72fc5..6255f43c 100644 --- a/lib/rolify.rb +++ b/lib/rolify.rb @@ -1,7 +1,7 @@ require 'rolify/adapters/base' require 'rolify/configure' require 'rolify/dynamic' -require 'rolify/railtie' if defined?(Rails) +require 'rolify/railtie' if defined? Rails require 'rolify/resource' require 'rolify/role' @@ -16,7 +16,10 @@ module Rolify inverse_of ].freeze - attr_accessor :role_cname, :adapter, :resource_adapter, :role_join_table_name, :role_table_name, :strict_rolify + attr_writer :resource_adapter, :adapter + + attr_accessor :role_cname, :role_join_table_name, :role_table_name, + :strict_rolify @@resource_types = [] @@ -24,47 +27,49 @@ def rolify(options = {}) include Role extend Dynamic if Rolify.dynamic_shortcuts - options.reverse_merge!({:role_cname => 'Role'}) + options.reverse_merge! role_cname: 'Role' self.role_cname = options[:role_cname] - self.role_table_name = self.role_cname.tableize.gsub(/\//, "_") + self.role_table_name = role_cname.tableize.tr('/', '_') - default_join_table = "#{self.to_s.tableize.gsub(/\//, "_")}_#{self.role_table_name}" - options.reverse_merge!({:role_join_table_name => default_join_table}) + default_join_table = "#{to_s.tableize.tr('/', '_')}_#{role_table_name}" + options.reverse_merge! role_join_table_name: default_join_table self.role_join_table_name = options[:role_join_table_name] - rolify_options = { :class_name => options[:role_cname].camelize } - rolify_options.merge!({ :join_table => self.role_join_table_name }) if Rolify.orm == "active_record" - rolify_options.merge!(options.select { |k, v| ROLIFY_ASSOCIATION_OPTIONS.include? k.to_sym }) + rolify_options = { class_name: options[:role_cname].camelize } + rolify_options[:join_table] = role_join_table_name if Rolify.orm == 'active_record' + rolify_options.merge! options.select { |k, _| ROLIFY_ASSOCIATION_OPTIONS.include? k.to_sym } has_and_belongs_to_many :roles, rolify_options - self.adapter = Rolify::Adapter::Base.create("role_adapter", self.role_cname, self.name) + self.adapter = Rolify::Adapter::Base.create('role_adapter', role_cname, name) #use strict roles self.strict_rolify = true if options[:strict] end def adapter - return self.superclass.adapter unless self.instance_variable_defined? '@adapter' + return superclass.adapter unless instance_variable_defined? '@adapter' + @adapter end def resourcify(association_name = :roles, options = {}) include Resource - options.reverse_merge!({ :role_cname => 'Role', :dependent => :destroy }) - resourcify_options = { :class_name => options[:role_cname].camelize, :as => :resource, :dependent => options[:dependent] } + options.reverse_merge! role_cname: 'Role', dependent: :destroy + resourcify_options = { class_name: options[:role_cname].camelize, as: :resource, dependent: options[:dependent] } self.role_cname = options[:role_cname] - self.role_table_name = self.role_cname.tableize.gsub(/\//, "_") + self.role_table_name = role_cname.tableize.tr('/', '_') has_many association_name, resourcify_options - self.resource_adapter = Rolify::Adapter::Base.create("resource_adapter", self.role_cname, self.name) + self.resource_adapter = Rolify::Adapter::Base.create('resource_adapter', role_cname, name) @@resource_types << self.name end def resource_adapter - return self.superclass.resource_adapter unless self.instance_variable_defined? '@resource_adapter' + return superclass.resource_adapter unless instance_variable_defined? '@resource_adapter' + @resource_adapter end @@ -74,12 +79,12 @@ def scopify end def role_class - return self.superclass.role_class unless self.instance_variable_defined? '@role_cname' - self.role_cname.constantize + return superclass.role_class unless instance_variable_defined? '@role_cname' + + role_cname.constantize end def self.resource_types @@resource_types end - end