bali 6.0.0rc2 → 6.0.0rc3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dc092b862d79cc3506ac33a12c09c11a7d79b9b9c91c6a3116b8e6f2d3217288
4
- data.tar.gz: b8ee30857224a08cece951ccd5e615d62c2fc1b5888ac9ec77548736c859278d
3
+ metadata.gz: 0e9334cb26b9dabfd0fea90717a16aa2963086c7b15c25bb1119df0da7b52fc6
4
+ data.tar.gz: e909e2291baeade6fb075d8280d1f3e82bbeb7254bcff845b4242667d7b4c8a0
5
5
  SHA512:
6
- metadata.gz: 7379abef2d029101733e7a7dcb1f4d1718adc07f40cb99f5df4e3ac4ec18ccfd8d5e64c6bbd091527186d9cd7b6ef3d17129c02afc46eaffce1e482ed049bc37
7
- data.tar.gz: a5908ad1de7f4882eab302e17aab0c13f478bf2f665a43043ff1a62fdb3e7c99f1d41ecd62d6d17a5474f5a787a5efecbf1b4d5dede94d21d324c9ed2f5c1af9
6
+ metadata.gz: 2bab74fcaeb2feca9d4062c939f7c56e41f21becf949e2ce0065c704463d1b07af034bb058c602ef0d2e9c365074b03b171c50ca35297d863a8da71445164c55
7
+ data.tar.gz: db8d79a694289e8c59f25c8008ac0c9230b46d40bdea30b6cf15477fa66cf8394f07f8d442fc35c154a31a78b4a7725dda12f6ef67aacfa88dc777306364783a
data/.gitignore CHANGED
@@ -7,10 +7,12 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /spec/test_app/tmp
10
11
 
11
12
  *.swp
12
13
  *.swo
13
14
  *.gemspec
14
15
  *.gem
16
+ *.log
15
17
 
16
18
  plugins
data/.travis.yml CHANGED
@@ -1,4 +1,46 @@
1
1
  language: ruby
2
+
3
+ env:
4
+ global:
5
+ - CC_TEST_REPORTER_ID=76cedf4d3aa437009b269ff68b901102ca24baeb46245eb94fca42e21bba20a7
6
+
2
7
  rvm:
3
- - 2.2.2
4
- before_install: gem install bundler -v 1.10.6
8
+ - 2.6.5
9
+
10
+ before_install:
11
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
12
+ - chmod +x ./cc-test-reporter
13
+ - ./cc-test-reporter before-build
14
+ - sudo apt update -qq
15
+ - gem i bundler -v '<2'
16
+
17
+ cache: bundler
18
+
19
+ script:
20
+ - bundle exec rspec
21
+
22
+ after_script:
23
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
24
+
25
+ matrix:
26
+ include:
27
+ - rvm: 2.7.0
28
+ gemfile: gemfiles/Gemfile-rails.6.0.x
29
+ - rvm: 2.6.3
30
+ gemfile: gemfiles/Gemfile-rails.6.0.x
31
+ - rvm: 2.6.3
32
+ gemfile: gemfiles/Gemfile-rails.5.2.x
33
+ - rvm: 2.4.4
34
+ gemfile: gemfiles/Gemfile-rails.5.2.x
35
+ - rvm: 2.6.3
36
+ gemfile: gemfiles/Gemfile-rails.5.1.x
37
+ - rvm: 2.6.3
38
+ gemfile: gemfiles/Gemfile-rails.5.0.x
39
+ - rvm: 2.4.4
40
+ gemfile: gemfiles/Gemfile-rails.5.0.x
41
+ - rvm: ruby-head
42
+ gemfile: gemfiles/Gemfile-rails.edge
43
+
44
+ allow_failures:
45
+ - rvm: ruby-head
46
+ - gemfile: gemfiles/Gemfile-rails.edge
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'rails', '~> 5.0.0'
6
+ gem 'rspec-rails', '~> 3.9'
7
+ gem 'sqlite3', '< 1.4'
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'rails', '~> 5.1.0'
6
+ gem 'rspec-rails', '~> 3.9'
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'rails', git: 'https://github.com/rails/rails', branch: '5-2-stable'
6
+ gem 'rspec-rails', '~> 3.9'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'rails', '~> 6.0.0'
@@ -0,0 +1,14 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ git_source(:github) do |repo_name|
6
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
7
+ "https://github.com/#{repo_name}.git"
8
+ end
9
+
10
+ github 'rails/rails' do
11
+ gem 'rails'
12
+ end
13
+
14
+ gem 'rspec-rails', '~> 4.0'
data/lib/bali.rb CHANGED
@@ -11,6 +11,7 @@ require "zeitwerk"
11
11
  loader = Zeitwerk::Loader.for_gem
12
12
  loader.ignore("#{__dir__}/generators")
13
13
  loader.ignore("#{__dir__}/bali/rails")
14
+ loader.ignore("#{__dir__}/bali/rspec")
14
15
  loader.setup
15
16
 
16
17
  module Bali
@@ -30,6 +31,14 @@ module Bali
30
31
  require "bali/rails/action_view"
31
32
  require "bali/rails/active_record"
32
33
  end
34
+
35
+ if defined? RSpec
36
+ begin
37
+ require "rspec/matchers"
38
+ require "bali/rspec/able_to_matcher"
39
+ rescue LoadError => e
40
+ end
41
+ end
33
42
  end
34
43
 
35
44
  loader.eager_load
data/lib/bali/judge.rb CHANGED
@@ -79,10 +79,6 @@ class Bali::Judge
79
79
  def judgement
80
80
  judgement = natural_value if no_rule_group?
81
81
 
82
- if judgement.nil? && rule.nil? && may_have_reservation?
83
- judgement = cross_check_reverse_value(cross_check_judge.judgement)
84
- end
85
-
86
82
  if judgement.nil? && rule.nil?
87
83
  cross_check_value = nil
88
84
  # default if can? for undefined rule is false, after related clause
@@ -99,7 +95,7 @@ class Bali::Judge
99
95
  # give chance to check at others block
100
96
  @rule = otherly_rule
101
97
  else
102
- judgement = cross_check_reverse_value(cross_check_value)
98
+ judgement = reverse_value(cross_check_value)
103
99
  end
104
100
  end
105
101
  end
@@ -176,12 +172,13 @@ class Bali::Judge
176
172
  term == :cant ? DEFINITE_TRUE : DEFINITE_FALSE
177
173
  end
178
174
 
179
- # returns true if we need to check rule that can overwrite
180
- # the most powerful rule defined
181
- def may_have_reservation?
182
- term == :cant ?
183
- (rule_group && rule_group.cant_all?) :
184
- (rule_group && rule_group.can_all?)
175
+ def reverse_value(value)
176
+ case value
177
+ when DEFINITE_TRUE then DEFINITE_FALSE
178
+ when DEFINITE_FALSE then DEFINITE_TRUE
179
+ when FUZY_FALSE then FUZY_TRUE
180
+ when FUZY_TRUE then FUZY_FALSE
181
+ end
185
182
  end
186
183
 
187
184
  def evaluate(rule, actor, record)
@@ -195,15 +192,6 @@ class Bali::Judge
195
192
  evaluation ? DEFINITE_TRUE : DEFINITE_FALSE
196
193
  end
197
194
 
198
- def cross_check_reverse_value(cross_check_value)
199
- case cross_check_value
200
- when DEFINITE_TRUE then DEFINITE_FALSE
201
- when DEFINITE_FALSE then DEFINITE_TRUE
202
- when FUZY_FALSE then FUZY_TRUE
203
- when FUZY_TRUE then FUZY_FALSE
204
- end
205
- end
206
-
207
195
  def deduce_by_evaluation
208
196
  return unless rule
209
197
 
@@ -216,9 +204,9 @@ class Bali::Judge
216
204
  return unless rule_group
217
205
 
218
206
  if rule_group.can_all?
219
- term == :cant ? DEFINITE_FALSE : DEFINITE_TRUE
207
+ reverse_value(natural_value)
220
208
  elsif rule_group.cant_all?
221
- term == :cant ? DEFINITE_TRUE : DEFINITE_FALSE
209
+ natural_value
222
210
  end
223
211
  end
224
212
 
data/lib/bali/printer.rb CHANGED
@@ -2,17 +2,37 @@ require "stringio"
2
2
  require "date"
3
3
 
4
4
  # module that would allow all defined rules to be printed for check
5
- module Bali::Printer
6
- module_function
5
+ class Bali::Printer
6
+ include Singleton
7
7
 
8
8
  SEPARATOR = " " * 6
9
9
  SUBTARGET_TITLE_SEPARATOR = SEPARATOR + ("-" * 80) + "\n"
10
10
 
