activeinteractor 1.1.2 → 1.1.6

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -1
  3. data/README.md +10 -29
  4. data/lib/active_interactor/version.rb +41 -3
  5. data/spec/active_interactor/base_spec.rb +1 -0
  6. data/spec/active_interactor/config_spec.rb +1 -0
  7. data/spec/active_interactor/context/base_spec.rb +16 -0
  8. data/spec/active_interactor/error_spec.rb +3 -1
  9. data/spec/active_interactor/interactor/worker_spec.rb +3 -0
  10. data/spec/active_interactor/organizer/base_spec.rb +18 -1
  11. data/spec/active_interactor/organizer/interactor_interface_collection_spec.rb +2 -0
  12. data/spec/active_interactor/organizer/interactor_interface_spec.rb +1 -0
  13. data/spec/active_interactor/version_spec.rb +119 -0
  14. data/spec/active_interactor_spec.rb +0 -6
  15. data/spec/integration/a_basic_organizer_spec.rb +7 -0
  16. data/spec/integration/a_failing_interactor_spec.rb +1 -0
  17. data/spec/integration/an_interactor_with_after_perform_callbacks_spec.rb +1 -0
  18. data/spec/integration/an_interactor_with_after_rollback_callbacks_spec.rb +1 -0
  19. data/spec/integration/an_interactor_with_an_existing_context_class_spec.rb +1 -0
  20. data/spec/integration/an_interactor_with_before_perform_callbacks_spec.rb +1 -0
  21. data/spec/integration/an_interactor_with_before_rollback_callbacks_spec.rb +1 -0
  22. data/spec/integration/an_interactor_with_validations_on_called_spec.rb +1 -0
  23. data/spec/integration/an_interactor_with_validations_on_calling_spec.rb +1 -0
  24. data/spec/integration/an_interactor_with_validations_spec.rb +2 -0
  25. data/spec/integration/an_organizer_with_after_each_callbacks_spec.rb +1 -0
  26. data/spec/integration/an_organizer_with_before_each_callbacks_spec.rb +1 -0
  27. data/spec/integration/an_organizer_with_conditionally_organized_interactors_spec.rb +14 -2
  28. data/spec/integration/an_organizer_with_options_callbacks_spec.rb +1 -0
  29. data/spec/spec_helper.rb +3 -20
  30. data/spec/support/coverage.rb +50 -0
  31. data/spec/support/shared_examples/a_class_with_interactor_callback_methods_example.rb +9 -1
  32. data/spec/support/shared_examples/a_class_with_interactor_context_methods_example.rb +2 -0
  33. data/spec/support/shared_examples/a_class_with_organizer_callback_methods_example.rb +3 -0
  34. metadata +44 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95219bec0983832c0a18bb6bed47e3cbfd26b2d48e0a28431663372304707824
4
- data.tar.gz: 407e2e95177723d06c36535ec9a0bc705b3684ff2d7c981e41e61bd87cbb8343
3
+ metadata.gz: 9590abce809d47171ae43dcba47b6f587b90b0d77d598e47536904dba645b101
4
+ data.tar.gz: 0d4141a041eb62497c42a15500258c4b1c5fce7c02a8dc3ef78a1a5328f60c89
5
5
  SHA512:
6
- metadata.gz: 750c62b54a8a5e8f93c06d8a8d5e27fb39b26797a456b7f3a872cadecec81ea74ca95491d04427d9d274adc3eb95f9200d09310e27d01d44acb872e286ec6256
7
- data.tar.gz: 38e5cfbed9be17d5e197fe7752760c032163852916d79dbcd86a1e7f07d1d4548579ac9045756f1df85e9c175016a22250ab02d3f1e1029d5349a357c3a5b580
6
+ metadata.gz: 8302c677e05036f6412b9cc32dc43be19e829442a4350c5e93f135ed84ee6f0e0e823c4a809c19b393fdaef5677495aa1bbfbf85e87521a31dc6b5045a8d83ec
7
+ data.tar.gz: 2f4ff4d83e90881d5f255783953a513540e023b6249c6f6bba0ebd52b5e73ed87490324ecb1718da63fc51ad3da7df526b76a25c5b6be2176043630f30f1544a
data/CHANGELOG.md CHANGED
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning].
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [v1.1.6] - 2022-04-25
11
+
12
+ ### Changed
13
+
14
+ - [\#344] Bump activemodel and activesupport to v7.0.2.3
15
+
16
+ ## [v1.1.4] - 2022-03-07
17
+
18
+ ### Changed
19
+
20
+ - [\#340] Bump activemodel and activesupport to 6.1.4.6
21
+
22
+ ## [v1.1.3] - 2022-02-16
23
+
24
+ ### Changed
25
+
26
+ - [\#338] Bump activemodel and activesupport to 6.1.4.4
27
+
10
28
  ## [v1.1.2] - 2020-11-10
11
29
 
12
30
  ### Changed
@@ -231,7 +249,10 @@ and this project adheres to [Semantic Versioning].
231
249
 
232
250
  <!-- versions -->
233
251
 
234
- [Unreleased]: https://github.com/aaronmallen/activeinteractor/compare/v1.1.2...HEAD
252
+ [Unreleased]: https://github.com/aaronmallen/activeinteractor/compare/v1.1.6...HEAD
253
+ [v1.1.6]: https://github.com/aaronmallen/activeinteractor/compare/v1.1.4...v1.1.6
254
+ [v1.1.4]: https://github.com/aaronmallen/activeinteractor/compare/v1.1.3...v1.1.4
255
+ [v1.1.3]: https://github.com/aaronmallen/activeinteractor/compare/v1.1.2...v1.1.3
235
256
  [v1.1.2]: https://github.com/aaronmallen/activeinteractor/compare/v1.1.1...v1.1.2
236
257
  [v1.1.1]: https://github.com/aaronmallen/activeinteractor/compare/v1.1.0...v1.1.1
237
258
  [v1.1.0]: https://github.com/aaronmallen/activeinteractor/compare/v1.0.5...v1.1.0
data/README.md CHANGED
@@ -22,7 +22,13 @@ course on how to use ActiveInteractors. Read the [wiki] for detailed usage infor
22
22
  * Thread safe performance calls
23
23
  * Organize multiple interactors [conditionally][wiki_organizers_conditionally] or in [parallel][wiki_organizers_parallel]
24
24
 
25
- ## Getting Started
25
+ ## Documentation
26
+
27
+ Be sure to read the [wiki] for detailed information on how to use ActiveInteractor.
28
+
29
+ For technical documentation please see the gem's [ruby docs].
30
+
31
+ ## Install
26
32
 
27
33
  Add this line to your application's Gemfile:
28
34
 
@@ -30,54 +36,29 @@ Add this line to your application's Gemfile:
30
36
  gem 'activeinteractor', require: 'active_interactor'
31
37
  ```
32
38
 
33
- And then execute:
34
-
35
- ```bash
36
- bundle
37
- ```
38
-
39
39
  Or install it yourself as:
40
40
 
41
- ```bash
41
+ ```sh
42
42
  gem install activeinteractor
43
43
  ```
44
44
 
45
- ## Usage
46
-
47
- Be sure to read the [wiki] for detailed information on how to use ActiveInteractor.
48
-
49
- For technical documentation please see the gem's [ruby docs].
50
-
51
- ## Development
52
-
53
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests.
54
- You can also run `bin/console` for an interactive prompt that will allow you to experiment.
55
-
56
- To install this gem onto your local machine, run `bundle exec rake install`.
57
-
58
45
  ## Contributing
59
46
 
60
47
  Read our guidelines for [Contributing](CONTRIBUTING.md).
61
48
 
62
49
  ## Acknowledgements
63
50
 
64
- * Special thanks to [@collectiveidea] for their amazing foundational work on
65
- the [interactor][collective_idea_interactors] gem.
66
- * Special thanks to the [@rails] team for their work on [ActiveModel][active_model_git]
67
- and [ActiveSupport][active_support_git] gems.
51
+ ActiveInteractor is made possible by wonderful [humans].
68
52
 
69
53
  ## License
70
54
 
71
55
  The gem is available as open source under the terms of the [MIT License][mit_license].
72
56
 
73
- [@collectiveidea]: https://github.com/collectiveidea
74
- [@rails]: https://github.com/rails
75
- [active_model_git]: https://github.com/rails/rails/tree/master/activemodel
76
- [active_support_git]: https://github.com/rails/rails/tree/master/activesupport
77
57
  [ActiveModel::Validations]: https://api.rubyonrails.org/classes/ActiveModel/Validations.html
78
58
  [business_logic_wikipedia]: https://en.wikipedia.org/wiki/Business_logic
79
59
  [collective_idea_interactors]: https://github.com/collectiveidea/interactor
80
60
  [command pattern]: https://en.wikipedia.org/wiki/Command_pattern
61
+ [humans]: https://github.com/aaronmallen/activeinteractor/tree/main/HUMANS.md
81
62
  [Medium article]: https://medium.com/@aaronmallen/activeinteractor-8557c0dc78db
82
63
  [mit_license]: https://opensource.org/licenses/MIT
83
64
  [ruby docs]: https://www.rubydoc.info/gems/activeinteractor
@@ -1,7 +1,45 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveInteractor
4
- # The ActiveInteractor version
5
- # @return [String] the ActiveInteractor version
6
- VERSION = '1.1.2'
4
+ # The ActiveInteractor version info
5
+ #
6
+ # @author Aaron Allen <hello@aaronmallen.me>
7
+ # @since unreleased
8
+ module Version
9
+ # The ActiveInterctor major version number
10
+ # @return [Integer] The ActiveInteractor major version number
11
+ MAJOR = 1
12
+
13
+ # The ActiveInterctor minor version number
14
+ # @return [Integer] The ActiveInteractor minor version number
15
+ MINOR = 1
16
+
17
+ # The ActiveInterctor patch version number
18
+ # @return [Integer] The ActiveInteractor patch version number
19
+ PATCH = 6
20
+
21
+ # The ActiveInterctor pre-release version
22
+ # @return [String | nil] The ActiveInteractor pre-release version
23
+ PRE = nil
24
+
25
+ # The ActiveInterctor meta version
26
+ # @return [String | nil] The ActiveInteractor meta version
27
+ META = nil
28
+
29
+ # The ActiveInterctor rubygems version
30
+ # @return [String] The ActiveInteractor rubygems version
31
+ def self.gem_version
32
+ pre_meta = PRE.nil? ? nil : [PRE, META].compact.join('.').freeze
33
+ [MAJOR, MINOR, PATCH, pre_meta].compact.join('.').freeze
34
+ end
35
+
36
+ # The ActiveInterctor semver version
37
+ # @return [String] The ActiveInteractor semver version
38
+ def self.semver
39
+ version = [MAJOR, MINOR, PATCH].join('.')
40
+ version = "#{version}-#{PRE}" if PRE
41
+ version = "#{version}+#{META}" if META
42
+ version.freeze
43
+ end
44
+ end
7
45
  end
@@ -4,6 +4,7 @@ require 'spec_helper'
4
4
 
5
5
  RSpec.describe ActiveInteractor::Base do
6
6
  let(:interactor_class) { described_class }
7
+
7
8
  include_examples 'a class with interactor methods'
8
9
  include_examples 'a class with interactor callback methods'
9
10
  include_examples 'a class with interactor context methods'
@@ -4,6 +4,7 @@ require 'spec_helper'
4
4
 
5
5
  RSpec.describe ActiveInteractor::Config do
6
6
  subject { described_class.new }
7
+
7
8
  it { is_expected.to respond_to :logger }
8
9
 
9
10
  describe '.defaults' do
@@ -6,7 +6,9 @@ RSpec.describe ActiveInteractor::Context::Base do
6
6
  describe '.attributes' do
7
7
  context 'when no arguments are passed' do
8
8
  subject { context_class.attributes }
9
+
9
10
  let!(:context_class) { build_context }
11
+
10
12
  it { is_expected.to eq [] }
11
13
 
12
14
  context 'when an attribute :foo was previously defined' do
@@ -22,6 +24,7 @@ RSpec.describe ActiveInteractor::Context::Base do
22
24
 
23
25
  context 'when given arguments :foo and :bar' do
24
26
  subject { context_class.attributes(:foo, :bar) }
27
+
25
28
  let!(:context_class) { build_context }
26
29
 
27
30
  it { is_expected.to eq %i[bar foo] }
@@ -48,6 +51,7 @@ RSpec.describe ActiveInteractor::Context::Base do
48
51
 
49
52
  context 'with attribute equal to "foo"' do
50
53
  let(:attribute) { :foo }
54
+
51
55
  before { instance.foo = 'foo' }
52
56
 
53
57
  it { is_expected.to eq 'foo' }
@@ -70,6 +74,7 @@ RSpec.describe ActiveInteractor::Context::Base do
70
74
 
71
75
  context 'with attribute equal to "foo"' do
72
76
  let(:attribute) { :foo }
77
+
73
78
  before { instance.foo = 'foo' }
74
79
 
75
80
  it { is_expected.to eq 'foo' }
@@ -136,6 +141,7 @@ RSpec.describe ActiveInteractor::Context::Base do
136
141
 
137
142
  it { is_expected.to be_a Hash }
138
143
  it { is_expected.to eq(bar: 'bar', foo: 'foo') }
144
+
139
145
  it 'is expected to assign :baz' do
140
146
  expect(instance.baz).to eq 'baz'
141
147
  end
@@ -162,6 +168,7 @@ RSpec.describe ActiveInteractor::Context::Base do
162
168
 
163
169
  describe '#fail!' do
164
170
  subject { instance.fail!(errors) }
171
+
165
172
  let(:instance) { described_class.new }
166
173
 
167
174
  context 'with errors equal to nil' do
@@ -224,6 +231,7 @@ RSpec.describe ActiveInteractor::Context::Base do
224
231
 
225
232
  describe '#failure?' do
226
233
  subject { instance.failure? }
234
+
227
235
  let(:instance) { described_class.new }
228
236
 
229
237
  it { is_expected.to eq false }
@@ -275,6 +283,7 @@ RSpec.describe ActiveInteractor::Context::Base do
275
283
 
276
284
  it { is_expected.to be_a described_class }
277
285
  it { is_expected.to have_attributes(foo: 'foo') }
286
+
278
287
  it 'is expected to preserve @_failed instance variable' do
279
288
  expect(subject.instance_variable_get('@_failed')).to eq true
280
289
  end
@@ -285,6 +294,7 @@ RSpec.describe ActiveInteractor::Context::Base do
285
294
 
286
295
  it { is_expected.to be_a described_class }
287
296
  it { is_expected.to have_attributes(foo: 'foo') }
297
+
288
298
  it 'is expected to preserve @_rolled_back instance variable' do
289
299
  expect(subject.instance_variable_get('@_rolled_back')).to eq true
290
300
  end
@@ -347,6 +357,7 @@ RSpec.describe ActiveInteractor::Context::Base do
347
357
  before { attributes.errors.add(:foo, 'invalid') }
348
358
 
349
359
  it { is_expected.to be_a described_class }
360
+
350
361
  it 'is expected to have errors on :foo' do
351
362
  expect(subject.errors[:foo]).not_to be_nil
352
363
  expect(subject.errors[:foo]).to include 'invalid'
@@ -358,6 +369,7 @@ RSpec.describe ActiveInteractor::Context::Base do
358
369
 
359
370
  it { is_expected.to be_a described_class }
360
371
  it { is_expected.to have_attributes(foo: 'foo') }
372
+
361
373
  it 'is expected to preserve @_called instance variable' do
362
374
  expect(subject.instance_variable_get('@_called')).to eq %w[foo]
363
375
  end
@@ -368,6 +380,7 @@ RSpec.describe ActiveInteractor::Context::Base do
368
380
 
369
381
  it { is_expected.to be_a described_class }
370
382
  it { is_expected.to have_attributes(foo: 'foo') }
383
+
371
384
  it 'is expected to preserve @_failed instance variable' do
372
385
  expect(subject.instance_variable_get('@_failed')).to eq true
373
386
  end
@@ -378,6 +391,7 @@ RSpec.describe ActiveInteractor::Context::Base do
378
391
 
379
392
  it { is_expected.to be_a described_class }
380
393
  it { is_expected.to have_attributes(foo: 'foo') }
394
+
381
395
  it 'is expected to preserve @_rolled_back instance variable' do
382
396
  expect(subject.instance_variable_get('@_rolled_back')).to eq true
383
397
  end
@@ -387,6 +401,7 @@ RSpec.describe ActiveInteractor::Context::Base do
387
401
 
388
402
  describe '#rollback!' do
389
403
  subject { instance.rollback! }
404
+
390
405
  let(:instance) { described_class.new }
391
406
 
392
407
  context 'with #called! interactors' do
@@ -414,6 +429,7 @@ RSpec.describe ActiveInteractor::Context::Base do
414
429
 
415
430
  describe '#success?' do
416
431
  subject { instance.success? }
432
+
417
433
  let(:instance) { described_class.new }
418
434
 
419
435
  it { is_expected.to eq true }
@@ -14,10 +14,12 @@ RSpec.describe ActiveInteractor::Error::ContextFailure do
14
14
  end
15
15
 
16
16
  context 'when context is an instance of "TestContext"' do
17
- before { build_context }
18
17
  subject { described_class.new(TestContext.new) }
19
18
 
19
+ before { build_context }
20
+
20
21
  it { is_expected.to have_attributes(message: 'TestContext failed!') }
22
+
21
23
  it 'is expected to have an instance of TestContext' do
22
24
  expect(subject.context).to be_a TestContext
23
25
  end
@@ -5,6 +5,7 @@ require 'spec_helper'
5
5
  RSpec.describe ActiveInteractor::Interactor::Worker do
6
6
  context 'with interactor class TestInteractor' do
7
7
  before { build_interactor }
8
+
8
9
  let(:interactor) { TestInteractor.new }
9
10
 
10
11
  RSpec.shared_examples 'an interactor with options' do
@@ -118,6 +119,7 @@ RSpec.describe ActiveInteractor::Interactor::Worker do
118
119
  end
119
120
 
120
121
  it { expect { subject }.to raise_error(ActiveInteractor::Error::ContextFailure) }
122
+
121
123
  it 'is expected to rollback the interactor context' do
122
124
  expect_any_instance_of(TestInteractor).to receive(:context_rollback!)
123
125
  expect { subject }.to raise_error(ActiveInteractor::Error::ContextFailure)
@@ -135,6 +137,7 @@ RSpec.describe ActiveInteractor::Interactor::Worker do
135
137
  end
136
138
 
137
139
  it { expect { subject }.to raise_error(ActiveInteractor::Error::ContextFailure) }
140
+
138
141
  it 'is expected to rollback the interactor context' do
139
142
  expect_any_instance_of(TestInteractor).to receive(:context_rollback!)
140
143
  expect { subject }.to raise_error(ActiveInteractor::Error::ContextFailure)
@@ -4,6 +4,7 @@ require 'spec_helper'
4
4
 
5
5
  RSpec.describe ActiveInteractor::Organizer::Base do
6
6
  let(:interactor_class) { described_class }
7
+
7
8
  include_examples 'a class with interactor methods'
8
9
  include_examples 'a class with interactor callback methods'
9
10
  include_examples 'a class with interactor context methods'
@@ -66,6 +67,7 @@ RSpec.describe ActiveInteractor::Organizer::Base do
66
67
  subject { organizer.organized }
67
68
 
68
69
  it { expect(subject.collection).to all(be_a ActiveInteractor::Organizer::InteractorInterface) }
70
+
69
71
  it 'is expected to organize the approriate interactors' do
70
72
  expect(subject.collection.first.interactor_class).to eq TestInteractor1
71
73
  expect(subject.collection.last.interactor_class).to eq TestInteractor2
@@ -87,6 +89,7 @@ RSpec.describe ActiveInteractor::Organizer::Base do
87
89
  subject { organizer.organized }
88
90
 
89
91
  it { expect(subject.collection).to all(be_a ActiveInteractor::Organizer::InteractorInterface) }
92
+
90
93
  it 'is expected to organize the approriate interactors' do
91
94
  expect(subject.collection.first.interactor_class).to eq TestInteractor1
92
95
  expect(subject.collection.last.interactor_class).to eq TestInteractor2
@@ -103,11 +106,12 @@ RSpec.describe ActiveInteractor::Organizer::Base do
103
106
  end
104
107
  end
105
108
 
106
- it { should have_attributes(parallel: true) }
109
+ it { is_expected.to have_attributes(parallel: true) }
107
110
  end
108
111
 
109
112
  describe '#perform' do
110
113
  subject { interactor_class.perform }
114
+
111
115
  context 'with two existing interactors' do
112
116
  let!(:interactor1) { build_interactor('TestInteractor1') }
113
117
  let!(:interactor2) { build_interactor('TestInteractor2') }
@@ -118,6 +122,7 @@ RSpec.describe ActiveInteractor::Organizer::Base do
118
122
  end
119
123
 
120
124
  it { is_expected.to be_a interactor_class.context_class }
125
+
121
126
  it 'is expected to receive #perform on both interactors' do
122
127
  expect_any_instance_of(interactor1).to receive(:perform)
123
128
  expect_any_instance_of(interactor2).to receive(:perform)
@@ -128,11 +133,13 @@ RSpec.describe ActiveInteractor::Organizer::Base do
128
133
  subject { interactor_class.perform({}, skip_each_perform_callbacks: true) }
129
134
 
130
135
  it { is_expected.to be_a interactor_class.context_class }
136
+
131
137
  it 'is expected to receive #perform on both interactors' do
132
138
  expect_any_instance_of(interactor1).to receive(:perform)
133
139
  expect_any_instance_of(interactor2).to receive(:perform)
134
140
  subject
135
141
  end
142
+
136
143
  it 'is expected not to receive #run_callbacks with :each_perform' do
137
144
  expect_any_instance_of(interactor_class).not_to receive(:run_callbacks)
138
145
  .with(:each_perform)
@@ -152,14 +159,17 @@ RSpec.describe ActiveInteractor::Organizer::Base do
152
159
  it { expect { subject }.not_to raise_error }
153
160
  it { is_expected.to be_failure }
154
161
  it { is_expected.to be_a interactor_class.context_class }
162
+
155
163
  it 'is expected to receive #perform on the first interactor' do
156
164
  expect_any_instance_of(interactor1).to receive(:perform)
157
165
  subject
158
166
  end
167
+
159
168
  it 'is expected not to receive #perform on the second interactor' do
160
169
  expect_any_instance_of(interactor2).not_to receive(:perform)
161
170
  subject
162
171
  end
172
+
163
173
  it 'is expected to receive #rollback on the first interactor' do
164
174
  expect_any_instance_of(interactor1).to receive(:rollback)
165
175
  subject
@@ -178,11 +188,13 @@ RSpec.describe ActiveInteractor::Organizer::Base do
178
188
  it { expect { subject }.not_to raise_error }
179
189
  it { is_expected.to be_failure }
180
190
  it { is_expected.to be_a interactor_class.context_class }
191
+
181
192
  it 'is expected to receive #perform on both interactors' do
182
193
  expect_any_instance_of(interactor1).to receive(:perform)
183
194
  expect_any_instance_of(interactor2).to receive(:perform)
184
195
  subject
185
196
  end
197
+
186
198
  it 'is expected to receive #rollback on both interactors' do
187
199
  expect_any_instance_of(interactor1).to receive(:rollback)
188
200
  expect_any_instance_of(interactor2).to receive(:rollback)
@@ -200,6 +212,7 @@ RSpec.describe ActiveInteractor::Organizer::Base do
200
212
  end
201
213
 
202
214
  it { is_expected.to be_a interactor_class.context_class }
215
+
203
216
  it 'is expected to receive #perform on both interactors' do
204
217
  expect_any_instance_of(interactor1).to receive(:perform)
205
218
  expect_any_instance_of(interactor2).to receive(:perform)
@@ -218,11 +231,13 @@ RSpec.describe ActiveInteractor::Organizer::Base do
218
231
  it { expect { subject }.not_to raise_error }
219
232
  it { is_expected.to be_failure }
220
233
  it { is_expected.to be_a interactor_class.context_class }
234
+
221
235
  it 'is expected to receive #perform on both interactors' do
222
236
  expect_any_instance_of(interactor1).to receive(:perform)
223
237
  expect_any_instance_of(interactor2).to receive(:perform)
224
238
  subject
225
239
  end
240
+
226
241
  it 'is expected to receive #rollback both interactors' do
227
242
  expect_any_instance_of(interactor1).to receive(:rollback)
228
243
  expect_any_instance_of(interactor2).to receive(:rollback)
@@ -242,11 +257,13 @@ RSpec.describe ActiveInteractor::Organizer::Base do
242
257
  it { expect { subject }.not_to raise_error }
243
258
  it { is_expected.to be_failure }
244
259
  it { is_expected.to be_a interactor_class.context_class }
260
+
245
261
  it 'is expected to receive #perform on both interactors' do
246
262
  expect_any_instance_of(interactor1).to receive(:perform)
247
263
  expect_any_instance_of(interactor2).to receive(:perform)
248
264
  subject
249
265
  end
266
+
250
267
  it 'is expected to receive #rollback on both interactors' do
251
268
  expect_any_instance_of(interactor1).to receive(:rollback)
252
269
  expect_any_instance_of(interactor2).to receive(:rollback)
@@ -5,6 +5,7 @@ require 'spec_helper'
5
5
  RSpec.describe ActiveInteractor::Organizer::InteractorInterfaceCollection do
6
6
  describe '#add' do
7
7
  subject { instance.add(interactor) }
8
+
8
9
  let(:instance) { described_class.new }
9
10
 
10
11
  context 'with an interactor that does not exist' do
@@ -57,6 +58,7 @@ RSpec.describe ActiveInteractor::Organizer::InteractorInterfaceCollection do
57
58
 
58
59
  describe '#concat' do
59
60
  subject { instance.concat(interactors) }
61
+
60
62
  let(:instance) { described_class.new }
61
63
 
62
64
  context 'with two existing interactors' do
@@ -221,6 +221,7 @@ RSpec.describe ActiveInteractor::Organizer::InteractorInterface do
221
221
  context 'when interactors are passed as strings' do
222
222
  let(:interactor_class) { 'TestInteractor' }
223
223
  let(:options) { {} }
224
+
224
225
  include_examples 'an instance of InteractorInterface correctly parse options'
225
226
 
226
227
  describe '#interactor_class' do
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe ActiveInteractor::Version do
6
+ describe '::MAJOR' do
7
+ subject(:major) { described_class::MAJOR }
8
+
9
+ it { is_expected.to be_a Integer }
10
+ end
11
+
12
+ describe '::MINOR' do
13
+ subject(:minor) { described_class::MINOR }
14
+
15
+ it { is_expected.to be_a Integer }
16
+ end
17
+
18
+ describe '::PATCH' do
19
+ subject(:patch) { described_class::PATCH }
20
+
21
+ it { is_expected.to be_a Integer }
22
+ end
23
+
24
+ describe '::PRE' do
25
+ subject(:pre) { described_class::PRE }
26
+
27
+ it 'is a String or Nil' do
28
+ expect([String, NilClass]).to include pre.class
29
+ end
30
+ end
31
+
32
+ describe '::META' do
33
+ subject(:meta) { described_class::META }
34
+
35
+ it 'is a String or Nil' do
36
+ expect([String, NilClass]).to include meta.class
37
+ end
38
+ end
39
+
40
+ describe '.gem_version' do
41
+ subject(:gem_version) { described_class.gem_version }
42
+
43
+ context 'when version is 1.0.0-beta.1+test' do
44
+ before do
45
+ stub_const('ActiveInteractor::Version::MAJOR', 1)
46
+ stub_const('ActiveInteractor::Version::MINOR', 0)
47
+ stub_const('ActiveInteractor::Version::PATCH', 0)
48
+ stub_const('ActiveInteractor::Version::PRE', 'beta.1')
49
+ stub_const('ActiveInteractor::Version::META', 'test')
50
+ end
51
+
52
+ it { is_expected.to eq '1.0.0.beta.1.test' }
53
+ end
54
+
55
+ context 'when version is 1.0.0+test' do
56
+ before do
57
+ stub_const('ActiveInteractor::Version::MAJOR', 1)
58
+ stub_const('ActiveInteractor::Version::MINOR', 0)
59
+ stub_const('ActiveInteractor::Version::PATCH', 0)
60
+ stub_const('ActiveInteractor::Version::PRE', nil)
61
+ stub_const('ActiveInteractor::Version::META', 'test')
62
+ end
63
+
64
+ it { is_expected.to eq '1.0.0' }
65
+ end
66
+ end
67
+
68
+ describe '.semver' do
69
+ subject(:semver) { described_class.semver }
70
+
71
+ context 'when version is 1.0.0' do
72
+ before do
73
+ stub_const('ActiveInteractor::Version::MAJOR', 1)
74
+ stub_const('ActiveInteractor::Version::MINOR', 0)
75
+ stub_const('ActiveInteractor::Version::PATCH', 0)
76
+ stub_const('ActiveInteractor::Version::PRE', nil)
77
+ stub_const('ActiveInteractor::Version::META', nil)
78
+ end
79
+
80
+ it { is_expected.to eq '1.0.0' }
81
+ end
82
+
83
+ context 'when version is 1.0.0-beta.1' do
84
+ before do
85
+ stub_const('ActiveInteractor::Version::MAJOR', 1)
86
+ stub_const('ActiveInteractor::Version::MINOR', 0)
87
+ stub_const('ActiveInteractor::Version::PATCH', 0)
88
+ stub_const('ActiveInteractor::Version::PRE', 'beta.1')
89
+ stub_const('ActiveInteractor::Version::META', nil)
90
+ end
91
+
92
+ it { is_expected.to eq '1.0.0-beta.1' }
93
+ end
94
+
95
+ context 'when version is 1.0.0-beta.1+test' do
96
+ before do
97
+ stub_const('ActiveInteractor::Version::MAJOR', 1)
98
+ stub_const('ActiveInteractor::Version::MINOR', 0)
99
+ stub_const('ActiveInteractor::Version::PATCH', 0)
100
+ stub_const('ActiveInteractor::Version::PRE', 'beta.1')
101
+ stub_const('ActiveInteractor::Version::META', 'test')
102
+ end
103
+
104
+ it { is_expected.to eq '1.0.0-beta.1+test' }
105
+ end
106
+
107
+ context 'when version is 1.0.0+test' do
108
+ before do
109
+ stub_const('ActiveInteractor::Version::MAJOR', 1)
110
+ stub_const('ActiveInteractor::Version::MINOR', 0)
111
+ stub_const('ActiveInteractor::Version::PATCH', 0)
112
+ stub_const('ActiveInteractor::Version::PRE', nil)
113
+ stub_const('ActiveInteractor::Version::META', 'test')
114
+ end
115
+
116
+ it { is_expected.to eq '1.0.0+test' }
117
+ end
118
+ end
119
+ end
@@ -3,12 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe ActiveInteractor do
6
- describe '::VERSION' do
7
- subject { described_class::VERSION }
8
-
9
- it { is_expected.to be_a String }
10
- end
11
-
12
6
  describe '.config' do
13
7
  subject { described_class.config }
14
8
 
@@ -60,11 +60,13 @@ RSpec.describe 'A basic organizer', type: :integration do
60
60
  it { expect { subject }.not_to raise_error }
61
61
  it { is_expected.to be_a interactor_class.context_class }
62
62
  it { is_expected.to be_failure }
63
+
63
64
  it 'is expected to receive #rollback on the first interactor' do
64
65
  expect_any_instance_of(test_interactor_1).to receive(:rollback)
65
66
  .and_call_original
66
67
  subject
67
68
  end
69
+
68
70
  it 'is expected not to receive #perform! on the second interactor' do
69
71
  expect_any_instance_of(test_interactor_2).not_to receive(:perform!)
70
72
  subject
@@ -84,6 +86,7 @@ RSpec.describe 'A basic organizer', type: :integration do
84
86
  it { is_expected.to be_a interactor_class.context_class }
85
87
  it { is_expected.to be_failure }
86
88
  it { expect(subject.errors.count).to eq 1 }
89
+
87
90
  it 'is expected to have errors "something went wrong" on :context' do
88
91
  expect(subject.errors[:context]).not_to be_empty
89
92
  expect(subject.errors[:context]).to include 'something went wrong'
@@ -107,6 +110,7 @@ RSpec.describe 'A basic organizer', type: :integration do
107
110
  it { expect { subject }.not_to raise_error }
108
111
  it { is_expected.to be_a interactor_class.context_class }
109
112
  it { is_expected.to be_failure }
113
+
110
114
  it 'is expected to receive #rollback on all interactors' do
111
115
  expect_any_instance_of(test_interactor_2).to receive(:rollback)
112
116
  expect_any_instance_of(test_interactor_1).to receive(:rollback)
@@ -127,6 +131,7 @@ RSpec.describe 'A basic organizer', type: :integration do
127
131
  it { is_expected.to be_a interactor_class.context_class }
128
132
  it { is_expected.to be_failure }
129
133
  it { expect(subject.errors.count).to eq 1 }
134
+
130
135
  it 'is expected to have errors "something went wrong" on :context' do
131
136
  expect(subject.errors[:context]).not_to be_empty
132
137
  expect(subject.errors[:context]).to include 'something went wrong'
@@ -175,6 +180,7 @@ RSpec.describe 'A basic organizer', type: :integration do
175
180
 
176
181
  describe '.perform' do
177
182
  subject(:result) { interactor_class.perform(context_attributes) }
183
+
178
184
  it { is_expected.to have_attributes(foo: 'foo', bar: 'bar', baz: 'baz', zoo: 'zoo') }
179
185
 
180
186
  it 'is expected to copy all attributes in the contexts to each interactor' do
@@ -206,6 +212,7 @@ RSpec.describe 'A basic organizer', type: :integration do
206
212
 
207
213
  describe '.perform' do
208
214
  subject(:result) { interactor_class.perform(context_attributes) }
215
+
209
216
  it { is_expected.to have_attributes(foo: 'foo', bar: 'bar') }
210
217
 
211
218
  it 'is expected to copy all attributes in the contexts to each interactor' do
@@ -28,6 +28,7 @@ RSpec.describe 'A failing interactor', type: :integration do
28
28
  it { expect { subject }.not_to raise_error }
29
29
  it { is_expected.to be_a interactor_class.context_class }
30
30
  it { is_expected.to be_failure }
31
+
31
32
  it 'is expected to receive #rollback' do
32
33
  expect_any_instance_of(interactor_class).to receive(:rollback)
33
34
  subject
@@ -22,6 +22,7 @@ RSpec.describe 'An interactor with .after_perform callbacks', type: :integration
22
22
 
23
23
  it { is_expected.to be_a interactor_class.context_class }
24
24
  it { is_expected.to be_successful }
25
+
25
26
  it 'is expected to receive #test_after_perform' do
26
27
  expect_any_instance_of(interactor_class).to receive(:test_after_perform)
27
28
  subject
@@ -25,6 +25,7 @@ RSpec.describe 'An interactor with .after_rollback callbacks', type: :integratio
25
25
  subject { interactor_class.perform }
26
26
 
27
27
  it { is_expected.to be_a interactor_class.context_class }
28
+
28
29
  it 'is expected to receive #test_after_rollback' do
29
30
  expect_any_instance_of(interactor_class).to receive(:test_after_rollback)
30
31
  subject
@@ -39,6 +39,7 @@ RSpec.describe 'An interactor with an existing .context_class', type: :integrati
39
39
 
40
40
  it { is_expected.to be_an AnInteractorContext }
41
41
  it { is_expected.to be_failure }
42
+
42
43
  it 'is expected to have errors on :some_field' do
43
44
  expect(subject.errors[:test_field]).not_to be_nil
44
45
  end
@@ -22,6 +22,7 @@ RSpec.describe 'An interactor with .before_perform callbacks', type: :integratio
22
22
 
23
23
  it { is_expected.to be_a interactor_class.context_class }
24
24
  it { is_expected.to be_successful }
25
+
25
26
  it 'is expected to receive #test_before_perform' do
26
27
  expect_any_instance_of(interactor_class).to receive(:test_before_perform)
27
28
  subject
@@ -25,6 +25,7 @@ RSpec.describe 'An interactor with .before_rollback callbacks', type: :integrati
25
25
  subject { interactor_class.perform }
26
26
 
27
27
  it { is_expected.to be_a interactor_class.context_class }
28
+
28
29
  it 'is expected to receive #test_before_rollback' do
29
30
  expect_any_instance_of(interactor_class).to receive(:test_before_rollback)
30
31
  subject
@@ -32,6 +32,7 @@ RSpec.describe 'An interactor with validations on :called', type: :integration d
32
32
 
33
33
  it { is_expected.to be_an TestInteractor::Context }
34
34
  it { is_expected.to be_failure }
35
+
35
36
  it 'is expected to have errors on :some_field' do
36
37
  expect(subject.errors[:test_field]).not_to be_nil
37
38
  end
@@ -28,6 +28,7 @@ RSpec.describe 'An interactor with validations on :calling', type: :integration
28
28
 
29
29
  it { is_expected.to be_an TestInteractor::Context }
30
30
  it { is_expected.to be_failure }
31
+
31
32
  it 'is expected to have errors on :some_field' do
32
33
  expect(subject.errors[:test_field]).not_to be_nil
33
34
  end
@@ -38,6 +38,7 @@ RSpec.describe 'An interactor with validations', type: :integration do
38
38
  it { is_expected.to be_a interactor_class.context_class }
39
39
  it { is_expected.to be_failure }
40
40
  it { is_expected.to have_attributes(other_field: 'failed') }
41
+
41
42
  it 'is expected to have errors on :test_field' do
42
43
  expect(subject.errors[:test_field]).not_to be_nil
43
44
  end
@@ -84,6 +85,7 @@ RSpec.describe 'An interactor with validations', type: :integration do
84
85
  it { is_expected.to be_a interactor_class.context_class }
85
86
  it { is_expected.to be_failure }
86
87
  it { is_expected.to have_attributes(test_condition: true, other_field: 'failed') }
88
+
87
89
  it 'is expected to have errors on :test_field' do
88
90
  expect(subject.errors[:test_field]).not_to be_nil
89
91
  end
@@ -25,6 +25,7 @@ RSpec.describe 'An organizer with .after_each callbacks', type: :integration do
25
25
  subject { interactor_class.perform }
26
26
 
27
27
  it { is_expected.to be_a interactor_class.context_class }
28
+
28
29
  it 'is expected to receive #test_after_each_perform twice' do
29
30
  expect_any_instance_of(interactor_class).to receive(:test_after_each_perform)
30
31
  .exactly(:twice)
@@ -25,6 +25,7 @@ RSpec.describe 'An organizer with .before_each callbacks', type: :integration do
25
25
  subject { interactor_class.perform }
26
26
 
27
27
  it { is_expected.to be_a interactor_class.context_class }
28
+
28
29
  it 'is expected to receive #test_before_each_perform twice' do
29
30
  expect_any_instance_of(interactor_class).to receive(:test_before_each_perform)
30
31
  .exactly(:twice)
@@ -7,7 +7,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
7
7
  let!(:test_interactor_2) { build_interactor('TestInteractor2') }
8
8
 
9
9
  context 'with a condition on the first interactor { :if => -> { context.test_1 } } ' \
10
- 'and a condition on the second interactor { :if => -> { context.test_2 } }' do
10
+ 'and a condition on the second interactor { :if => -> { context.test_2 } }' do
11
11
  let(:interactor_class) do
12
12
  build_organizer do
13
13
  organize do
@@ -30,6 +30,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
30
30
 
31
31
  it { is_expected.to be_a interactor_class.context_class }
32
32
  it { is_expected.to be_successful }
33
+
33
34
  it 'is expected to receive #perform on both interactors' do
34
35
  expect_any_instance_of(test_interactor_1).to receive(:perform)
35
36
  expect_any_instance_of(test_interactor_2).to receive(:perform)
@@ -42,6 +43,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
42
43
 
43
44
  it { is_expected.to be_a interactor_class.context_class }
44
45
  it { is_expected.to be_successful }
46
+
45
47
  it 'is expected to receive #perform on the first interactor' do
46
48
  expect_any_instance_of(test_interactor_1).to receive(:perform)
47
49
  subject
@@ -58,6 +60,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
58
60
 
59
61
  it { is_expected.to be_a interactor_class.context_class }
60
62
  it { is_expected.to be_successful }
63
+
61
64
  it 'is expected not to receive #perform on the first interactor' do
62
65
  expect_any_instance_of(test_interactor_1).not_to receive(:perform)
63
66
  subject
@@ -74,6 +77,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
74
77
 
75
78
  it { is_expected.to be_a interactor_class.context_class }
76
79
  it { is_expected.to be_successful }
80
+
77
81
  it 'is expected not to receive #perform on the first interactor' do
78
82
  expect_any_instance_of(test_interactor_1).not_to receive(:perform)
79
83
  subject
@@ -88,7 +92,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
88
92
  end
89
93
 
90
94
  context 'with a condition on the first interactor { :unless => -> { context.test_1 } } ' \
91
- 'and a condition on the second interactor { :unless => -> { context.test_2 } }' do
95
+ 'and a condition on the second interactor { :unless => -> { context.test_2 } }' do
92
96
  let(:interactor_class) do
93
97
  build_organizer do
94
98
  organize do
@@ -111,6 +115,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
111
115
 
112
116
  it { is_expected.to be_a interactor_class.context_class }
113
117
  it { is_expected.to be_successful }
118
+
114
119
  it 'is expected not to receive #perform on the first interactor' do
115
120
  expect_any_instance_of(test_interactor_1).not_to receive(:perform)
116
121
  subject
@@ -127,6 +132,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
127
132
 
128
133
  it { is_expected.to be_a interactor_class.context_class }
129
134
  it { is_expected.to be_successful }
135
+
130
136
  it 'is expected not to receive #perform on the first interactor' do
131
137
  expect_any_instance_of(test_interactor_1).not_to receive(:perform)
132
138
  subject
@@ -143,6 +149,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
143
149
 
144
150
  it { is_expected.to be_a interactor_class.context_class }
145
151
  it { is_expected.to be_successful }
152
+
146
153
  it 'is expected to receive #perform on the first interactor' do
147
154
  expect_any_instance_of(test_interactor_1).to receive(:perform)
148
155
  subject
@@ -159,6 +166,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
159
166
 
160
167
  it { is_expected.to be_a interactor_class.context_class }
161
168
  it { is_expected.to be_successful }
169
+
162
170
  it 'is expected to receive #perform on both interactors' do
163
171
  expect_any_instance_of(test_interactor_1).to receive(:perform)
164
172
  expect_any_instance_of(test_interactor_2).to receive(:perform)
@@ -194,6 +202,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
194
202
 
195
203
  it { is_expected.to be_a interactor_class.context_class }
196
204
  it { is_expected.to be_successful }
205
+
197
206
  it 'is expected to receive #perform on both interactors' do
198
207
  expect_any_instance_of(test_interactor_1).to receive(:perform)
199
208
  expect_any_instance_of(test_interactor_2).to receive(:perform)
@@ -228,6 +237,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
228
237
 
229
238
  it { is_expected.to be_a interactor_class.context_class }
230
239
  it { is_expected.to be_successful }
240
+
231
241
  it 'is expected not to receive #perform on the first interactor' do
232
242
  expect_any_instance_of(test_interactor_1).not_to receive(:perform)
233
243
  subject
@@ -266,6 +276,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
266
276
 
267
277
  it { is_expected.to be_a interactor_class.context_class }
268
278
  it { is_expected.to be_successful }
279
+
269
280
  it 'is expected not to receive #perform on the first interactor' do
270
281
  expect_any_instance_of(test_interactor_1).not_to receive(:perform)
271
282
  subject
@@ -304,6 +315,7 @@ RSpec.describe 'An organizer with conditionally organized interactors', type: :i
304
315
 
305
316
  it { is_expected.to be_a interactor_class.context_class }
306
317
  it { is_expected.to be_successful }
318
+
307
319
  it 'is expected to receive #perform on both interactors' do
308
320
  expect_any_instance_of(test_interactor_1).to receive(:perform)
309
321
  expect_any_instance_of(test_interactor_2).to receive(:perform)
@@ -44,6 +44,7 @@ RSpec.describe 'An organizer with options callbacks', type: :integration do
44
44
  subject { interactor_class.perform(step: 1) }
45
45
 
46
46
  it { is_expected.to be_a interactor_class.context_class }
47
+
47
48
  it 'is expected to receive #test_before_method once' do
48
49
  expect_any_instance_of(interactor_class).to receive(:test_before_method)
49
50
  .exactly(:once)
data/spec/spec_helper.rb CHANGED
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- begin
4
- require 'simplecov'
5
- require 'simplecov-lcov'
6
-
7
- SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
8
-
9
- SimpleCov.start do
10
- enable_coverage :branch
11
- add_filter '/spec/'
12
- add_filter '/lib/rails/**/*.rb'
13
- track_files '/lib/**/*.rb'
14
- formatter SimpleCov::Formatter::MultiFormatter.new([
15
- SimpleCov::Formatter::HTMLFormatter,
16
- SimpleCov::Formatter::LcovFormatter
17
- ])
18
- end
19
- rescue LoadError
20
- puts 'Skipping coverage...'
21
- end
3
+ require_relative 'support/coverage'
4
+ ActiveInteractor::Spec::Coverage.start
22
5
 
23
6
  require 'bundler/setup'
24
7
  require 'active_interactor'
@@ -32,7 +15,7 @@ RSpec.configure do |config|
32
15
  allow(ActiveInteractor.logger).to receive(:error).and_return(true)
33
16
  end
34
17
 
35
- config.after(:each) do
18
+ config.after do
36
19
  clean_factories!
37
20
  end
38
21
 
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
4
+ require 'simplecov-lcov'
5
+
6
+ module ActiveInteractor
7
+ module Spec
8
+ class Coverage
9
+ DEFAULT_COVERAGE_TYPE = 'unit'
10
+ EXCLUDED_FILES_PATTERN = '/spec/'
11
+ TRACKED_FILES_PATTERN = 'lib/**/*.rb'
12
+
13
+ FORMATTERS = [
14
+ SimpleCov::Formatter::HTMLFormatter,
15
+ SimpleCov::Formatter::LcovFormatter
16
+ ].freeze
17
+
18
+ class << self
19
+ def start
20
+ setup_lcov_formatter
21
+ start_simplecov
22
+ end
23
+
24
+ private
25
+
26
+ def simplecov_formatter
27
+ @simplecov_formatter ||= SimpleCov::Formatter::MultiFormatter.new(FORMATTERS)
28
+ end
29
+
30
+ def setup_lcov_formatter
31
+ coverage_type = ENV.fetch('COVERAGE_TYPE', DEFAULT_COVERAGE_TYPE)
32
+
33
+ SimpleCov::Formatter::LcovFormatter.config do |config|
34
+ config.report_with_single_file = true
35
+ config.single_report_path = "coverage/#{coverage_type}_lcov.info"
36
+ end
37
+ end
38
+
39
+ def start_simplecov
40
+ SimpleCov.start do
41
+ add_filter EXCLUDED_FILES_PATTERN
42
+ enable_coverage :branch
43
+ track_files TRACKED_FILES_PATTERN
44
+ formatter simplecov_formatter
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -3,11 +3,12 @@
3
3
  RSpec.shared_examples 'a class with interactor callback methods' do
4
4
  describe '.after_context_validation' do
5
5
  subject { interactor_class.after_context_validation(*args) }
6
+
6
7
  let(:args) { :some_method }
7
8
 
8
9
  it 'is expected to receive #set_callback with :validation, :after, :some_method, { :prepend => true }' do
9
10
  expect(interactor_class).to receive(:set_callback)
10
- .with(:validation, :after, :some_method, prepend: true)
11
+ .with(:validation, :after, :some_method, { prepend: true })
11
12
  .and_return(true)
12
13
  subject
13
14
  end
@@ -15,6 +16,7 @@ RSpec.shared_examples 'a class with interactor callback methods' do
15
16
 
16
17
  describe '.after_perform' do
17
18
  subject { interactor_class.after_perform(*args) }
19
+
18
20
  let(:args) { :some_method }
19
21
 
20
22
  it 'is expected to receive #set_callback with :perform, :after, :some_method' do
@@ -27,6 +29,7 @@ RSpec.shared_examples 'a class with interactor callback methods' do
27
29
 
28
30
  describe '.after_rollback' do
29
31
  subject { interactor_class.after_rollback(*args) }
32
+
30
33
  let(:args) { :some_method }
31
34
 
32
35
  it 'is expected to receive #set_callback with :rollback, :after, :some_method' do
@@ -39,6 +42,7 @@ RSpec.shared_examples 'a class with interactor callback methods' do
39
42
 
40
43
  describe '.around_perform' do
41
44
  subject { interactor_class.around_perform(*args) }
45
+
42
46
  let(:args) { :some_method }
43
47
 
44
48
  it 'is expected to receive #set_callback with :perform, :around, :some_method' do
@@ -51,6 +55,7 @@ RSpec.shared_examples 'a class with interactor callback methods' do
51
55
 
52
56
  describe '.around_rollback' do
53
57
  subject { interactor_class.around_rollback(*args) }
58
+
54
59
  let(:args) { :some_method }
55
60
 
56
61
  it 'is expected to receive #set_callback with :rollback, :around, :some_method' do
@@ -63,6 +68,7 @@ RSpec.shared_examples 'a class with interactor callback methods' do
63
68
 
64
69
  describe '.before_context_validation' do
65
70
  subject { interactor_class.before_context_validation(*args) }
71
+
66
72
  let(:args) { :some_method }
67
73
 
68
74
  it 'is expected to receive #set_callback with :validation, :before, :some_method' do
@@ -75,6 +81,7 @@ RSpec.shared_examples 'a class with interactor callback methods' do
75
81
 
76
82
  describe '.before_perform' do
77
83
  subject { interactor_class.before_perform(*args) }
84
+
78
85
  let(:args) { :some_method }
79
86
 
80
87
  it 'is expected to receive #set_callback with :perform, :before, :some_method' do
@@ -87,6 +94,7 @@ RSpec.shared_examples 'a class with interactor callback methods' do
87
94
 
88
95
  describe '.before_rollback' do
89
96
  subject { interactor_class.before_rollback(*args) }
97
+
90
98
  let(:args) { :some_method }
91
99
 
92
100
  it 'is expected to receive #set_callback with :rollback, :before, :some_method' do
@@ -3,6 +3,7 @@
3
3
  RSpec.shared_examples 'a class with interactor context methods' do
4
4
  describe '.context_attributes' do
5
5
  subject { interactor_class.context_attributes(attributes) }
6
+
6
7
  let(:attributes) { :some_attribute }
7
8
 
8
9
  it 'is expected to receive #attributes on .context_class with :some_attribute' do
@@ -45,6 +46,7 @@ RSpec.shared_examples 'a class with interactor context methods' do
45
46
 
46
47
  describe '#finalize_context!' do
47
48
  subject { instance.finalize_context! }
49
+
48
50
  let(:instance) { interactor_class.new }
49
51
 
50
52
  it 'is expected to receive #called! on instance of .context_class' do
@@ -3,6 +3,7 @@
3
3
  RSpec.shared_examples 'a class with organizer callback methods' do
4
4
  describe '.after_each_perform' do
5
5
  subject { interactor_class.after_each_perform(*args) }
6
+
6
7
  let(:args) { :some_method }
7
8
 
8
9
  it 'is expected to receive #set_callback with :each_perform, :after, :some_method' do
@@ -15,6 +16,7 @@ RSpec.shared_examples 'a class with organizer callback methods' do
15
16
 
16
17
  describe '.around_each_perform' do
17
18
  subject { interactor_class.around_each_perform(*args) }
19
+
18
20
  let(:args) { :some_method }
19
21
 
20
22
  it 'is expected to receive #set_callback with :each_perform, :around, :some_method' do
@@ -27,6 +29,7 @@ RSpec.shared_examples 'a class with organizer callback methods' do
27
29
 
28
30
  describe '.before_each_perform' do
29
31
  subject { interactor_class.before_each_perform(*args) }
32
+
30
33
  let(:args) { :some_method }
31
34
 
32
35
  it 'is expected to receive #set_callback with :each_perform, :before, :some_method' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeinteractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Allen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-10 00:00:00.000000000 Z
11
+ date: 2022-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '4.2'
20
20
  - - "<="
21
21
  - !ruby/object:Gem::Version
22
- version: '6.1'
22
+ version: 7.0.2.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '4.2'
30
30
  - - "<="
31
31
  - !ruby/object:Gem::Version
32
- version: '6.1'
32
+ version: 7.0.2.3
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '4.2'
40
40
  - - "<="
41
41
  - !ruby/object:Gem::Version
42
- version: '6.1'
42
+ version: 7.0.2.3
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: '4.2'
50
50
  - - "<="
51
51
  - !ruby/object:Gem::Version
52
- version: '6.1'
52
+ version: 7.0.2.3
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: bundler
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +167,7 @@ files:
167
167
  - spec/active_interactor/organizer/base_spec.rb
168
168
  - spec/active_interactor/organizer/interactor_interface_collection_spec.rb
169
169
  - spec/active_interactor/organizer/interactor_interface_spec.rb
170
+ - spec/active_interactor/version_spec.rb
170
171
  - spec/active_interactor_spec.rb
171
172
  - spec/integration/a_basic_interactor_spec.rb
172
173
  - spec/integration/a_basic_organizer_spec.rb
@@ -191,6 +192,7 @@ files:
191
192
  - spec/integration/an_organizer_with_failing_nested_organizer_spec.rb
192
193
  - spec/integration/an_organizer_with_options_callbacks_spec.rb
193
194
  - spec/spec_helper.rb
195
+ - spec/support/coverage.rb
194
196
  - spec/support/helpers/factories.rb
195
197
  - spec/support/shared_examples/a_class_that_extends_active_interactor_models_example.rb
196
198
  - spec/support/shared_examples/a_class_with_interactor_callback_methods_example.rb
@@ -203,10 +205,10 @@ licenses:
203
205
  - MIT
204
206
  metadata:
205
207
  bug_tracker_uri: https://github.com/aaronmallen/activeinteractor/issues
206
- changelog_uri: https://github.com/aaronmallen/activeinteractor/blob/v1.1.2/CHANGELOG.md
207
- documentation_uri: https://www.rubydoc.info/gems/activeinteractor/1.1.2
208
+ changelog_uri: https://github.com/aaronmallen/activeinteractor/blob/v1.1.6/CHANGELOG.md
209
+ documentation_uri: https://www.rubydoc.info/gems/activeinteractor/1.1.6
208
210
  hompage_uri: https://github.com/aaronmallen/activeinteractor
209
- source_code_uri: https://github.com/aaronmallen/activeinteractor/tree/v1.1.2
211
+ source_code_uri: https://github.com/aaronmallen/activeinteractor/tree/v1.1.6
210
212
  wiki_uri: https://github.com/aaronmallen/activeinteractor/wiki
211
213
  post_install_message:
212
214
  rdoc_options: []
@@ -223,48 +225,50 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
225
  - !ruby/object:Gem::Version
224
226
  version: '0'
225
227
  requirements: []
226
- rubygems_version: 3.0.3
228
+ rubygems_version: 3.0.3.1
227
229
  signing_key:
228
230
  specification_version: 4
229
231
  summary: Ruby interactors with ActiveModel::Validations
230
232
  test_files:
231
- - spec/support/shared_examples/a_class_that_extends_active_interactor_models_example.rb
233
+ - spec/spec_helper.rb
234
+ - spec/integration/an_organizer_with_after_each_callbacks_spec.rb
235
+ - spec/integration/an_organizer_with_options_callbacks_spec.rb
236
+ - spec/integration/an_interactor_with_before_perform_callbacks_spec.rb
237
+ - spec/integration/an_organizer_performing_in_parallel_spec.rb
238
+ - spec/integration/an_organizer_with_before_each_callbacks_spec.rb
239
+ - spec/integration/an_interactor_with_an_existing_context_class_spec.rb
240
+ - spec/integration/an_organizer_with_failing_nested_organizer_spec.rb
241
+ - spec/integration/an_organizer_with_around_each_callbacks_spec.rb
242
+ - spec/integration/an_interactor_with_before_rollback_callbacks_spec.rb
243
+ - spec/integration/an_interactor_with_validations_on_called_spec.rb
244
+ - spec/integration/an_interactor_with_validations_on_calling_spec.rb
245
+ - spec/integration/an_organizer_with_conditionally_organized_interactors_spec.rb
246
+ - spec/integration/an_interactor_with_after_rollback_callbacks_spec.rb
247
+ - spec/integration/an_interactor_with_after_context_validation_callbacks_spec.rb
248
+ - spec/integration/an_interactor_with_around_rollback_callbacks_spec.rb
249
+ - spec/integration/a_failing_interactor_spec.rb
250
+ - spec/integration/a_basic_interactor_spec.rb
251
+ - spec/integration/an_interactor_with_validations_spec.rb
252
+ - spec/integration/an_interactor_with_around_perform_callbacks_spec.rb
253
+ - spec/integration/active_record_integration_spec.rb
254
+ - spec/integration/an_interactor_with_after_perform_callbacks_spec.rb
255
+ - spec/integration/a_basic_organizer_spec.rb
256
+ - spec/active_interactor_spec.rb
257
+ - spec/support/shared_examples/a_class_with_organizer_callback_methods_example.rb
232
258
  - spec/support/shared_examples/a_class_with_interactor_context_methods_example.rb
233
- - spec/support/shared_examples/a_class_with_interactor_callback_methods_example.rb
234
259
  - spec/support/shared_examples/a_class_with_interactor_methods_example.rb
235
- - spec/support/shared_examples/a_class_with_organizer_callback_methods_example.rb
260
+ - spec/support/shared_examples/a_class_with_interactor_callback_methods_example.rb
261
+ - spec/support/shared_examples/a_class_that_extends_active_interactor_models_example.rb
236
262
  - spec/support/spec_helpers.rb
263
+ - spec/support/coverage.rb
237
264
  - spec/support/helpers/factories.rb
265
+ - spec/active_interactor/interactor/worker_spec.rb
266
+ - spec/active_interactor/interactor/perform/options_spec.rb
267
+ - spec/active_interactor/version_spec.rb
238
268
  - spec/active_interactor/organizer/interactor_interface_spec.rb
239
269
  - spec/active_interactor/organizer/interactor_interface_collection_spec.rb
240
270
  - spec/active_interactor/organizer/base_spec.rb
241
271
  - spec/active_interactor/config_spec.rb
242
- - spec/active_interactor/interactor/perform/options_spec.rb
243
- - spec/active_interactor/interactor/worker_spec.rb
272
+ - spec/active_interactor/context/base_spec.rb
244
273
  - spec/active_interactor/error_spec.rb
245
274
  - spec/active_interactor/base_spec.rb
246
- - spec/active_interactor/context/base_spec.rb
247
- - spec/integration/an_interactor_with_validations_spec.rb
248
- - spec/integration/a_basic_interactor_spec.rb
249
- - spec/integration/active_record_integration_spec.rb
250
- - spec/integration/an_organizer_performing_in_parallel_spec.rb
251
- - spec/integration/an_organizer_with_failing_nested_organizer_spec.rb
252
- - spec/integration/an_interactor_with_after_context_validation_callbacks_spec.rb
253
- - spec/integration/an_interactor_with_an_existing_context_class_spec.rb
254
- - spec/integration/an_interactor_with_before_rollback_callbacks_spec.rb
255
- - spec/integration/an_organizer_with_before_each_callbacks_spec.rb
256
- - spec/integration/an_interactor_with_validations_on_calling_spec.rb
257
- - spec/integration/an_organizer_with_options_callbacks_spec.rb
258
- - spec/integration/an_interactor_with_around_rollback_callbacks_spec.rb
259
- - spec/integration/an_interactor_with_validations_on_called_spec.rb
260
- - spec/integration/an_interactor_with_after_perform_callbacks_spec.rb
261
- - spec/integration/a_failing_interactor_spec.rb
262
- - spec/integration/an_organizer_with_conditionally_organized_interactors_spec.rb
263
- - spec/integration/an_interactor_with_around_perform_callbacks_spec.rb
264
- - spec/integration/an_organizer_with_around_each_callbacks_spec.rb
265
- - spec/integration/an_interactor_with_after_rollback_callbacks_spec.rb
266
- - spec/integration/an_organizer_with_after_each_callbacks_spec.rb
267
- - spec/integration/an_interactor_with_before_perform_callbacks_spec.rb
268
- - spec/integration/a_basic_organizer_spec.rb
269
- - spec/spec_helper.rb
270
- - spec/active_interactor_spec.rb