authorized_transaction 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a61369cc8e832baee931ff87c611c90147efc38a9db24cc75a779e97cc47c92
4
- data.tar.gz: ce349d060ebb6eb9b239699d293c08340e7f71519d944830b85d1f88da7c3f53
3
+ metadata.gz: a0bdbd2a2fc11dfa9e747b42ac807700f0c4656e9bdd328dfdb0bf3877c04bda
4
+ data.tar.gz: 7379aed3cf7449614cdbaca94eb60ae61b00c40134cab9213097d7d1c970d9b7
5
5
  SHA512:
6
- metadata.gz: f7d30b70db64e01ebfa4c5c62603bcbddba90a8ccbd0bfe9af2350b23b103bf11647530fa6e4d530cb166f23d8d45f1a8151e012f6c2a89faf825b4bbfd20dfd
7
- data.tar.gz: 741ec7d1d10449d903c0f9ffea37fad0e6eeb48762e357c549adffbd82f2a9e3b86f29bbfa9e81a9b1e410517702a1f2f246af86b2ffc91b03522acadca9fee8
6
+ metadata.gz: fa48ac71bcaf57ce84bb5e50bcbd9ca5fbc44458332f68c2e04311e0ffad69b2d8be9fea55c884816037b7fc42c238e2bbcfc118f0cb8193b694ab9f4c5b002c
7
+ data.tar.gz: 2373918ea349d71d68c13405b06ec890166fd89538a521a821f951e9d303433bbb2c2e5372dc55c53748e1641c3156b68bdecffd8ecb6b327868494b2ada5170
@@ -1,8 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0
4
+
5
+ - Change `AuthorizedTransaction.configure` to return self if there is no block
6
+ - Change `AuthorizedTransaction.configure` execution in context of the controller
7
+ - Change all settings `*_proc` execution in context of the controller
8
+ - Add `transaction_proc` to change how a transaction is created via configuration
9
+ - Add tests
10
+ - Add examples and configuration to README.md
11
+ - Add explicit notion of _not_ depending on `cancan(can)` to README.md
12
+ - Remove dependency on `activerecord`
13
+
3
14
  ## 0.2.0
4
15
 
5
- - Add configuration via `ResourceAllowHeader.configure`
16
+ - Allow for configuration via `AuthorizedTransaction.configure`
6
17
 
7
18
  ## 0.1.0
8
19
 
@@ -1,25 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- authorized_transaction (0.2.0)
5
- activerecord (>= 4.0.0)
4
+ authorized_transaction (0.3.0)
6
5
  activesupport (>= 4.0.0)
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
10
9
  specs:
11
- activemodel (5.2.2)
12
- activesupport (= 5.2.2)
13
- activerecord (5.2.2)
14
- activemodel (= 5.2.2)
15
- activesupport (= 5.2.2)
16
- arel (>= 9.0)
17
10
  activesupport (5.2.2)
18
11
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
12
  i18n (>= 0.7, < 2)
20
13
  minitest (~> 5.1)
21
14
  tzinfo (~> 1.1)
22
- arel (9.0.0)
23
15
  concurrent-ruby (1.1.4)
24
16
  i18n (1.5.3)
