opera 0.1.2 → 0.2.3
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 +4 -4
- data/.github/workflows/release.yml +66 -0
- data/.github/workflows/specs.yml +34 -0
- data/CHANGELOG.md +13 -1
- data/Dockerfile +1 -1
- data/Gemfile.lock +2 -2
- data/README.md +85 -46
- data/lib/opera/operation/base.rb +35 -7
- data/lib/opera/operation/config.rb +3 -2
- data/lib/opera/operation/instructions/executors/transaction.rb +6 -1
- data/lib/opera/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c87b8365cd3d9a0da8fce865abe9babe04df29df31253697ec01bf45ee81d897
|
4
|
+
data.tar.gz: 313ba34f1abc8e4845b71a4b1f209362ad14c08d79dd30a51b120c52e364ee2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42bdbac9178ca00ea91d998c5d1ee20a125993bc5ac830d5e5f523092527a40d1948a5504b5120d88b72200272994c71839cb2ea6d4361cd1a7402d8e9e76c16
|
7
|
+
data.tar.gz: 1ba960d0d599d5cfc9c0d0c5e788420043fb8bbc4c1608f806bc751b9e4b0dd00744fd3a10a200957ff9fcce7c300c508ca27c5b2d6da3b022601dfb9587dbee
|
@@ -0,0 +1,66 @@
|
|
1
|
+
name: Release
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
test:
|
9
|
+
runs-on: ubuntu-latest
|
10
|
+
strategy:
|
11
|
+
matrix:
|
12
|
+
ruby-version: [ '2.6', '2.7', '3.0' ]
|
13
|
+
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
- name: Set up Ruby
|
17
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
18
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
19
|
+
# uses: ruby/setup-ruby@v1
|
20
|
+
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
|
21
|
+
with:
|
22
|
+
ruby-version: ${{ matrix.ruby-version }}
|
23
|
+
bundler-cache: false # runs 'bundle install' and caches installed gems automatically
|
24
|
+
- name: Install gems
|
25
|
+
run: bundle install
|
26
|
+
- name: Run tests
|
27
|
+
run: bundle exec rspec
|
28
|
+
|
29
|
+
tag:
|
30
|
+
needs: test
|
31
|
+
runs-on: ubuntu-latest
|
32
|
+
|
33
|
+
steps:
|
34
|
+
- uses: actions/checkout@v2
|
35
|
+
|
36
|
+
- name: Tag automatically
|
37
|
+
run: git tag v`cat lib/opera/version.rb | grep 'VERSION' | awk '{ print $3 $4 }' | sed "s/'//g"`
|
38
|
+
|
39
|
+
- name: Push tags
|
40
|
+
run: git push origin --tags
|
41
|
+
|
42
|
+
publish:
|
43
|
+
needs: tag
|
44
|
+
name: Build + Publish
|
45
|
+
runs-on: ubuntu-latest
|
46
|
+
permissions:
|
47
|
+
contents: read
|
48
|
+
packages: write
|
49
|
+
|
50
|
+
steps:
|
51
|
+
- uses: actions/checkout@v2
|
52
|
+
- name: Set up Ruby 2.6
|
53
|
+
uses: actions/setup-ruby@v1
|
54
|
+
with:
|
55
|
+
ruby-version: 2.6.x
|
56
|
+
|
57
|
+
- name: Publish to RubyGems
|
58
|
+
run: |
|
59
|
+
mkdir -p $HOME/.gem
|
60
|
+
touch $HOME/.gem/credentials
|
61
|
+
chmod 0600 $HOME/.gem/credentials
|
62
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
63
|
+
gem build *.gemspec
|
64
|
+
gem push *.gem
|
65
|
+
env:
|
66
|
+
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Specs
|
9
|
+
|
10
|
+
on:
|
11
|
+
pull_request:
|
12
|
+
branches: []
|
13
|
+
|
14
|
+
jobs:
|
15
|
+
test:
|
16
|
+
runs-on: ubuntu-latest
|
17
|
+
strategy:
|
18
|
+
matrix:
|
19
|
+
ruby-version: ['2.6', '2.7', '3.0']
|
20
|
+
|
21
|
+
steps:
|
22
|
+
- uses: actions/checkout@v2
|
23
|
+
- name: Set up Ruby
|
24
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
25
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
26
|
+
# uses: ruby/setup-ruby@v1
|
27
|
+
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
|
28
|
+
with:
|
29
|
+
ruby-version: ${{ matrix.ruby-version }}
|
30
|
+
bundler-cache: false # runs 'bundle install' and caches installed gems automatically
|
31
|
+
- name: Install gems
|
32
|
+
run: bundle install
|
33
|
+
- name: Run tests
|
34
|
+
run: bundle exec rspec
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
# Opera Changelog
|
2
2
|
|
3
|
+
### 0.2.3 - July 26, 2021
|
4
|
+
|
5
|
+
- Support context, params and dependencies accessors
|
6
|
+
- Removed depreceted `finish` method. Please use `finish!` from today
|
7
|
+
|
8
|
+
## 0.2.2 - July 7, 2021
|
9
|
+
|
10
|
+
- Test release using Github Actions
|
11
|
+
|
12
|
+
## 0.2.1 - July 7, 2021
|
13
|
+
|
14
|
+
- Support for transaction options
|
15
|
+
|
3
16
|
## 0.1.0 - September 12, 2020
|
4
17
|
|
5
18
|
- Initial release
|
6
|
-
|
data/Dockerfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Opera
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/opera)
|
4
|
+

|
5
|
+
|
6
|
+
|
3
7
|
Simple DSL for services/interactions classes.
|
4
8
|
|
5
9
|
Opera was born to mimic some of the philosophy of the dry gems but keeping the DSL simple.
|
@@ -31,6 +35,7 @@ Simply initialise the configuration and chose what method you want to use to rep
|
|
31
35
|
Opera::Operation::Config.configure do |config|
|
32
36
|
config.transaction_class = ActiveRecord::Base
|
33
37
|
config.transaction_method = :transaction
|
38
|
+
config.transaction_options = { requires_new: true }
|
34
39
|
config.reporter = defined?(Rollbar) ? Rollbar : Rails.logger
|
35
40
|
end
|
36
41
|
```
|
@@ -151,6 +156,9 @@ Some cases and example how to use new operations
|
|
151
156
|
|
152
157
|
```ruby
|
153
158
|
class Profile::Create < Opera::Operation::Base
|
159
|
+
context_accessor :profile
|
160
|
+
dependencies_reader :current_account, :mailer
|
161
|
+
|
154
162
|
validate :profile_schema
|
155
163
|
|
156
164
|
step :create
|
@@ -164,15 +172,15 @@ class Profile::Create < Opera::Operation::Base
|
|
164
172
|
end
|
165
173
|
|
166
174
|
def create
|
167
|
-
|
175
|
+
self.profile = current_account.profiles.create(params)
|
168
176
|
end
|
169
177
|
|
170
178
|
def send_email
|
171
|
-
|
179
|
+
mailer&.send_mail(profile: profile)
|
172
180
|
end
|
173
181
|
|
174
182
|
def output
|
175
|
-
result.output = { model:
|
183
|
+
result.output = { model: profile }
|
176
184
|
end
|
177
185
|
end
|
178
186
|
```
|
@@ -221,6 +229,9 @@ Profile::Create.call(params: {
|
|
221
229
|
|
222
230
|
```ruby
|
223
231
|
class Profile::Create < Opera::Operation::Base
|
232
|
+
context_accessor :profile
|
233
|
+
dependencies_reader :current_account, :mailer
|
234
|
+
|
224
235
|
validate :profile_schema
|
225
236
|
|
226
237
|
step :create
|
@@ -236,16 +247,17 @@ class Profile::Create < Opera::Operation::Base
|
|
236
247
|
end
|
237
248
|
|
238
249
|
def create
|
239
|
-
|
250
|
+
self.profile = current_account.profiles.create(context[:profile_schema_output])
|
240
251
|
end
|
241
252
|
|
242
253
|
def send_email
|
243
|
-
return true unless
|
244
|
-
|
254
|
+
return true unless mailer
|
255
|
+
|
256
|
+
mailer.send_mail(profile: profile)
|
245
257
|
end
|
246
258
|
|
247
259
|
def output
|
248
|
-
result.output = { model:
|
260
|
+
result.output = { model: profile }
|
249
261
|
end
|
250
262
|
end
|
251
263
|
```
|
@@ -267,6 +279,9 @@ Profile::Create.call(params: {
|
|
267
279
|
|
268
280
|
```ruby
|
269
281
|
class Profile::Create < Opera::Operation::Base
|
282
|
+
context_accessor :profile
|
283
|
+
dependencies_reader :current_account, :mailer
|
284
|
+
|
270
285
|
validate :profile_schema
|
271
286
|
|
272
287
|
step :build_record
|
@@ -282,29 +297,29 @@ class Profile::Create < Opera::Operation::Base
|
|
282
297
|
end
|
283
298
|
|
284
299
|
def build_record
|
285
|
-
|
286
|
-
|
300
|
+
self.profile = current_account.profiles.build(params)
|
301
|
+
self.profile.force_name_validation = true
|
287
302
|
end
|
288
303
|
|
289
304
|
def old_validation
|
290
|
-
return true if
|
305
|
+
return true if profile.valid?
|
291
306
|
|
292
307
|
result.add_information(missing_validations: "Please check dry validations")
|
293
|
-
result.add_errors(
|
308
|
+
result.add_errors(profile.errors.messages)
|
294
309
|
|
295
310
|
false
|
296
311
|
end
|
297
312
|
|
298
313
|
def create
|
299
|
-
|
314
|
+
profile.save
|
300
315
|
end
|
301
316
|
|
302
317
|
def send_email
|
303
|
-
|
318
|
+
mailer.send_mail(profile: profile)
|
304
319
|
end
|
305
320
|
|
306
321
|
def output
|
307
|
-
result.output = { model:
|
322
|
+
result.output = { model: profile }
|
308
323
|
end
|
309
324
|
end
|
310
325
|
```
|
@@ -340,6 +355,9 @@ Profile::Create.call(params: {
|
|
340
355
|
|
341
356
|
```ruby
|
342
357
|
class Profile::Create < Opera::Operation::Base
|
358
|
+
context_accessor :profile
|
359
|
+
dependencies_reader :current_account, :mailer
|
360
|
+
|
343
361
|
validate :profile_schema
|
344
362
|
|
345
363
|
step :build_record
|
@@ -355,8 +373,8 @@ class Profile::Create < Opera::Operation::Base
|
|
355
373
|
end
|
356
374
|
|
357
375
|
def build_record
|
358
|
-
|
359
|
-
|
376
|
+
self.profile = current_account.profiles.build(params)
|
377
|
+
self.profile.force_name_validation = true
|
360
378
|
end
|
361
379
|
|
362
380
|
def exception
|
@@ -364,21 +382,23 @@ class Profile::Create < Opera::Operation::Base
|
|
364
382
|
end
|
365
383
|
|
366
384
|
def create
|
367
|
-
|
385
|
+
self.profile = profile.save
|
368
386
|
end
|
369
387
|
|
370
388
|
def send_email
|
371
|
-
return true unless
|
389
|
+
return true unless mailer
|
372
390
|
|
373
|
-
|
391
|
+
mailer.send_mail(profile: profile)
|
374
392
|
end
|
375
393
|
|
376
394
|
def output
|
377
|
-
result.output(model:
|
395
|
+
result.output(model: profile)
|
378
396
|
end
|
379
397
|
end
|
380
398
|
```
|
399
|
+
|
381
400
|
##### Call with step throwing exception
|
401
|
+
|
382
402
|
```ruby
|
383
403
|
result = Profile::Create.call(params: {
|
384
404
|
first_name: :foo,
|
@@ -394,6 +414,9 @@ result = Profile::Create.call(params: {
|
|
394
414
|
|
395
415
|
```ruby
|
396
416
|
class Profile::Create < Opera::Operation::Base
|
417
|
+
context_accessor :profile
|
418
|
+
dependencies_reader :current_account, :mailer
|
419
|
+
|
397
420
|
validate :profile_schema
|
398
421
|
|
399
422
|
step :build_record
|
@@ -408,27 +431,29 @@ class Profile::Create < Opera::Operation::Base
|
|
408
431
|
end
|
409
432
|
|
410
433
|
def build_record
|
411
|
-
|
412
|
-
|
434
|
+
self.profile = current_account.profiles.build(params)
|
435
|
+
self.profile.force_name_validation = true
|
413
436
|
end
|
414
437
|
|
415
438
|
def create
|
416
|
-
|
417
|
-
finish
|
439
|
+
self.profile = profile.save
|
440
|
+
finish!
|
418
441
|
end
|
419
442
|
|
420
443
|
def send_email
|
421
|
-
return true unless
|
444
|
+
return true unless mailer
|
422
445
|
|
423
|
-
|
446
|
+
mailer.send_mail(profile: profile)
|
424
447
|
end
|
425
448
|
|
426
449
|
def output
|
427
|
-
result.output(model:
|
450
|
+
result.output(model: profile)
|
428
451
|
end
|
429
452
|
end
|
430
453
|
```
|
454
|
+
|
431
455
|
##### Call
|
456
|
+
|
432
457
|
```ruby
|
433
458
|
result = Profile::Create.call(params: {
|
434
459
|
first_name: :foo,
|
@@ -448,6 +473,9 @@ class Profile::Create < Opera::Operation::Base
|
|
448
473
|
config.transaction_class = Profile
|
449
474
|
end
|
450
475
|
|
476
|
+
context_accessor :profile
|
477
|
+
dependencies_reader :current_account, :mailer
|
478
|
+
|
451
479
|
validate :profile_schema
|
452
480
|
|
453
481
|
transaction do
|
@@ -465,21 +493,21 @@ class Profile::Create < Opera::Operation::Base
|
|
465
493
|
end
|
466
494
|
|
467
495
|
def create
|
468
|
-
|
496
|
+
self.profile = current_account.profiles.create(params)
|
469
497
|
end
|
470
498
|
|
471
499
|
def update
|
472
|
-
|
500
|
+
profile.update(example_attr: :Example)
|
473
501
|
end
|
474
502
|
|
475
503
|
def send_email
|
476
|
-
return true unless
|
504
|
+
return true unless mailer
|
477
505
|
|
478
|
-
|
506
|
+
mailer.send_mail(profile: profile)
|
479
507
|
end
|
480
508
|
|
481
509
|
def output
|
482
|
-
result.output = { model:
|
510
|
+
result.output = { model: profile }
|
483
511
|
end
|
484
512
|
end
|
485
513
|
```
|
@@ -510,6 +538,9 @@ class Profile::Create < Opera::Operation::Base
|
|
510
538
|
config.transaction_class = Profile
|
511
539
|
end
|
512
540
|
|
541
|
+
context_accessor :profile
|
542
|
+
dependencies_reader :current_account, :mailer
|
543
|
+
|
513
544
|
validate :profile_schema
|
514
545
|
|
515
546
|
transaction do
|
@@ -527,21 +558,21 @@ class Profile::Create < Opera::Operation::Base
|
|
527
558
|
end
|
528
559
|
|
529
560
|
def create
|
530
|
-
|
561
|
+
self.profile = current_account.profiles.create(params)
|
531
562
|
end
|
532
563
|
|
533
564
|
def update
|
534
|
-
|
565
|
+
profile.update(updated_at: 1.day.ago)
|
535
566
|
end
|
536
567
|
|
537
568
|
def send_email
|
538
|
-
return true unless
|
569
|
+
return true unless mailer
|
539
570
|
|
540
|
-
|
571
|
+
mailer.send_mail(profile: profile)
|
541
572
|
end
|
542
573
|
|
543
574
|
def output
|
544
|
-
result.output = { model:
|
575
|
+
result.output = { model: profile }
|
545
576
|
end
|
546
577
|
end
|
547
578
|
```
|
@@ -568,6 +599,9 @@ D, [2020-08-17T12:10:44.898132 #2741] DEBUG -- : (10.3ms) COMMIT
|
|
568
599
|
|
569
600
|
```ruby
|
570
601
|
class Profile::Create < Opera::Operation::Base
|
602
|
+
context_accessor :profile
|
603
|
+
dependencies_reader :current_account, :mailer
|
604
|
+
|
571
605
|
validate :profile_schema
|
572
606
|
|
573
607
|
step :create
|
@@ -585,21 +619,21 @@ class Profile::Create < Opera::Operation::Base
|
|
585
619
|
end
|
586
620
|
|
587
621
|
def create
|
588
|
-
|
622
|
+
self.profile = current_account.profiles.create(params)
|
589
623
|
end
|
590
624
|
|
591
625
|
def update
|
592
|
-
|
626
|
+
profile.update(updated_at: 1.day.ago)
|
593
627
|
end
|
594
628
|
|
595
629
|
def send_email
|
596
|
-
return true unless
|
630
|
+
return true unless mailer
|
597
631
|
|
598
|
-
|
632
|
+
mailer.send_mail(profile: profile)
|
599
633
|
end
|
600
634
|
|
601
635
|
def output
|
602
|
-
result.output = { model:
|
636
|
+
result.output = { model: profile }
|
603
637
|
end
|
604
638
|
end
|
605
639
|
```
|
@@ -620,6 +654,9 @@ Profile::Create.call(params: {
|
|
620
654
|
|
621
655
|
```ruby
|
622
656
|
class Profile::Create < Opera::Operation::Base
|
657
|
+
context_accessor :profile
|
658
|
+
dependencies_reader :current_account, :mailer
|
659
|
+
|
623
660
|
validate :profile_schema
|
624
661
|
|
625
662
|
success :populate
|
@@ -644,17 +681,17 @@ class Profile::Create < Opera::Operation::Base
|
|
644
681
|
end
|
645
682
|
|
646
683
|
def create
|
647
|
-
|
684
|
+
self.profile = current_account.profiles.create(params)
|
648
685
|
end
|
649
686
|
|
650
687
|
def update
|
651
|
-
|
688
|
+
profile.update(updated_at: 1.day.ago)
|
652
689
|
end
|
653
690
|
|
654
691
|
# NOTE: We can add an error in this step and it won't break the execution
|
655
692
|
def send_email
|
656
693
|
result.add_error('mailer', 'Missing dependency')
|
657
|
-
|
694
|
+
mailer&.send_mail(profile: profile)
|
658
695
|
end
|
659
696
|
|
660
697
|
def output
|
@@ -787,6 +824,8 @@ Opera::Operation::Result.new(output: 'success')
|
|
787
824
|
|
788
825
|
## Opera::Operation::Base - Class Methods
|
789
826
|
>
|
827
|
+
- context_[reader|writer|accessor] - predefined methods for easy access
|
828
|
+
- [params|dependencies]_reader - predefined readers for immutable arguments
|
790
829
|
- step(Symbol) - single instruction
|
791
830
|
- return [Truthly] - continue operation execution
|
792
831
|
- return [False] - stops operation execution
|
@@ -806,7 +845,7 @@ Opera::Operation::Result.new(output: 'success')
|
|
806
845
|
- context [Hash] - used to pass information between steps - only for internal usage
|
807
846
|
- params [Hash] - immutable and received in call method
|
808
847
|
- dependencies [Hash] - immutable and received in call method
|
809
|
-
- finish
|
848
|
+
- finish! - this method interrupts the execution of steps after is invoked
|
810
849
|
|
811
850
|
## Development
|
812
851
|
|
data/lib/opera/operation/base.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
module Opera
|
4
4
|
module Operation
|
5
5
|
class Base
|
6
|
-
extend Gem::Deprecate
|
7
6
|
include Opera::Operation::Builder
|
8
7
|
|
9
8
|
attr_accessor :context
|
@@ -21,12 +20,6 @@ module Opera
|
|
21
20
|
self.class.config
|
22
21
|
end
|
23
22
|
|
24
|
-
def finish
|
25
|
-
finish!
|
26
|
-
end
|
27
|
-
|
28
|
-
deprecate :finish, :finish!, 2019, 6
|
29
|
-
|
30
23
|
def finish!
|
31
24
|
@finished = true
|
32
25
|
end
|
@@ -54,6 +47,41 @@ module Opera
|
|
54
47
|
def reporter
|
55
48
|
config.reporter
|
56
49
|
end
|
50
|
+
|
51
|
+
def check_method_availability!(method)
|
52
|
+
return if instance_methods(false).none?(method)
|
53
|
+
|
54
|
+
raise(ArgumentError, "Method #{method} is already defined")
|
55
|
+
end
|
56
|
+
|
57
|
+
%i[context params dependencies].each do |method|
|
58
|
+
define_method("#{method}_reader") do |*attributes, **options|
|
59
|
+
attributes.map(&:to_sym).each do |attribute|
|
60
|
+
check_method_availability!(attribute)
|
61
|
+
|
62
|
+
define_method(attribute) do
|
63
|
+
send(method)[attribute] ||= options[:default]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
%i[context].each do |method|
|
70
|
+
define_method("#{method}_writer") do |*attributes|
|
71
|
+
attributes.map(&:to_sym).each do |attribute|
|
72
|
+
check_method_availability!("#{attribute}=")
|
73
|
+
|
74
|
+
define_method("#{attribute}=") do |value|
|
75
|
+
send(method)[attribute] = value
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
define_method("#{method}_accessor") do |*attributes, **options|
|
81
|
+
send("#{method}_reader", *attributes, **options)
|
82
|
+
send("#{method}_writer", *attributes)
|
83
|
+
end
|
84
|
+
end
|
57
85
|
end
|
58
86
|
end
|
59
87
|
end
|
@@ -3,11 +3,12 @@
|
|
3
3
|
module Opera
|
4
4
|
module Operation
|
5
5
|
class Config
|
6
|
-
attr_accessor :transaction_class, :transaction_method, :reporter
|
6
|
+
attr_accessor :transaction_class, :transaction_method, :transaction_options, :reporter
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@transaction_class = self.class.transaction_class
|
10
10
|
@transaction_method = self.class.transaction_method || :transaction
|
11
|
+
@transaction_options = self.class.transaction_options
|
11
12
|
@reporter = custom_reporter || self.class.reporter
|
12
13
|
end
|
13
14
|
|
@@ -20,7 +21,7 @@ module Opera
|
|
20
21
|
end
|
21
22
|
|
22
23
|
class << self
|
23
|
-
attr_accessor :transaction_class, :transaction_method, :reporter
|
24
|
+
attr_accessor :transaction_class, :transaction_method, :transaction_options, :reporter
|
24
25
|
|
25
26
|
def configure
|
26
27
|
yield self
|
@@ -8,7 +8,8 @@ module Opera
|
|
8
8
|
class RollbackTransactionError < Opera::Error; end
|
9
9
|
|
10
10
|
def call(instruction)
|
11
|
-
|
11
|
+
arguments = transaction_options ? [transaction_method, transaction_options] : [transaction_method]
|
12
|
+
transaction_class.send(*arguments) do
|
12
13
|
super
|
13
14
|
|
14
15
|
return if !operation.finished? && result.success?
|
@@ -26,6 +27,10 @@ module Opera
|
|
26
27
|
def transaction_method
|
27
28
|
config.transaction_method
|
28
29
|
end
|
30
|
+
|
31
|
+
def transaction_options
|
32
|
+
config.transaction_options
|
33
|
+
end
|
29
34
|
end
|
30
35
|
end
|
31
36
|
end
|
data/lib/opera/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opera
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ProFinda Development Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-validation
|
@@ -59,6 +59,8 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
+
- ".github/workflows/release.yml"
|
63
|
+
- ".github/workflows/specs.yml"
|
62
64
|
- ".gitignore"
|
63
65
|
- ".rspec"
|
64
66
|
- ".travis.yml"
|
@@ -113,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
115
|
- !ruby/object:Gem::Version
|
114
116
|
version: '0'
|
115
117
|
requirements: []
|
116
|
-
rubygems_version: 3.1
|
118
|
+
rubygems_version: 3.0.3.1
|
117
119
|
signing_key:
|
118
120
|
specification_version: 4
|
119
121
|
summary: Use simple DSL language to keep your Operations clean and maintainable
|