opera 0.2.18 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +1 -1
- data/.github/workflows/specs.yml +1 -1
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +46 -49
- data/README.md +115 -42
- data/lib/opera/operation/attributes_dsl.rb +57 -0
- data/lib/opera/operation/base.rb +21 -24
- data/lib/opera/operation.rb +1 -0
- data/lib/opera/version.rb +1 -1
- data/opera.gemspec +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78c8e21eb4fbdc76ad340cb87f6f3af30bf504553b7e7162716ef4bf5cd425a3
|
4
|
+
data.tar.gz: b510bf32f29e9613cffcf8a16515d524d949ed923c0db50dd203890ad566b055
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7976ee8f823cb754ce05007eb530b80c7ec528ddac44683530f046ced1927771ef081e346ce8037353923b86f80dc0a72e024fbb3568f0a7f17da1bedbe2d0e
|
7
|
+
data.tar.gz: ee81d97a57c75244f99054a95ad8f89fea341cf3bc02efeb231609a443509b224622cbef2981cfc432b4e64b45a68abfa6a6692e51214b10b60827342eaf7fa8
|
data/.github/workflows/specs.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Opera Changelog
|
2
2
|
|
3
|
+
### 0.3.1 - October 10, 2024
|
4
|
+
|
5
|
+
- change minor ruby version to align it with specs
|
6
|
+
|
7
|
+
### 0.3.0 - September 20, 2024
|
8
|
+
|
9
|
+
- add new syntax for context, params and dependencies readers and accessors
|
10
|
+
|
3
11
|
### 0.2.18 - September 20, 2024
|
4
12
|
|
5
13
|
- added `output!` method on Result object
|
data/Gemfile.lock
CHANGED
@@ -1,74 +1,71 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
opera (0.
|
4
|
+
opera (0.3.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
bigdecimal (3.1.8)
|
9
10
|
byebug (11.1.3)
|
10
11
|
coderay (1.1.3)
|
11
|
-
concurrent-ruby (1.
|
12
|
-
diff-lcs (1.
|
13
|
-
dry-configurable (
|
12
|
+
concurrent-ruby (1.3.4)
|
13
|
+
diff-lcs (1.5.1)
|
14
|
+
dry-configurable (1.2.0)
|
15
|
+
dry-core (~> 1.0, < 2)
|
16
|
+
zeitwerk (~> 2.6)
|
17
|
+
dry-core (1.0.1)
|
14
18
|
concurrent-ruby (~> 1.0)
|
15
|
-
|
16
|
-
|
17
|
-
dry-
|
19
|
+
zeitwerk (~> 2.6)
|
20
|
+
dry-inflector (1.1.0)
|
21
|
+
dry-initializer (3.1.1)
|
22
|
+
dry-logic (1.5.0)
|
18
23
|
concurrent-ruby (~> 1.0)
|
19
|
-
dry-
|
20
|
-
|
24
|
+
dry-core (~> 1.0, < 2)
|
25
|
+
zeitwerk (~> 2.6)
|
26
|
+
dry-schema (1.13.4)
|
21
27
|
concurrent-ruby (~> 1.0)
|
22
|
-
|
23
|
-
|
24
|
-
dry-initializer (3.0.4)
|
25
|
-
dry-logic (1.0.8)
|
26
|
-
concurrent-ruby (~> 1.0)
|
27
|
-
dry-core (~> 0.2)
|
28
|
-
dry-equalizer (~> 0.2)
|
29
|
-
dry-schema (1.5.6)
|
30
|
-
concurrent-ruby (~> 1.0)
|
31
|
-
dry-configurable (~> 0.8, >= 0.8.3)
|
32
|
-
dry-core (~> 0.4)
|
33
|
-
dry-equalizer (~> 0.2)
|
28
|
+
dry-configurable (~> 1.0, >= 1.0.1)
|
29
|
+
dry-core (~> 1.0, < 2)
|
34
30
|
dry-initializer (~> 3.0)
|
35
|
-
dry-logic (
|
36
|
-
dry-types (
|
37
|
-
|
31
|
+
dry-logic (>= 1.4, < 2)
|
32
|
+
dry-types (>= 1.7, < 2)
|
33
|
+
zeitwerk (~> 2.6)
|
34
|
+
dry-types (1.7.2)
|
35
|
+
bigdecimal (~> 3.0)
|
38
36
|
concurrent-ruby (~> 1.0)
|
39
|
-
dry-
|
40
|
-
dry-
|
41
|
-
dry-
|
42
|
-
|
43
|
-
|
44
|
-
dry-validation (1.6.0)
|
37
|
+
dry-core (~> 1.0)
|
38
|
+
dry-inflector (~> 1.0)
|
39
|
+
dry-logic (~> 1.4)
|
40
|
+
zeitwerk (~> 2.6)
|
41
|
+
dry-validation (1.10.0)
|
45
42
|
concurrent-ruby (~> 1.0)
|
46
|
-
dry-
|
47
|
-
dry-core (~> 0.4)
|
48
|
-
dry-equalizer (~> 0.2)
|
43
|
+
dry-core (~> 1.0, < 2)
|
49
44
|
dry-initializer (~> 3.0)
|
50
|
-
dry-schema (
|
51
|
-
|
52
|
-
|
45
|
+
dry-schema (>= 1.12, < 2)
|
46
|
+
zeitwerk (~> 2.6)
|
47
|
+
method_source (1.1.0)
|
48
|
+
pry (0.14.2)
|
53
49
|
coderay (~> 1.1)
|
54
50
|
method_source (~> 1.0)
|
55
|
-
pry-byebug (3.
|
51
|
+
pry-byebug (3.10.1)
|
56
52
|
byebug (~> 11.0)
|
57
|
-
pry (
|
53
|
+
pry (>= 0.13, < 0.15)
|
58
54
|
rake (12.3.3)
|
59
|
-
rspec (3.
|
60
|
-
rspec-core (~> 3.
|
61
|
-
rspec-expectations (~> 3.
|
62
|
-
rspec-mocks (~> 3.
|
63
|
-
rspec-core (3.
|
64
|
-
rspec-support (~> 3.
|
65
|
-
rspec-expectations (3.
|
55
|
+
rspec (3.13.0)
|
56
|
+
rspec-core (~> 3.13.0)
|
57
|
+
rspec-expectations (~> 3.13.0)
|
58
|
+
rspec-mocks (~> 3.13.0)
|
59
|
+
rspec-core (3.13.1)
|
60
|
+
rspec-support (~> 3.13.0)
|
61
|
+
rspec-expectations (3.13.3)
|
66
62
|
diff-lcs (>= 1.2.0, < 2.0)
|
67
|
-
rspec-support (~> 3.
|
68
|
-
rspec-mocks (3.
|
63
|
+
rspec-support (~> 3.13.0)
|
64
|
+
rspec-mocks (3.13.1)
|
69
65
|
diff-lcs (>= 1.2.0, < 2.0)
|
70
|
-
rspec-support (~> 3.
|
71
|
-
rspec-support (3.
|
66
|
+
rspec-support (~> 3.13.0)
|
67
|
+
rspec-support (3.13.1)
|
68
|
+
zeitwerk (2.6.18)
|
72
69
|
|
73
70
|
PLATFORMS
|
74
71
|
ruby
|
data/README.md
CHANGED
@@ -26,6 +26,8 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
$ gem install opera
|
28
28
|
|
29
|
+
Note. If you are using Ruby 2.x please use Opera 0.2.x
|
30
|
+
|
29
31
|
## Configuration
|
30
32
|
|
31
33
|
Opera is built to be used with or without Rails.
|
@@ -159,8 +161,16 @@ Some cases and example how to use new operations
|
|
159
161
|
|
160
162
|
```ruby
|
161
163
|
class Profile::Create < Opera::Operation::Base
|
162
|
-
|
163
|
-
|
164
|
+
# DEPRECATED
|
165
|
+
# context_accessor :profile
|
166
|
+
context do
|
167
|
+
attr_accessor :profile
|
168
|
+
end
|
169
|
+
# DEPRECATED
|
170
|
+
# dependencies_reader :current_account, :mailer
|
171
|
+
dependencies do
|
172
|
+
attr_reader :current_account, :mailer
|
173
|
+
end
|
164
174
|
|
165
175
|
validate :profile_schema
|
166
176
|
|
@@ -232,8 +242,17 @@ Profile::Create.call(params: {
|
|
232
242
|
|
233
243
|
```ruby
|
234
244
|
class Profile::Create < Opera::Operation::Base
|
235
|
-
|
236
|
-
|
245
|
+
# DEPRECATED
|
246
|
+
# context_accessor :profile
|
247
|
+
context do
|
248
|
+
attr_accessor :profile
|
249
|
+
end
|
250
|
+
# DEPRECATED
|
251
|
+
# dependencies_reader :current_account, :mailer
|
252
|
+
dependencies do
|
253
|
+
attr_reader :current_account, :mailer
|
254
|
+
end
|
255
|
+
|
237
256
|
|
238
257
|
validate :profile_schema
|
239
258
|
|
@@ -282,8 +301,16 @@ Profile::Create.call(params: {
|
|
282
301
|
|
283
302
|
```ruby
|
284
303
|
class Profile::Create < Opera::Operation::Base
|
285
|
-
|
286
|
-
|
304
|
+
# DEPRECATED
|
305
|
+
# context_accessor :profile
|
306
|
+
context do
|
307
|
+
attr_accessor :profile
|
308
|
+
end
|
309
|
+
# DEPRECATED
|
310
|
+
# dependencies_reader :current_account, :mailer
|
311
|
+
dependencies do
|
312
|
+
attr_reader :current_account, :mailer
|
313
|
+
end
|
287
314
|
|
288
315
|
validate :profile_schema
|
289
316
|
|
@@ -358,8 +385,16 @@ Profile::Create.call(params: {
|
|
358
385
|
|
359
386
|
```ruby
|
360
387
|
class Profile::Create < Opera::Operation::Base
|
361
|
-
|
362
|
-
|
388
|
+
# DEPRECATED
|
389
|
+
# context_accessor :profile
|
390
|
+
context do
|
391
|
+
attr_accessor :profile
|
392
|
+
end
|
393
|
+
# DEPRECATED
|
394
|
+
# dependencies_reader :current_account, :mailer
|
395
|
+
dependencies do
|
396
|
+
attr_reader :current_account, :mailer
|
397
|
+
end
|
363
398
|
|
364
399
|
validate :profile_schema
|
365
400
|
|
@@ -417,8 +452,16 @@ result = Profile::Create.call(params: {
|
|
417
452
|
|
418
453
|
```ruby
|
419
454
|
class Profile::Create < Opera::Operation::Base
|
420
|
-
|
421
|
-
|
455
|
+
# DEPRECATED
|
456
|
+
# context_accessor :profile
|
457
|
+
context do
|
458
|
+
attr_accessor :profile
|
459
|
+
end
|
460
|
+
# DEPRECATED
|
461
|
+
# dependencies_reader :current_account, :mailer
|
462
|
+
dependencies do
|
463
|
+
attr_reader :current_account, :mailer
|
464
|
+
end
|
422
465
|
|
423
466
|
validate :profile_schema
|
424
467
|
|
@@ -476,8 +519,16 @@ class Profile::Create < Opera::Operation::Base
|
|
476
519
|
config.transaction_class = Profile
|
477
520
|
end
|
478
521
|
|
479
|
-
|
480
|
-
|
522
|
+
# DEPRECATED
|
523
|
+
# context_accessor :profile
|
524
|
+
context do
|
525
|
+
attr_accessor :profile
|
526
|
+
end
|
527
|
+
# DEPRECATED
|
528
|
+
# dependencies_reader :current_account, :mailer
|
529
|
+
dependencies do
|
530
|
+
attr_reader :current_account, :mailer
|
531
|
+
end
|
481
532
|
|
482
533
|
validate :profile_schema
|
483
534
|
|
@@ -541,8 +592,16 @@ class Profile::Create < Opera::Operation::Base
|
|
541
592
|
config.transaction_class = Profile
|
542
593
|
end
|
543
594
|
|
544
|
-
|
545
|
-
|
595
|
+
# DEPRECATED
|
596
|
+
# context_accessor :profile
|
597
|
+
context do
|
598
|
+
attr_accessor :profile
|
599
|
+
end
|
600
|
+
# DEPRECATED
|
601
|
+
# dependencies_reader :current_account, :mailer
|
602
|
+
dependencies do
|
603
|
+
attr_reader :current_account, :mailer
|
604
|
+
end
|
546
605
|
|
547
606
|
validate :profile_schema
|
548
607
|
|
@@ -602,8 +661,16 @@ D, [2020-08-17T12:10:44.898132 #2741] DEBUG -- : (10.3ms) COMMIT
|
|
602
661
|
|
603
662
|
```ruby
|
604
663
|
class Profile::Create < Opera::Operation::Base
|
605
|
-
|
606
|
-
|
664
|
+
# DEPRECATED
|
665
|
+
# context_accessor :profile
|
666
|
+
context do
|
667
|
+
attr_accessor :profile
|
668
|
+
end
|
669
|
+
# DEPRECATED
|
670
|
+
# dependencies_reader :current_account, :mailer
|
671
|
+
dependencies do
|
672
|
+
attr_reader :current_account, :mailer
|
673
|
+
end
|
607
674
|
|
608
675
|
validate :profile_schema
|
609
676
|
|
@@ -657,8 +724,16 @@ Profile::Create.call(params: {
|
|
657
724
|
|
658
725
|
```ruby
|
659
726
|
class Profile::Create < Opera::Operation::Base
|
660
|
-
|
661
|
-
|
727
|
+
# DEPRECATED
|
728
|
+
# context_accessor :profile
|
729
|
+
context do
|
730
|
+
attr_accessor :profile
|
731
|
+
end
|
732
|
+
# DEPRECATED
|
733
|
+
# dependencies_reader :current_account, :mailer
|
734
|
+
dependencies do
|
735
|
+
attr_reader :current_account, :mailer
|
736
|
+
end
|
662
737
|
|
663
738
|
validate :profile_schema
|
664
739
|
|
@@ -719,8 +794,16 @@ Profile::Create.call(params: {
|
|
719
794
|
|
720
795
|
```ruby
|
721
796
|
class Profile::Create < Opera::Operation::Base
|
722
|
-
|
723
|
-
|
797
|
+
# DEPRECATED
|
798
|
+
# context_accessor :profile
|
799
|
+
context do
|
800
|
+
attr_accessor :profile
|
801
|
+
end
|
802
|
+
# DEPRECATED
|
803
|
+
# dependencies_reader :current_account, :mailer
|
804
|
+
dependencies do
|
805
|
+
attr_reader :current_account, :mailer
|
806
|
+
end
|
724
807
|
|
725
808
|
validate :profile_schema
|
726
809
|
|
@@ -977,26 +1060,11 @@ end
|
|
977
1060
|
|
978
1061
|
For creating instance methods that are meant to be read-only and not stored within a context hash, defining these methods as private is a more suitable and clear approach compared to using context_reader with a default. This method ensures that transient dependencies remain well-encapsulated and are not confused with persistent application state.
|
979
1062
|
|
980
|
-
|
1063
|
+
### `context|params|depenencies`
|
981
1064
|
|
982
|
-
The `
|
983
|
-
|
984
|
-
#### Usage
|
985
|
-
```ruby
|
986
|
-
context_writer :profile
|
1065
|
+
The `context|params|depenencies` helper method is designed to enable easy access to and modification of values for specified keys within a `context` hash. This method dynamically defines both getter and setter methods for the designated keys, facilitating straightforward retrieval and update of values.
|
987
1066
|
|
988
|
-
|
989
|
-
|
990
|
-
def fetch_profile
|
991
|
-
self.profile = ProfileFetcher.call # sets context[:profile]
|
992
|
-
end
|
993
|
-
```
|
994
|
-
|
995
|
-
#### `context_accessor`
|
996
|
-
|
997
|
-
The `context_accessor` helper method is designed to enable easy access to and modification of values for specified keys within a `context` hash. This method dynamically defines both getter and setter methods for the designated keys, facilitating straightforward retrieval and update of values.
|
998
|
-
|
999
|
-
#### Parameters
|
1067
|
+
#### attr_reader, attr_accessor Parameters
|
1000
1068
|
|
1001
1069
|
**key (Symbol):** The key(s) for which the getter and setter methods are to be created. These symbols will correspond to keys in the context hash.
|
1002
1070
|
|
@@ -1004,7 +1072,9 @@ The `context_accessor` helper method is designed to enable easy access to and mo
|
|
1004
1072
|
|
1005
1073
|
#### Usage
|
1006
1074
|
```ruby
|
1007
|
-
|
1075
|
+
context do
|
1076
|
+
attr_accessor :profile
|
1077
|
+
end
|
1008
1078
|
|
1009
1079
|
step :fetch_profile
|
1010
1080
|
step :update_profile
|
@@ -1019,16 +1089,19 @@ end
|
|
1019
1089
|
```
|
1020
1090
|
|
1021
1091
|
```ruby
|
1022
|
-
|
1092
|
+
context do
|
1093
|
+
attr_accessor :profile, default: -> { Profile.new }
|
1094
|
+
end
|
1023
1095
|
```
|
1024
1096
|
|
1025
1097
|
```ruby
|
1026
|
-
|
1098
|
+
context do
|
1099
|
+
attr_accessor :profile, :account
|
1100
|
+
end
|
1027
1101
|
```
|
1028
1102
|
|
1029
1103
|
#### Other methods
|
1030
1104
|
>
|
1031
|
-
- [params|dependencies]_reader - predefined readers for immutable arguments
|
1032
1105
|
- step(Symbol) - single instruction
|
1033
1106
|
- return [Truthly] - continue operation execution
|
1034
1107
|
- return [False] - stops operation execution
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Opera
|
4
|
+
module Operation
|
5
|
+
class AttributesDSL
|
6
|
+
attr_accessor :klass, :block_name, :allowed
|
7
|
+
|
8
|
+
def initialize(klass:, block_name:, allowed: [:attr_reader])
|
9
|
+
@klass = klass
|
10
|
+
@allowed = allowed
|
11
|
+
@block_name = block_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def attr_reader(*attributes, **options)
|
15
|
+
raise NoMethodError, "You cannot use attr_reader inside #{klass.name}##{block_name}" unless allowed.include?(:attr_reader)
|
16
|
+
|
17
|
+
attributes.each do |attribute|
|
18
|
+
klass.check_method_availability!(attribute)
|
19
|
+
|
20
|
+
method = block_name
|
21
|
+
klass.define_method(attribute) do
|
22
|
+
value = if send(method).key?(attribute)
|
23
|
+
send(method)[attribute]
|
24
|
+
elsif options[:default]
|
25
|
+
instance_exec(&options[:default])
|
26
|
+
end
|
27
|
+
|
28
|
+
if send(method).frozen?
|
29
|
+
send(method)[attribute] || value
|
30
|
+
else
|
31
|
+
send(method)[attribute] ||= value
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def attr_writer(*attributes, **options)
|
38
|
+
raise NoMethodError, "You cannot use attr_writer inside #{klass.name}##{block_name}" unless allowed.include?(:attr_accessor)
|
39
|
+
|
40
|
+
attributes.each do |attribute|
|
41
|
+
klass.check_method_availability!("#{attribute}=")
|
42
|
+
method = block_name
|
43
|
+
klass.define_method("#{attribute}=") do |value|
|
44
|
+
send(method)[attribute] = value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def attr_accessor(*attributes, **options)
|
50
|
+
raise NoMethodError, "You cannot use attr_accessor inside #{klass.name}##{block_name}" unless allowed.include?(:attr_accessor)
|
51
|
+
|
52
|
+
attr_reader(*attributes, **options)
|
53
|
+
attr_writer(*attributes)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/opera/operation/base.rb
CHANGED
@@ -55,42 +55,39 @@ module Opera
|
|
55
55
|
raise(ArgumentError, "Method #{method} is already defined")
|
56
56
|
end
|
57
57
|
|
58
|
+
def context(&blk)
|
59
|
+
AttributesDSL.new(klass: self, block_name: :context, allowed: [:attr_reader, :attr_accessor]).instance_exec(&blk)
|
60
|
+
end
|
61
|
+
|
62
|
+
def params(&blk)
|
63
|
+
AttributesDSL.new(klass: self, block_name: :params).instance_exec(&blk)
|
64
|
+
end
|
65
|
+
|
66
|
+
def dependencies(&blk)
|
67
|
+
AttributesDSL.new(klass: self, block_name: :dependencies).instance_exec(&blk)
|
68
|
+
end
|
69
|
+
|
70
|
+
# TODO: Delete with newer version
|
58
71
|
%i[context params dependencies].each do |method|
|
59
72
|
define_method("#{method}_reader") do |*attributes, **options|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
define_method(attribute) do
|
64
|
-
value = if send(method).key?(attribute)
|
65
|
-
send(method)[attribute]
|
66
|
-
elsif options[:default]
|
67
|
-
instance_exec(&options[:default])
|
68
|
-
end
|
69
|
-
|
70
|
-
if send(method).frozen?
|
71
|
-
send(method)[attribute] || value
|
72
|
-
else
|
73
|
-
send(method)[attribute] ||= value
|
74
|
-
end
|
75
|
-
end
|
73
|
+
send(method) do
|
74
|
+
attr_reader *attributes, **options
|
76
75
|
end
|
77
76
|
end
|
78
77
|
end
|
79
78
|
|
80
79
|
%i[context].each do |method|
|
81
80
|
define_method("#{method}_writer") do |*attributes|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
define_method("#{attribute}=") do |value|
|
86
|
-
send(method)[attribute] = value
|
87
|
-
end
|
81
|
+
send(method) do
|
82
|
+
attr_writer *attributes
|
88
83
|
end
|
89
84
|
end
|
90
85
|
|
91
86
|
define_method("#{method}_accessor") do |*attributes, **options|
|
92
|
-
send(
|
93
|
-
|
87
|
+
send(method) do
|
88
|
+
attr_reader *attributes, **options
|
89
|
+
attr_writer *attributes, **options
|
90
|
+
end
|
94
91
|
end
|
95
92
|
end
|
96
93
|
end
|
data/lib/opera/operation.rb
CHANGED
data/lib/opera/version.rb
CHANGED
data/opera.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.summary = 'Use simple DSL language to keep your Operations clean and maintainable'
|
10
10
|
spec.homepage = 'https://github.com/Profinda/opera'
|
11
11
|
spec.license = 'MIT'
|
12
|
-
spec.required_ruby_version = Gem::Requirement.new('>=
|
12
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 3.0.0')
|
13
13
|
|
14
14
|
spec.metadata['homepage_uri'] = spec.homepage
|
15
15
|
spec.metadata['source_code_uri'] = spec.homepage
|
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.3.1
|
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: 2024-
|
11
|
+
date: 2024-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-validation
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- lib/opera.rb
|
79
79
|
- lib/opera/errors.rb
|
80
80
|
- lib/opera/operation.rb
|
81
|
+
- lib/opera/operation/attributes_dsl.rb
|
81
82
|
- lib/opera/operation/base.rb
|
82
83
|
- lib/opera/operation/builder.rb
|
83
84
|
- lib/opera/operation/config.rb
|
@@ -108,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
109
|
requirements:
|
109
110
|
- - ">="
|
110
111
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
112
|
+
version: 3.0.0
|
112
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
114
|
requirements:
|
114
115
|
- - ">="
|