25
17
  concurrent-ruby (~> 1.0)
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Gem Version](https://badge.fury.io/rb/authorized_transaction.svg)](https://badge.fury.io/rb/authorized_transaction)
5
5
  [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)
6
6
 
7
- Authorize a certain block with cancan
7
+ Authorize a certain block with cancan(can), or any other authorization framework that exposes a method `can?`.
8
8
 
9
9
  ## Installation
10
10
 
@@ -66,17 +66,38 @@ class Book::SignatureController < ApiController
66
66
  end
67
67
  ```
68
68
 
69
+ By default it will use `ActiveRecord::Base.transaction` to start the transaction, but you may override this:
70
+ ```ruby
71
+ AuthorizedTransaction.configure do
72
+ self.transaction_proc = proc { || CreateDatabaseTransaction.call { yield } }
73
+ end
74
+
75
+ :authorize_proc, :implicit_action_proc,
76
+ ```
77
+
78
+ The action passed to `authorize_proc` or `can?` is configured by `implicit_action_key` and defaults to `action`:
79
+ ```ruby
80
+ AuthorizedTransaction.configure.implicit_action_key = :authorized_action
81
+ ```
82
+
69
83
  ### Configuration
70
84
 
85
+ - By default it uses `can?` as defined on your controller, but you can configure this via `authorize_proc`.
86
+ - By default it uses the `implicit_action` as defined by `implicit_action_key`, as written above, to determine the
87
+ implicit action when it's not given. You can also configure these via `implicit_action_key` (fetching from `params`)
88
+ or `implicit_action_proc` to change completely.
89
+
71
90
  In an initializer you can set procs in order to change the default behaviour:
72
91
 
73
92
  ```ruby
74
- AuthorizedTransaction.configure do |this|
75
- this.implicit_action_proc = proc { |controller| controller.action_name.to_sym }
76
- this.authorize_proc = proc { |action, resource, controller| action == :whatever || controller.can?(action, resource) }
93
+ AuthorizedTransaction.configure do
94
+ self.implicit_action_proc = proc { |controller| controller.action_name.to_sym }
95
+ self.authorize_proc = proc { |action, resource, controller| action == :whatever || controller.can?(action, resource) }
77
96
  end
78
97
  ```
79
98
 
99
+ Other configuration options are listed above.
100
+
80
101
  ## Development
81
102
 
82
103
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can
@@ -36,8 +36,6 @@ Gem::Specification.new do |spec|
36
36
  spec.require_paths = ["lib"]
37
37
 
38
38
  spec.add_dependency 'activesupport', '>= 4.0.0'
39
- spec.add_dependency 'activerecord', '>= 4.0.0'
40
-
41
39
  spec.add_development_dependency "bundler", "~> 2.0"
42
40
  spec.add_development_dependency "rake", "~> 10.0"
43
41
  spec.add_development_dependency "minitest", "~> 5.0"
@@ -1,20 +1,19 @@
1
1
  require "authorized_transaction/version"
2
2
 
3
- require 'active_record'
4
3
  require 'active_support/concern'
5
4
  require 'active_support/core_ext/module/attribute_accessors'
6
5
 
7
6
  module AuthorizedTransaction
8
7
  extend ActiveSupport::Concern
9
- class Error < StandardError; end
8
+ class Error < RuntimeError; end
10
9
 
11
- mattr_accessor :authorize_proc, :implicit_action_proc, :implicit_action_key
10
+ mattr_accessor :authorize_proc, :implicit_action_proc, :implicit_action_key, :transaction_proc
12
11
 
13
- def self.configure
14
- yield self
12
+ def self.configure(&block)
13
+ block_given? ? instance_exec(self, &block) : self
15
14
  end
16
15
 
17
- class TransactionUnauthorized < RuntimeError
16
+ class TransactionUnauthorized < Error
18
17
  attr_reader :action, :resource
19
18
 
20
19
  def initialize(action, resource)
@@ -49,7 +48,7 @@ module AuthorizedTransaction
49
48
  # end
50
49
  #
51
50
  def authorized_transaction(action: implicit_action)
52
- ActiveRecord::Base.transaction do
51
+ create_transaction do
53
52
  resource = yield
54
53
  authorize! action, resource
55
54
  resource
@@ -68,15 +67,24 @@ module AuthorizedTransaction
68
67
 
69
68
  def implicit_action
70
69
  if implicit_action_proc.respond_to?(:call)
71
- return implicit_action_proc(self)
70
+ return instance_exec(self, &implicit_action_proc)
72
71
  end
73
72
 
74
73
  params[implicit_action_key || :action]
75
74
  end
76
75
 
76
+ def create_transaction(&block)
77
+ if transaction_proc.respond_to?(:call)
78
+ transaction_proc.call(&block)
79
+ else
80
+ # Expect active record to be loaded by now
81
+ ActiveRecord::Base.transaction(&block)
82
+ end
83
+ end
84
+
77
85
  def authorized?(action, resource)
78
86
  if authorize_proc.respond_to?(:call)
79
- return authorize_proc(action, resource, self)
87
+ return instance_exec(action, resource, self, &authorize_proc)
80
88
  end
81
89
 
82
90
  can?(action, resource)
@@ -1,3 +1,3 @@
1
1
  module AuthorizedTransaction
2
- VERSION = "0.2.0"
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authorized_transaction
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derk-Jan Karrenbeld
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-14 00:00:00.000000000 Z
11
+ date: 2019-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 4.0.0
27
- - !ruby/object:Gem::Dependency
28
- name: activerecord
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 4.0.0
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 4.0.0
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement