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: e077e7417f7fbedd11628a5e7afa21c6f621b97b
4
- data.tar.gz: 7b2791942057e4952c06215bed4dc10db96f4a13
3
+ metadata.gz: 2bba7422c892bf66b8115b8945c6aea7b556ba96
4
+ data.tar.gz: 3e5978c3cf8468a93b4355a207f50162fd819a3d
5
5
  SHA512:
6
- metadata.gz: 201b72229f19b2a3dc03ee3e6110463f25ad9b1295b245cb90564b1f15ecb73d4f8e7f22880d8b353ab8669f594e7c386bb9bf774cc8ed70e461e8824669a579
7
- data.tar.gz: 92e695b28d7d0e4aaa80d3adb96b10248f4a3a7fb222ee3c48b406efe30cc5b2a0679e1cc336b52113dda3a6b6f037356bc6c5b826a2316198e279d36b518920
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.4...master
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
@@ -41,5 +41,5 @@ I18n.load_path << File.expand_path(
41
41
  #
42
42
  # @since 1.0.0
43
43
  #
44
- # @version 1.0.4
44
+ # @version 1.0.5
45
45
  module ActiveInteraction end
@@ -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.full_messages.each do |message|
98
- errors.add(:base, message) unless errors.added?(:base, message)
99
- end
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.
@@ -5,5 +5,5 @@ module ActiveInteraction
5
5
  # The version number.
6
6
  #
7
7
  # @return [Gem::Version]
8
- VERSION = Gem::Version.new('1.0.4')
8
+ VERSION = Gem::Version.new('1.0.5')
9
9
  end
@@ -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
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-11 00:00:00.000000000 Z
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.1.11
229
+ rubygems_version: 2.2.0
230
230
  signing_key:
231
231
  specification_version: 4
232
232
  summary: Manage application specific business logic.