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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9012fc7c78d543bde97172bb8504d8835fbdc051c9842498544c7c86669638c9
4
- data.tar.gz: 78021a04133da9fbacb96275c369337213a08822c710f325ce6d78b04970db37
3
+ metadata.gz: c87b8365cd3d9a0da8fce865abe9babe04df29df31253697ec01bf45ee81d897
4
+ data.tar.gz: 313ba34f1abc8e4845b71a4b1f209362ad14c08d79dd30a51b120c52e364ee2f
5
5
  SHA512:
6
- metadata.gz: fd9778459fceeda84e49684a18d11ef82b3ba593824c568bee8bce2cd92d311f8020cd128e3274da6d09ace98890ccb1b69eec778e63cf87a9352c24fea3c3e5
7
- data.tar.gz: 879bd00727c7554e5fda0620564fccefbcd4da64ca25e04216d259df1c94d5f289df9c3506a82f262288b53f2c1cb6b2131789a641f0a57e33ddf23a438f278d
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
@@ -1,4 +1,4 @@
1
- FROM ruby:2.7.1
1
+ FROM ruby:3
2
2
 
3
3
  MAINTAINER ProFinda Developers <dev@profinda.com>
4
4
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- opera (0.1.2)
4
+ opera (0.2.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -81,4 +81,4 @@ DEPENDENCIES
81
81
  rspec (~> 3.0)
82
82
 
83
83
  BUNDLED WITH
84
- 2.1.4
84
+ 2.2.15
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Opera
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/opera.svg)](https://badge.fury.io/rb/opera)
4
+ ![Master](https://github.com/Profinda/opera/actions/workflows/release.yml/badge.svg?branch=master)
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
- context[:profile] = dependencies[:current_account].profiles.create(params)
175
+ self.profile = current_account.profiles.create(params)
168
176
  end
169
177
 
170
178
  def send_email
171
- dependencies[:mailer]&.send_mail(profile: context[:profile])
179
+ mailer&.send_mail(profile: profile)
172
180
  end
173
181
 
174
182
  def output
175
- result.output = { model: context[:profile] }
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
- context[:profile] = dependencies[:current_account].profiles.create(context[:profile_schema_output])
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 dependencies[:mailer]
244
- dependencies[:mailer].send_mail(profile: context[:profile])
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: context[:profile] }
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
- context[:profile] = dependencies[:current_account].profiles.build(params)
286
- context[:profile].force_name_validation = true
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 context[:profile].valid?
305
+ return true if profile.valid?
291
306
 
292
307
  result.add_information(missing_validations: "Please check dry validations")
293
- result.add_errors(context[:profile].errors.messages)
308
+ result.add_errors(profile.errors.messages)
294
309
 
295
310
  false
296
311
  end
297
312
 
298
313
  def create
299
- context[:profile].save
314
+ profile.save
300
315
  end
301
316
 
302
317
  def send_email
303
- dependencies[:mailer].send_mail(profile: context[:profile])
318
+ mailer.send_mail(profile: profile)
304
319
  end
305
320
 
306
321
  def output
307
- result.output = { model: context[:profile] }
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
- context[:profile] = dependencies[:current_account].profiles.build(params)
359
- context[:profile].force_name_validation = true
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
- context[:profile] = context[:profile].save
385
+ self.profile = profile.save
368
386
  end
369
387
 
370
388
  def send_email
371
- return true unless dependencies[:mailer]
389
+ return true unless mailer
372
390
 
373
- dependencies[:mailer].send_mail(profile: context[:profile])
391
+ mailer.send_mail(profile: profile)
374
392
  end
375
393
 
376
394
  def output
377
- result.output(model: context[:profile])
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
- context[:profile] = dependencies[:current_account].profiles.build(params)
412
- context[:profile].force_name_validation = true
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
- context[:profile] = context[:profile].save
417
- finish
439
+ self.profile = profile.save
440
+ finish!
418
441
  end
419
442
 
420
443
  def send_email
421
- return true unless dependencies[:mailer]
444
+ return true unless mailer
422
445
 
423
- dependencies[:mailer].send_mail(profile: context[:profile])
446
+ mailer.send_mail(profile: profile)
424
447
  end
425
448
 
426
449
  def output
427
- result.output(model: context[:profile])
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
- context[:profile] = dependencies[:current_account].profiles.create(params)
496
+ self.profile = current_account.profiles.create(params)
469
497
  end
470
498
 
471
499
  def update
472
- context[:profile].update(example_attr: :Example)
500
+ profile.update(example_attr: :Example)
473
501
  end
474
502
 
475
503
  def send_email
476
- return true unless dependencies[:mailer]
504
+ return true unless mailer
477
505
 
478
- dependencies[:mailer].send_mail(profile: context[:profile])
506
+ mailer.send_mail(profile: profile)
479
507
  end
480
508
 
481
509
  def output
482
- result.output = { model: context[:profile] }
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
- context[:profile] = dependencies[:current_account].profiles.create(params)
561
+ self.profile = current_account.profiles.create(params)
531
562
  end
532
563
 
533
564
  def update
534
- context[:profile].update(updated_at: 1.day.ago)
565
+ profile.update(updated_at: 1.day.ago)
535
566
  end
536
567
 
537
568
  def send_email
538
- return true unless dependencies[:mailer]
569
+ return true unless mailer
539
570
 
540
- dependencies[:mailer].send_mail(profile: context[:profile])
571
+ mailer.send_mail(profile: profile)
541
572
  end
542
573
 
543
574
  def output
544
- result.output = { model: context[:profile] }
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
- context[:profile] = dependencies[:current_account].profiles.create(params)
622
+ self.profile = current_account.profiles.create(params)
589
623
  end
590
624
 
591
625
  def update
592
- context[:profile].update(updated_at: 1.day.ago)
626
+ profile.update(updated_at: 1.day.ago)
593
627
  end
594
628
 
595
629
  def send_email
596
- return true unless dependencies[:mailer]
630
+ return true unless mailer
597
631
 
598
- dependencies[:mailer].send_mail(profile: context[:profile])
632
+ mailer.send_mail(profile: profile)
599
633
  end
600
634
 
601
635
  def output
602
- result.output = { model: context[:profile] }
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
- context[:profile] = dependencies[:current_account].profiles.create(params)
684
+ self.profile = current_account.profiles.create(params)
648
685
  end
649
686
 
650
687
  def update
651
- context[:profile].update(updated_at: 1.day.ago)
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
- dependencies[:mailer]&.send_mail(profile: context[:profile])
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 - this method interrupts the execution of steps after is invoked
848
+ - finish! - this method interrupts the execution of steps after is invoked
810
849
 
811
850
  ## Development
812
851
 
@@ -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
- transaction_class.send(transaction_method) do
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
@@ -1,3 +1,3 @@
1
1
  module Opera
2
- VERSION = '0.1.2'
2
+ VERSION = '0.2.3'
3
3
  end
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.1.2
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-03-08 00:00:00.000000000 Z
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.2
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