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 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: