clean-policy 0.3.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb1734db9ce343c7fcb667d10be82ee205b3756f072670baf446a8fce1294286
4
- data.tar.gz: 54c2c0038f3129351cd8208f3217c936f7b8acb7cb9db4ebdc9db9b6ee39816c
3
+ metadata.gz: c52178a93af24dbc3829a8e972a1185269fd9a2c6b7ff008d1a1ce426e3f5a87
4
+ data.tar.gz: 80bacbfd42085a5f06cf4ed2c66aa9d8a603924f510ccd1a3841495a5ca38e17
5
5
  SHA512:
6
- metadata.gz: 24f6b064aac3dfbd6292e6b1116a0b209b432a5315f0f8239c2a84c4a3fa36d4bdb0c6b4fa79551ab9911acf501bf1cd459f93b2305c37dab7f920879e29895a
7
- data.tar.gz: df71154dfe27bf6286fe9551bca352a367cbbeaecb1fcc341bd6a8cc031d2f0cb1d38c44fc971e70c5c40d1caffc4aaca2239a49835743df809745cd71d5c80a
6
+ metadata.gz: 9542c98fa7de7dfc648a1e8642aed26dfd8b78bcf64c75ef8c46c5a51f0f5a7c600a7598c7f330d03abc510b33a7735d562bfafe64cce344883bababbf4170ba
7
+ data.tar.gz: ab6ba29cc8581c2f499676c5f75269955c76e00d2a12e39183d9b28a4ddd03655377ad15ec354925bbb0d86d12c4f165bbafc2fa7985461a3978d19e399d3343
data/.version CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
data/lib/clean-policy.rb CHANGED
@@ -1,6 +1,3 @@
1
- require_relative './clean-policy/base'
2
- require_relative './clean-policy/error'
3
- require_relative './clean-policy/proxy'
4
- require_relative './clean-policy/global'
5
-
6
- # require_relative './adapters/lux' if defined?(Lux)
1
+ for lib in %w(base error proxy global adapters/controller adapters/model)
2
+ require_relative './clean-policy/%s' % lib
3
+ end
@@ -0,0 +1,46 @@
1
+ klass =
2
+ if defined? Rails
3
+ ActiveController::Base
4
+ elsif defined? Lux
5
+ Lux::Controller
6
+ end
7
+
8
+ if klass
9
+ klass.class_eval do
10
+ def authorize *args, &block
11
+ opts = {}
12
+
13
+ @_is_policy_authorized = true
14
+
15
+ raise ArgumentErorr, 'authorize argument[s] not provided' unless args[0]
16
+
17
+ # authorize true
18
+ return if args[0].is_a? TrueClass
19
+
20
+ if !args[1]
21
+ # authorize :admin?
22
+ opts[:action] = args.first
23
+ elsif args[2]
24
+ # authorize @model, write?, CustomClass
25
+ # authorize @model, write?, class: CustomClass
26
+ opts[:model] = args.first
27
+ opts[:action] = args[1]
28
+ opts[:class] = args[2].is_a?(Hash) ? args[2][:class] : args[2]
29
+ else
30
+ # authorize @model, write?
31
+ opts[:model] = args.first
32
+ opts[:action] = args[1]
33
+ end
34
+
35
+ # covert all authorize actions to bang actions (fail unless true)
36
+ action = opts.delete(:action).to_s.sub('?', '!')
37
+
38
+ # do it
39
+ Policy(opts).send(action, &block)
40
+ end
41
+
42
+ def is_authorized?
43
+ !!@_is_policy_authorized
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,23 @@
1
+ class Policy
2
+ module ModelAdapter
3
+ extend self
4
+
5
+ def can user=nil, model=nil
6
+ klass = "#{self.class}Policy"
7
+ klass = Object.const_defined?(klass) ? klass.constantize : ModelPolicy
8
+ Policy(model: model || self, user: user, class: klass)
9
+ end
10
+ end
11
+ end
12
+
13
+ if defined? Rails
14
+ ActiveModel::Base.include Policy::ModelAdapter
15
+ elsif defined? Sequel
16
+ class Sequel::Model
17
+ module InstanceMethods
18
+ def can user=nil
19
+ Policy::ModelAdapter.can user, self
20
+ end
21
+ end
22
+ end
23
+ end
@@ -38,7 +38,7 @@ class Policy
38
38
  raise Error, 'Access disabled in policy'
39
39
  rescue Policy::Error => error
40
40
  message = error.message
41
- message += " - #{self.class}.#{@action}" if defined?(Lux) && Lux.config(:dump_errors)
41
+ message += " - #{self.class}.#{@action}"
42
42
 
43
43
  if block
44
44
  block.call(message)
@@ -1,3 +1,5 @@
1
+ # accepts: user:, model:, class:
2
+ # accepts: @model, class:, user:
1
3
  def Policy *args
2
4
  opts = args.first.dup
3
5
 
@@ -10,7 +12,8 @@ def Policy *args
10
12
 
11
13
  klass =
12
14
  if model
13
- opts[:class] || ('%s_policy' % model.class).classify.constantize
15
+ klass = model.is_a?(Symbol) ? model : model.class
16
+ opts[:class] || ('%s_policy' % klass).classify.constantize
14
17
  else
15
18
  ApplicationPolicy
16
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clean-policy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-07 00:00:00.000000000 Z
11
+ date: 2019-10-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Clean, simple explicit and strait-forward policy definitions.
14
14
  email: reic.dino@gmail.com
@@ -17,8 +17,9 @@ extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
19
  - "./.version"
20
- - "./lib/adapters/lux.rb"
21
20
  - "./lib/clean-policy.rb"
21
+ - "./lib/clean-policy/adapters/controller.rb"
22
+ - "./lib/clean-policy/adapters/model.rb"
22
23
  - "./lib/clean-policy/base.rb"
23
24
  - "./lib/clean-policy/error.rb"
24
25
  - "./lib/clean-policy/global.rb"
data/lib/adapters/lux.rb DELETED
@@ -1,16 +0,0 @@
1
- # # modify base policy
2
- # # after first call in current scope :is_policy_authorized will be set to true
3
- # # check with `Policy.is_authorized?`, resets on every page load
4
- # class Policy
5
- # def before action
6
- # Lux.current.var[:is_policy_authorized] = true if defined?(Lux)
7
- # end
8
-
9
- # def self.is_authorized?
10
- # Lux.current.var[:is_policy_authorized]
11
- # end
12
- # end
13
-
14
- # Lux::Application.before do
15
- # Lux.current.var[:is_policy_authorized] = false
16
- # end