11
- def pretty_print
11
+ def self.printable
12
+ instance.printable
13
+ end
14
+
15
+ def self.pretty_print
16
+ printable
17
+ end
18
+
19
+ def load_rule_classes
20
+ return unless Bali.config.rules_path.present?
21
+
22
+ Dir["#{Bali.config.rules_path}/**/*.rb"].each do |rule_class_path|
23
+ require rule_class_path
24
+ end
25
+ rescue LoadError
26
+ # ignore
27
+ end
28
+
29
+ def printable
30
+ load_rule_classes
12
31
  output = StringIO.new
13
32
 
14
33
  # build up the string for pretty printing rules
15
34
  rule_classes = ObjectSpace.each_object(Class).select { |cls| cls < Bali::Rules }
35
+ rule_classes.sort! { |a, b| a.to_s <=> b.to_s }
16
36
  rule_classes.each do |rule_class|
17
37
  output << "===== #{rule_class.model_class} =====\n\n"
18
38
 
@@ -5,4 +5,10 @@ require 'active_support/lazy_load_hooks'
5
5
  ActiveSupport.on_load :action_controller do
6
6
  require "bali"
7
7
  ::ActionController::Base.send :include, Bali::Statics::Authorizer
8
+ ::ActionController::Base.send :include, Bali::Statics::ScopeRuler
9
+
10
+ if defined? ::ActionController::API
11
+ ::ActionController::API.send :include, Bali::Statics::Authorizer
12
+ ::ActionController::API.send :include, Bali::Statics::ScopeRuler
13
+ end
8
14
  end
@@ -5,4 +5,5 @@ require 'active_support/lazy_load_hooks'
5
5
  ActiveSupport.on_load :action_view do
6
6
  require "bali"
7
7
  ::ActionView::Base.send :include, Bali::Statics::Authorizer
8
+ ::ActionView::Base.send :include, Bali::Statics::ScopeRuler
8
9
  end
@@ -4,7 +4,5 @@ require 'active_support/lazy_load_hooks'
4
4
 
5
5
  ActiveSupport.on_load :active_record do
6
6
  require "bali"
7
- ::ActiveRecord::Base.send :include, Bali::Authorizer
8
- ::ActiveRecord::Base.send :extend, Bali::Statics::Authorizer
9
7
  ::ActiveRecord::Base.send :extend, Bali::Statics::ActiveRecord
10
8
  end
data/lib/bali/role.rb CHANGED
@@ -5,8 +5,15 @@ class Bali::Role
5
5
  DEFAULT_ALLOW = :default_allow
6
6
  ].freeze
7
7
 
8
+ IDENTIFIER_CLASSES = [
9
+ String,
10
+ Symbol,
11
+ NilClass,
12
+ ].freeze
13
+
8
14
  attr_accessor :name
9
15
  attr_accessor :cans, :cants
16
+ attr_reader :scope
10
17
 
11
18
  attr_accessor :can_all
12
19
  alias :can_all? :can_all
@@ -15,7 +22,7 @@ class Bali::Role
15
22
 
16
23
  def self.formalize(object)
17
24
  case object
18
- when String, Symbol, NilClass then [object]
25
+ when *IDENTIFIER_CLASSES then [object]
19
26
  when Array then object
20
27
  else formalize(extract_roles_from_object(object))
21
28
  end
@@ -30,7 +37,7 @@ class Bali::Role
30
37
  end
31
38
 
32
39
  def initialize(name)
33
- @name = name&.to_sym
40
+ @name = name.to_sym if name
34
41
  @right_level = INHERIT
35
42
 
36
43
  @cans = {}
@@ -45,19 +52,42 @@ class Bali::Role
45
52
  right_level == DEFAULT_DENY
46
53
  end
47
54
 
48
- def can_all=(bool)
49
- case bool
50
- when true then @right_level = DEFAULT_ALLOW
51
- else @right_level = DEFAULT_DENY
55
+ ##### DSL METHODS
56
+ def can(*args, &block)
57
+ add :can, *args, block
58
+ end
59
+
60
+ def cant(*args, &block)
61
+ add :cant, *args, block
62
+ end
63
+
64
+ def can_all
65
+ @right_level = DEFAULT_ALLOW
66
+ end
67
+
68
+ def cant_all
69
+ @right_level = DEFAULT_DENY
70
+ end
71
+
72
+ def scope(&block)
73
+ return @scope unless block_given?
74
+
75
+ raise Bali::DslError, "Block can't be scoped inside a role" if name
76
+ @scope = block
77
+ end
78
+
79
+ def add(term, *operations, block)
80
+ operations.each do |operation|
81
+ rule = Bali::Rule.new(term, operation)
82
+ rule.conditional = block if block
83
+ self << rule
52
84
  end
53
85
  end
86
+ ##### DSL METHODS
54
87
 
55
88
  def << rule
56
- # operation cant be defined twice
57
89
  operation = rule.operation.to_sym
58
90
 
59
- return if cants[operation] && cans[operation]
60
-
61
91
  if rule.term == :cant
62
92
  cants[operation] = rule
63
93
  cans.delete operation
@@ -0,0 +1,39 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class AbleToMatcher < Be
5
+ def initialize(operation, class_or_record = nil)
6
+ @operation = operation
7
+ @class_or_record = class_or_record
8
+ end
9
+
10
+ def matches?(actor)
11
+ if @class_or_record
12
+ rule_class = "#{@class_or_record.class.name}#{Bali.config.suffix}".constantize
13
+ rule_class.can?(actor, @operation, @class_or_record)
14
+ else
15
+ @class_or_record = actor
16
+ rule_class = "#{@class_or_record.name}#{Bali.config.suffix}".constantize
17
+ rule_class.can?(nil, @operation, @class_or_record)
18
+ end
19
+ end
20
+
21
+ def failure_message
22
+ "expected to be able to #{@operation}, but actually cannot"
23
+ end
24
+
25
+ def failure_message_when_negated
26
+ "expected not to be able to #{@operation}, but actually can"
27
+ end
28
+
29
+ def description
30
+ "be able to #{@operation}"
31
+ end
32
+ end
33
+ end
34
+
35
+ def be_able_to(*args)
36
+ BuiltIn::AbleToMatcher.new(*args)
37
+ end
38
+ end
39
+ end
data/lib/bali/ruler.rb CHANGED
@@ -6,14 +6,14 @@ class Bali::Ruler
6
6
  private :model_class
7
7
 
8
8
  def self.for(record_class)
9
- rule_maker_cls_str = "#{record_class}#{Bali.config.suffix}"
10
- rule_class = rule_maker_cls_str.safe_constantize
9
+ rule_class = Bali::Rules.for(record_class)
11
10
  rule_class.ruler if rule_class
12
11
  end
13
12
 
14
13
  def initialize(model_class)
15
14
  @model_class = model_class
16
15
  @roles = {}
16
+ @roles[nil] = Bali::Role.new(nil)
17
17
  end
18
18
 
19
19
  def << role
@@ -21,6 +21,18 @@ class Bali::Ruler
21
21
  end
22
22
 
23
23
  def [] role
24
- @roles[role&.to_sym]
24
+ symbolized_role = role.to_sym if role
25
+ @roles[symbolized_role]
26
+ end
27
+
28
+ def find_or_create_role role_name
29
+ role = self[role_name]
30
+
31
+ if role.nil?
32
+ role = Bali::Role.new(role_name)
33
+ self << role
34
+ end
35
+
36
+ role
25
37
  end
26
38
  end
data/lib/bali/rules.rb CHANGED
@@ -1,17 +1,25 @@
1
+ require "forwardable"
2
+
1
3
  class Bali::Rules
4
+ extend Bali::Statics::Authorizer
5
+ extend Bali::Statics::ScopeRuler
6
+
2
7
  class << self
8
+ extend Forwardable
9
+
3
10
  attr_writer :current_role
4
11
  attr_reader :ruler
5
- end
6
12
 
7
- def self.inherited(subcls)
8
- # Every rule class has the inherited block even if it's never
9
- # used/formally defined, so it's easier to work with or make
10
- # assumption/checking on the inherited block. As we treat
11
- # rules defined in the inherited scope, as default value,
12
- # this decision makes sense.
13
+ def_delegators :inheritable_role, :scope, :scope
14
+ def_delegators :inheritable_role, :can, :can
15
+ def_delegators :inheritable_role, :cant, :cant
16
+ def_delegators :inheritable_role, :cant_all, :cant_all
17
+ def_delegators :inheritable_role, :can_all, :can_all
18
+ end
13
19
 
14
- subcls.set_role nil
20
+ def self.for(record_class)
21
+ rule_maker_cls_str = "#{record_class}#{Bali.config.suffix}"
22
+ rule_maker_cls_str.safe_constantize
15
23
  end
16
24
 
17
25
  def self.model_class
@@ -21,27 +29,11 @@ class Bali::Rules
21
29
  rule_class_maker_str.constantize
22
30
  end
23
31
 
