transdeal 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 343bbf64be37c5dacd0a0f4236451119f8d6be6a
4
- data.tar.gz: 082635fa0da2864433a6b9cfb1116d9ff83c8d2f
3
+ metadata.gz: 0495a222b802e45941f0bba502cd5d27f3661341
4
+ data.tar.gz: 76c740368223f9fe1ec9c682c41c321dd1e45286
5
5
  SHA512:
6
- metadata.gz: efeb1ef09e5cd151314ddcd16e48290244b284e143067496c63ebd6d56ed6ef983a87461dadfbac31204a26b93f938faf40b8a9042bcf8da363fb9b79410440d
7
- data.tar.gz: e600ad2bb96985b51833c0ec5b6dcd8a95c73d84df93daf2bfdc44bcea6998dd66a229fdcf2156e541a784eab1d837a131077987601a82ec1b050bbc32ed047c
6
+ metadata.gz: 9a36463dc78bddd735817a2c886c68979a95b9ff9f81ec7849109cba1eee0cee5dd699b609e02a6b24a0fb108ada2a2528c585fa1312900e57bed7a10a247430
7
+ data.tar.gz: 8b5ced3e33836a3692d6b0efd3bfaa0b7232c09224081178b3fdd4d7bbe314ff5d5c69957bcce55eab78faaa7042ffba2a3315d159361b1f00d77f8f6903a058
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- transdeal (0.1.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
- bundler (~> 1.16)
55
- pry (~> 0.10)
56
- rake (~> 10.0)
57
- rspec (~> 3.0)
58
- sqlite3
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
@@ -11,29 +11,24 @@ module Transdeal
11
11
 
12
12
  class << self
13
13
  def configure *args, &λ
14
- (@🏺 ||= []).push \
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
- 🏺!(⚑) if ⚑
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 hash_to_proc any
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 any[:receiver]
51
- when String, Symbol then Kernel.const_get(any[:receiver].to_s.camelize)
52
- else any[:receiver]
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
- [any[:method], *%i|store run perform_async perform call []|].detect do |m|
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
@@ -1,3 +1,3 @@
1
1
  module Transdeal
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -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.16'
32
- spec.add_development_dependency 'sqlite3'
33
- spec.add_development_dependency 'rake', '~> 10.0'
34
- spec.add_development_dependency 'rspec', '~> 3.0'
35
- spec.add_development_dependency 'pry', '~> 0.10'
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.1.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.16'
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.16'
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: '0'
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: '0'
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.0'
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.0'
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.0'
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.0'
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.10'
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.10'
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: