active_interaction 1.0.4 → 1.0.5
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bba7422c892bf66b8115b8945c6aea7b556ba96
|
4
|
+
data.tar.gz: 3e5978c3cf8468a93b4355a207f50162fd819a3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf7010af04046f64237456948ec72b93daf4d18e112b4390cbf2117e25babe24513d8c9802f795a1c892a43d62e2f3b7ba1bb28f22c21afa30699f899df1112f
|
7
|
+
data.tar.gz: 5fe9bc9e56874a63aca92dd7b5bf43bb24c94c8049ffd51984c5bb3c53eb610f8381b95ccf126008dd0fe57eca14a4da47709494ed8237b608176fd37d0b7f20
|
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
# [Master][]
|
2
2
|
|
3
|
+
# [1.0.5][] (2014-02-25)
|
4
|
+
|
5
|
+
- Rollback database changes when `compose` fails.
|
6
|
+
|
3
7
|
# [1.0.4][] (2014-02-11)
|
4
8
|
|
5
9
|
- Add translations to the gem specification.
|
6
10
|
|
7
|
-
# [1.0.3][] (2014-02-11)
|
11
|
+
# ~~[1.0.3][] (2014-02-11)~~
|
8
12
|
|
9
13
|
- Fix a bug that caused invalid strings to be parsed as `nil` instead of
|
10
14
|
raising an error when `Time.zone` was set.
|
@@ -74,7 +78,7 @@
|
|
74
78
|
|
75
79
|
- Re-release. Forgot to merge into master.
|
76
80
|
|
77
|
-
# [0.6.0][] (2013-11-14)
|
81
|
+
# ~~[0.6.0][] (2013-11-14)~~
|
78
82
|
|
79
83
|
- **Error class now end with `Error`.**
|
80
84
|
- **By default, strip unlisted keys from hashes. To retain the old behavior,
|
@@ -135,11 +139,12 @@
|
|
135
139
|
|
136
140
|
- Correct gemspec dependencies on activemodel.
|
137
141
|
|
138
|
-
# [0.1.0][] (2013-07-12)
|
142
|
+
# ~~[0.1.0][] (2013-07-12)~~
|
139
143
|
|
140
144
|
- Initial release.
|
141
145
|
|
142
|
-
[master]: https://github.com/orgsync/active_interaction/compare/v1.0.
|
146
|
+
[master]: https://github.com/orgsync/active_interaction/compare/v1.0.5...master
|
147
|
+
[1.0.5]: https://github.com/orgsync/active_interaction/compare/v1.0.4...v1.0.5
|
143
148
|
[1.0.4]: https://github.com/orgsync/active_interaction/compare/v1.0.3...v1.0.4
|
144
149
|
[1.0.3]: https://github.com/orgsync/active_interaction/compare/v1.0.2...v1.0.3
|
145
150
|
[1.0.2]: https://github.com/orgsync/active_interaction/compare/v1.0.1...v1.0.2
|
data/lib/active_interaction.rb
CHANGED
@@ -3,11 +3,15 @@
|
|
3
3
|
begin
|
4
4
|
require 'active_record'
|
5
5
|
rescue LoadError
|
6
|
+
# rubocop:disable Documentation
|
6
7
|
module ActiveRecord
|
7
|
-
|
8
|
+
Rollback = Class.new(ActiveInteraction::Error)
|
9
|
+
|
8
10
|
class Base
|
9
11
|
def self.transaction(*)
|
10
12
|
yield
|
13
|
+
rescue Rollback
|
14
|
+
# rollbacks are silently swallowed
|
11
15
|
end
|
12
16
|
end
|
13
17
|
end
|
@@ -94,13 +98,19 @@ module ActiveInteraction
|
|
94
98
|
begin
|
95
99
|
execute
|
96
100
|
rescue Interrupt => interrupt
|
97
|
-
interrupt.outcome.errors
|
98
|
-
|
99
|
-
|
101
|
+
merge_errors_onto_base(interrupt.outcome.errors)
|
102
|
+
|
103
|
+
raise ActiveRecord::Rollback
|
100
104
|
end
|
101
105
|
end
|
102
106
|
end
|
103
107
|
|
108
|
+
def merge_errors_onto_base(new_errors)
|
109
|
+
new_errors.full_messages.each do |message|
|
110
|
+
errors.add(:base, message) unless errors.added?(:base, message)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
104
114
|
# @return [Object]
|
105
115
|
#
|
106
116
|
# @raise [InvalidInteractionError] If there are validation errors.
|
@@ -8,6 +8,14 @@ describe ActiveRecord::Base do
|
|
8
8
|
expect { described_class.transaction }.to raise_error LocalJumpError
|
9
9
|
end
|
10
10
|
|
11
|
+
it 'silently rescues ActiveRecord::Rollback' do
|
12
|
+
expect do
|
13
|
+
described_class.transaction do
|
14
|
+
fail ActiveRecord::Rollback
|
15
|
+
end
|
16
|
+
end.to_not raise_error
|
17
|
+
end
|
18
|
+
|
11
19
|
context 'with a block' do
|
12
20
|
it 'yields to the block' do
|
13
21
|
expect { |b| described_class.transaction(&b) }.to yield_with_no_args
|
@@ -162,6 +170,26 @@ describe ActiveInteraction::Runnable do
|
|
162
170
|
end
|
163
171
|
end
|
164
172
|
|
173
|
+
context 'with an execute where composition fails' do
|
174
|
+
before do
|
175
|
+
CompositionFailure = Class.new(ActiveInteraction::Base) do
|
176
|
+
validate { errors.add(:base) }
|
177
|
+
def execute; end
|
178
|
+
end
|
179
|
+
|
180
|
+
klass.send(:define_method, :execute) { compose(CompositionFailure) }
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'rolls back the transaction' do
|
184
|
+
instance = klass.new
|
185
|
+
|
186
|
+
allow(instance).to receive(:raise)
|
187
|
+
instance.send(:run)
|
188
|
+
expect(instance).to have_received(:raise)
|
189
|
+
.with(ActiveRecord::Rollback)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
165
193
|
context 'with invalid post-execution state' do
|
166
194
|
before do
|
167
195
|
klass.class_exec do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_interaction
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Lasseigne
|
@@ -9,124 +9,124 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3'
|
21
|
-
- -
|
21
|
+
- - <
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: '5'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - '>='
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '3'
|
31
|
-
- -
|
31
|
+
- - <
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '5'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: bundler
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.5'
|
41
41
|
type: :development
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.5'
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: coveralls
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.7'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0.7'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: guard-rspec
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '4.2'
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
71
|
version_requirements: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '4.2'
|
76
76
|
- !ruby/object:Gem::Dependency
|
77
77
|
name: rake
|
78
78
|
requirement: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.1'
|
83
83
|
type: :development
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '10.1'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: rdoc
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '4.1'
|
97
97
|
type: :development
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '4.1'
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: guard-rubocop
|
106
106
|
requirement: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.0'
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '1.0'
|
118
118
|
- !ruby/object:Gem::Dependency
|
119
119
|
name: yard
|
120
120
|
requirement: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0.8'
|
125
125
|
type: :development
|
126
126
|
prerelease: false
|
127
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ~>
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0.8'
|
132
132
|
description: Manage application specific business logic.
|
@@ -137,6 +137,10 @@ executables: []
|
|
137
137
|
extensions: []
|
138
138
|
extra_rdoc_files: []
|
139
139
|
files:
|
140
|
+
- CHANGELOG.md
|
141
|
+
- LICENSE.txt
|
142
|
+
- README.md
|
143
|
+
- lib/active_interaction.rb
|
140
144
|
- lib/active_interaction/base.rb
|
141
145
|
- lib/active_interaction/concerns/active_modelable.rb
|
142
146
|
- lib/active_interaction/concerns/hashable.rb
|
@@ -159,9 +163,9 @@ files:
|
|
159
163
|
- lib/active_interaction/filters/string_filter.rb
|
160
164
|
- lib/active_interaction/filters/symbol_filter.rb
|
161
165
|
- lib/active_interaction/filters/time_filter.rb
|
166
|
+
- lib/active_interaction/locale/en.yml
|
162
167
|
- lib/active_interaction/modules/validation.rb
|
163
168
|
- lib/active_interaction/version.rb
|
164
|
-
- lib/active_interaction.rb
|
165
169
|
- spec/active_interaction/base_spec.rb
|
166
170
|
- spec/active_interaction/concerns/active_modelable_spec.rb
|
167
171
|
- spec/active_interaction/concerns/hashable_spec.rb
|
@@ -202,10 +206,6 @@ files:
|
|
202
206
|
- spec/support/concerns.rb
|
203
207
|
- spec/support/filters.rb
|
204
208
|
- spec/support/interactions.rb
|
205
|
-
- CHANGELOG.md
|
206
|
-
- LICENSE.txt
|
207
|
-
- README.md
|
208
|
-
- lib/active_interaction/locale/en.yml
|
209
209
|
homepage: http://orgsync.github.io/active_interaction/
|
210
210
|
licenses:
|
211
211
|
- MIT
|
@@ -216,17 +216,17 @@ require_paths:
|
|
216
216
|
- lib
|
217
217
|
required_ruby_version: !ruby/object:Gem::Requirement
|
218
218
|
requirements:
|
219
|
-
- -
|
219
|
+
- - '>='
|
220
220
|
- !ruby/object:Gem::Version
|
221
221
|
version: 1.9.3
|
222
222
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
223
|
requirements:
|
224
|
-
- -
|
224
|
+
- - '>='
|
225
225
|
- !ruby/object:Gem::Version
|
226
226
|
version: '0'
|
227
227
|
requirements: []
|
228
228
|
rubyforge_project:
|
229
|
-
rubygems_version: 2.
|
229
|
+
rubygems_version: 2.2.0
|
230
230
|
signing_key:
|
231
231
|
specification_version: 4
|
232
232
|
summary: Manage application specific business logic.
|