transdeal 0.1.0 → 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.
- checksums.yaml +4 -4
- data/Gemfile.lock +8 -6
- data/lib/transdeal.rb +26 -19
- data/lib/transdeal/version.rb +1 -1
- data/transdeal.gemspec +6 -5
- metadata +27 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0495a222b802e45941f0bba502cd5d27f3661341
|
4
|
+
data.tar.gz: 76c740368223f9fe1ec9c682c41c321dd1e45286
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a36463dc78bddd735817a2c886c68979a95b9ff9f81ec7849109cba1eee0cee5dd699b609e02a6b24a0fb108ada2a2528c585fa1312900e57bed7a10a247430
|
7
|
+
data.tar.gz: 8b5ced3e33836a3692d6b0efd3bfaa0b7232c09224081178b3fdd4d7bbe314ff5d5c69957bcce55eab78faaa7042ffba2a3315d159361b1f00d77f8f6903a058
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
transdeal (0.
|
4
|
+
transdeal (0.2.0)
|
5
5
|
activerecord (~> 3)
|
6
6
|
|
7
7
|
GEM
|
@@ -19,6 +19,7 @@ GEM
|
|
19
19
|
i18n (~> 0.6, >= 0.6.4)
|
20
20
|
multi_json (~> 1.0)
|
21
21
|
arel (3.0.3)
|
22
|
+
awesome_print (1.8.0)
|
22
23
|
builder (3.0.4)
|
23
24
|
coderay (1.1.2)
|
24
25
|
concurrent-ruby (1.0.5)
|
@@ -51,11 +52,12 @@ PLATFORMS
|
|
51
52
|
ruby
|
52
53
|
|
53
54
|
DEPENDENCIES
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
awesome_print (~> 1)
|
56
|
+
bundler (~> 1)
|
57
|
+
pry (~> 0)
|
58
|
+
rake (~> 10)
|
59
|
+
rspec (~> 3)
|
60
|
+
sqlite3 (~> 1)
|
59
61
|
transdeal!
|
60
62
|
|
61
63
|
BUNDLED WITH
|
data/lib/transdeal.rb
CHANGED
@@ -11,29 +11,24 @@ module Transdeal
|
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def configure *args, &λ
|
14
|
-
(@🏺 ||= []).
|
15
|
-
*args.map do |backend|
|
16
|
-
case backend
|
17
|
-
when Hash then hash_to_proc(backend)
|
18
|
-
when Symbol then hash_to_proc(receiver: backend)
|
19
|
-
when ->(any) { any.respond_to(:to_proc) } then any.to_proc
|
20
|
-
else hash_to_proc(receiver: backend)
|
21
|
-
end
|
22
|
-
end.tap { |🏺| 🏺 << λ if λ }
|
14
|
+
(@🏺 ||= []).concat(procify(λ, *args))
|
23
15
|
end
|
24
16
|
|
25
|
-
def transdeal *objects, &λ
|
17
|
+
def transdeal *objects, skip_global_callbacks: false, callback: nil, &λ
|
26
18
|
⚑ = nil
|
27
19
|
ActiveRecord::Base.transaction do
|
28
20
|
begin
|
29
21
|
λ[]
|
30
|
-
rescue
|
31
|
-
⚑ = objects
|
22
|
+
rescue => e
|
23
|
+
⚑ = {exception: e, data: objects}
|
32
24
|
raise
|
33
25
|
end
|
34
26
|
end
|
35
27
|
ensure
|
36
|
-
|
28
|
+
if ⚑
|
29
|
+
🏺!(⚑) unless skip_global_callbacks
|
30
|
+
procify(callback).each { |λ| λ.(⚑) }
|
31
|
+
end
|
37
32
|
end
|
38
33
|
alias_method :transaction, :transdeal
|
39
34
|
|
@@ -45,20 +40,32 @@ module Transdeal
|
|
45
40
|
|
46
41
|
private
|
47
42
|
|
48
|
-
def
|
43
|
+
def procify(*args)
|
44
|
+
(args.size == 1 && args.first.is_a?(Array) ? args.first : args).map do |backend|
|
45
|
+
case backend
|
46
|
+
when NilClass then nil
|
47
|
+
when Hash then hash_to_proc(backend)
|
48
|
+
when Symbol then hash_to_proc(receiver: backend)
|
49
|
+
when ->(be) { be.respond_to?(:to_proc) } then backend.to_proc
|
50
|
+
else hash_to_proc(receiver: backend)
|
51
|
+
end
|
52
|
+
end.compact
|
53
|
+
end
|
54
|
+
|
55
|
+
def hash_to_proc receiver:, method: nil
|
49
56
|
receiver =
|
50
|
-
case
|
51
|
-
when String, Symbol then Kernel.const_get(
|
52
|
-
else
|
57
|
+
case receiver
|
58
|
+
when String, Symbol then Kernel.const_get(receiver.to_s.camelize)
|
59
|
+
else receiver
|
53
60
|
end
|
54
61
|
|
55
62
|
method =
|
56
|
-
[
|
63
|
+
[method, *%i|store run perform_async perform call []|].compact.detect do |m|
|
57
64
|
receiver.respond_to?(m)
|
58
65
|
end
|
59
66
|
|
60
67
|
method.nil? ?
|
61
|
-
raise(InvalidBackend.new(any)) : receiver.method(method)
|
68
|
+
raise(InvalidBackend.new(any)) : receiver.method(method).to_proc
|
62
69
|
end
|
63
70
|
end
|
64
71
|
end
|
data/lib/transdeal/version.rb
CHANGED
data/transdeal.gemspec
CHANGED
@@ -28,9 +28,10 @@ Gem::Specification.new do |spec|
|
|
28
28
|
|
29
29
|
spec.add_dependency 'activerecord', '~> 3'
|
30
30
|
|
31
|
-
spec.add_development_dependency 'bundler', '~> 1
|
32
|
-
spec.add_development_dependency 'sqlite3'
|
33
|
-
spec.add_development_dependency 'rake', '~> 10
|
34
|
-
spec.add_development_dependency 'rspec', '~> 3
|
35
|
-
spec.add_development_dependency '
|
31
|
+
spec.add_development_dependency 'bundler', '~> 1'
|
32
|
+
spec.add_development_dependency 'sqlite3', '~> 1'
|
33
|
+
spec.add_development_dependency 'rake', '~> 10'
|
34
|
+
spec.add_development_dependency 'rspec', '~> 3'
|
35
|
+
spec.add_development_dependency 'awesome_print', '~> 1'
|
36
|
+
spec.add_development_dependency 'pry', '~> 0'
|
36
37
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transdeal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksei Matiushkin
|
@@ -30,70 +30,84 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1
|
33
|
+
version: '1'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1
|
40
|
+
version: '1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: sqlite3
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '10
|
61
|
+
version: '10'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '10
|
68
|
+
version: '10'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3
|
75
|
+
version: '3'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '3
|
82
|
+
version: '3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: awesome_print
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: pry
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0
|
103
|
+
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0
|
110
|
+
version: '0'
|
97
111
|
description: This library is supposed to simplify rolling back transactions, preserving
|
98
112
|
some data still stored.
|
99
113
|
email:
|