24
- def self.can(*args, &block)
25
- add :can, *args, block
26
- end
27
-
28
- def self.cant(*args, &block)
29
- add :cant, *args, block
30
- end
31
-
32
- def self.cant_all(*args)
33
- current_role.can_all = false
34
- end
35
-
36
- def self.can_all(*args)
37
- current_role.can_all = true
38
- end
39
-
40
- def self.role(*roles)
41
- roles.each do |role|
42
- if Symbol === role || String === role || NilClass === role
43
- set_role role
44
- yield
32
+ def self.role(*role_names, &block)
33
+ role_names.each do |role_name|
34
+ if Bali::Role::IDENTIFIER_CLASSES.include?(role_name.class)
35
+ role = ruler.find_or_create_role role_name
36
+ role.instance_eval(&block)
45
37
  else
46
38
  raise Bali::DslError, "Cannot define role using #{param.class}. " +
47
39
  "Please use either a Symbol, a String or nil"
@@ -49,26 +41,11 @@ class Bali::Rules
49
41
  end
50
42
  end
51
43
 
52
- def self.current_role
53
- @current_role ||= set_role nil
54
- end
55
-
56
44
  def self.ruler
57
45
  @ruler ||= Bali::Ruler.new(model_class)
58
46
  end
59
47
 
60
- def self.set_role(role)
61
- role = ruler[role] || Bali::Role.new(role)
62
- ruler << role
63
- @current_role = role
48
+ def self.inheritable_role
49
+ ruler[nil]
64
50
  end
65
-
66
- def self.add(term, *operations, block)
67
- operations.each do |operation|
68
- rule = Bali::Rule.new(term, operation)
69
- rule.conditional = block if block
70
- current_role << rule
71
- end
72
- end
73
-
74
51
  end
@@ -1,9 +1,61 @@
1
1
  module Bali::Statics::Authorizer
2
- def can?(actor_or_roles, operation, record = self)
3
- Bali::Judge.check(:can, actor_or_roles, operation, record)
2
+ module HelperFunctions
3
+ extend self
4
+
5
+ def not_true_actor?(actor)
6
+ Symbol === actor || String === actor
7
+ end
8
+
9
+ def find_actor(actor, operation, record = nil)
10
+ return actor unless not_true_actor?(actor)
11
+ end
12
+
13
+ def find_operation(actor, operation, record = nil)
14
+ not_true_actor?(actor) ?
15
+ actor :
16
+ operation
17
+ end
18
+
19
+ def find_record(actor, operation, record = nil)
20
+ if not_true_actor?(actor) && record.nil?
21
+ operation
22
+ elsif actor.is_a?(ActiveRecord::Base) && record.nil?
23
+ actor.class
24
+ else
25
+ record
26
+ end
27
+ end
28
+
29
+ def determine_model_class!(obj, arg1, arg2, arg3)
30
+ if arg2.nil? && arg3.nil? && !obj.respond_to?(:model_class)
31
+ raise Bali::Error, "Cannot perform checking when the actor is not known"
32
+ end
33
+ arg3 = obj.model_class if (arg2.nil? || arg1.nil?) && arg3.nil?
34
+ arg3
35
+ end
36
+
37
+ def check(term, obj, arg1, arg2, arg3)
38
+ # try to infer current user if only passing one arg
39
+ if arg2.nil? && arg3.nil? && obj.respond_to?(:current_user)
40
+ arg2 = arg1
41
+ arg1 = obj.current_user
42
+ end
43
+
44
+ arg3 = HelperFunctions.determine_model_class! obj, arg1, arg2, arg3
45
+
46
+ actor = HelperFunctions.find_actor(arg1, arg2, arg3)
47
+ operation = HelperFunctions.find_operation(arg1, arg2, arg3)
48
+ record = HelperFunctions.find_record(arg1, arg2, arg3)
49
+
50
+ Bali::Judge.check(term, actor, operation, record)
51
+ end
52
+ end
53
+
54
+ def can?(arg1, arg2 = nil, arg3 = nil)
55
+ HelperFunctions.check(:can, self, arg1, arg2, arg3)
4
56
  end
5
57
 
6
- def cant?(actor_or_roles, operation, record = self)
7
- Bali::Judge.check(:cant, actor_or_roles, operation, record)
58
+ def cant?(arg1, arg2 = nil, arg3 = nil)
59
+ HelperFunctions.check(:cant, self, arg1, arg2, arg3)
8
60
  end
9
61
  end
