active_interaction 1.0.4 → 1.0.5

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