@@ -0,0 +1,39 @@
1
+ module Bali::Statics::ScopeRuler
2
+ module HelperFunctions
3
+ extend self
4
+
5
+ def extract_data_and_actor(obj, arg1, arg2 = nil)
6
+ if arg2.nil?
7
+ data = arg1
8
+ if obj.respond_to?(:current_user)
9
+ actor = obj.current_user
10
+ end
11
+ else
12
+ data, actor = arg1, arg2
13
+ end
14
+
15
+ return data, actor
16
+ end
17
+
18
+ def scope_for(relation)
19
+ rule_class = Bali::Rules.for(relation.model)
20
+ return unless rule_class
21
+
22
+ rule_class.inheritable_role.scope
23
+ end
24
+ end
25
+
26
+ def rule_scope(arg1, arg2 = nil)
27
+ data, actor = HelperFunctions.extract_data_and_actor(self, arg1, arg2)
28
+ return unless data
29
+
30
+ scope = HelperFunctions.scope_for(data)
31
+ scoped_data = case scope.arity
32
+ when 0 then scope.call
33
+ when 1 then scope.call(data)
34
+ when 2 then scope.call(data, actor)
35
+ end
36
+
37
+ scoped_data || data
38
+ end
39
+ end
@@ -4,6 +4,6 @@ namespace :bali do
4
4
  rules_path = Bali.config.rules_path
5
5
  Dir.glob("#{rules_path}/**/*.rb").each { |f| load f }
6
6
 
7
- $stdout.puts Bali::Printer.pretty_print
7
+ $stdout.puts Bali::Printer.printable
8
8
  end
9
9
  end
data/lib/bali/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bali
2
- VERSION = "6.0.0rc2"
2
+ VERSION = "6.0.0rc3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bali
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0rc2
4
+ version: 6.0.0rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Notodikromo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-27 00:00:00.000000000 Z
11
+ date: 2020-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk
@@ -73,19 +73,19 @@ dependencies:
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
- name: rspec
76
+ name: rspec-rails
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - "<="
80
80
  - !ruby/object:Gem::Version
81
- version: '3.9'
81
+ version: '4'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - "<="
87
87
  - !ruby/object:Gem::Version
88
- version: '3.9'
88
+ version: '4'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: pry-byebug
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -102,6 +102,20 @@ dependencies:
102
102
  version: '0'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: simplecov
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: '0.17'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '='
115
+ - !ruby/object:Gem::Version
116
+ version: '0.17'
117
+ - !ruby/object:Gem::Dependency
118
+ name: sqlite3
105
119
  requirement: !ruby/object:Gem::Requirement
106
120
  requirements:
107
121
  - - ">="
@@ -130,8 +144,12 @@ files:
130
144
  - bali.gemspec
131
145
  - bin/console
132
146
  - bin/setup
147
+ - gemfiles/Gemfile-rails.5.0.x
148
+ - gemfiles/Gemfile-rails.5.1.x
149
+ - gemfiles/Gemfile-rails.5.2.x
150
+ - gemfiles/Gemfile-rails.6.0.x
151
+ - gemfiles/Gemfile-rails.edge
133
152
  - lib/bali.rb
134
- - lib/bali/authorizer.rb
135
153
  - lib/bali/config.rb
136
154
  - lib/bali/dsl_error.rb
137
155
  - lib/bali/error.rb
@@ -142,11 +160,13 @@ files:
142
160
  - lib/bali/rails/active_record.rb
143
161
  - lib/bali/railtie.rb
144
162
  - lib/bali/role.rb
163
+ - lib/bali/rspec/able_to_matcher.rb
145
164
  - lib/bali/rule.rb
146
165
  - lib/bali/ruler.rb
147
166
  - lib/bali/rules.rb
148
167
  - lib/bali/statics/active_record.rb
149
168
  - lib/bali/statics/authorizer.rb
169
+ - lib/bali/statics/scope_ruler.rb
150
170
  - lib/bali/tasks/bali/print_rules.rake
151
171
  - lib/bali/version.rb
152
172
  - lib/generators/rails/USAGE
@@ -1,13 +0,0 @@
1
- module Bali::Authorizer
2
- def self.included(base)
3
- base.extend Bali::Statics::Authorizer
4
- end
5
-
6
- def can?(actor_or_roles, operation = nil)
7
- self.class.can?(actor_or_roles, operation, self)
8
- end
9
-
10
- def cant?(actor_or_roles, operation = nil)
11
- self.class.cant?(actor_or_roles, operation, self)
12
- end
13
- end