lite-command 3.2.0 → 3.3.0
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/CHANGELOG.md +10 -0
- data/Gemfile.lock +20 -18
- data/README.md +11 -22
- data/lib/lite/command/fault_streamer.rb +4 -4
- data/lib/lite/command/internals/attributes.rb +2 -2
- data/lib/lite/command/internals/executions.rb +5 -4
- data/lib/lite/command/internals/hooks.rb +2 -2
- data/lib/lite/command/internals/runtimes.rb +2 -0
- data/lib/lite/command/step.rb +1 -1
- data/lib/lite/command/utils.rb +8 -6
- data/lib/lite/command/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 31f3a9216f2a7d081892c19b6e01cdd3a276583ccbe205950c8843621f9b4dcf
|
|
4
|
+
data.tar.gz: 4aca9ff7ac7e2d4ed7bcee96faa7605f71ccf37758034035a5fe3e6e26f38e7a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e9f04fe907b9858f547ad748b86b5828456e077440f4a253c3d1c8fee61e2be9f452a6b77db7c8ebebacd623f57e6fda2d63c57f030041926691b5738619e250
|
|
7
|
+
data.tar.gz: a40de6560f56ab977c8e48e9a1ca2f3f16afbd6d7df59aa24df0239e23cfbc51b6f6a5d65d9aa6e879261e731562c5aba2d0ad95cac3ab55f6dde5789735cfb1
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [3.3.0] - 2024-11-01
|
|
10
|
+
### Changed
|
|
11
|
+
- Prefixed util method with `cmd_`
|
|
12
|
+
- Improve monotonic clock handling
|
|
13
|
+
- Improve order of hook calls
|
|
14
|
+
|
|
15
|
+
## [3.2.1] - 2024-10-29
|
|
16
|
+
### Changed
|
|
17
|
+
- Allow if and unless evaluations to happen at the same time
|
|
18
|
+
|
|
9
19
|
## [3.2.0] - 2024-10-29
|
|
10
20
|
### Changed
|
|
11
21
|
- Move callbacks to hooks instead of try methods
|
data/Gemfile.lock
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
lite-command (3.
|
|
4
|
+
lite-command (3.3.0)
|
|
5
5
|
activemodel
|
|
6
6
|
ostruct
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
actionpack (7.2.
|
|
12
|
-
actionview (= 7.2.
|
|
13
|
-
activesupport (= 7.2.
|
|
11
|
+
actionpack (7.2.2)
|
|
12
|
+
actionview (= 7.2.2)
|
|
13
|
+
activesupport (= 7.2.2)
|
|
14
14
|
nokogiri (>= 1.8.5)
|
|
15
15
|
racc
|
|
16
16
|
rack (>= 2.2.4, < 3.2)
|
|
@@ -19,16 +19,17 @@ GEM
|
|
|
19
19
|
rails-dom-testing (~> 2.2)
|
|
20
20
|
rails-html-sanitizer (~> 1.6)
|
|
21
21
|
useragent (~> 0.16)
|
|
22
|
-
actionview (7.2.
|
|
23
|
-
activesupport (= 7.2.
|
|
22
|
+
actionview (7.2.2)
|
|
23
|
+
activesupport (= 7.2.2)
|
|
24
24
|
builder (~> 3.1)
|
|
25
25
|
erubi (~> 1.11)
|
|
26
26
|
rails-dom-testing (~> 2.2)
|
|
27
27
|
rails-html-sanitizer (~> 1.6)
|
|
28
|
-
activemodel (7.2.
|
|
29
|
-
activesupport (= 7.2.
|
|
30
|
-
activesupport (7.2.
|
|
28
|
+
activemodel (7.2.2)
|
|
29
|
+
activesupport (= 7.2.2)
|
|
30
|
+
activesupport (7.2.2)
|
|
31
31
|
base64
|
|
32
|
+
benchmark (>= 0.3)
|
|
32
33
|
bigdecimal
|
|
33
34
|
concurrent-ruby (~> 1.0, >= 1.3.1)
|
|
34
35
|
connection_pool (>= 2.2.5)
|
|
@@ -40,6 +41,7 @@ GEM
|
|
|
40
41
|
tzinfo (~> 2.0, >= 2.0.5)
|
|
41
42
|
ast (2.4.2)
|
|
42
43
|
base64 (0.2.0)
|
|
44
|
+
benchmark (0.3.0)
|
|
43
45
|
bigdecimal (3.1.8)
|
|
44
46
|
builder (3.3.0)
|
|
45
47
|
concurrent-ruby (1.3.4)
|
|
@@ -57,7 +59,7 @@ GEM
|
|
|
57
59
|
irb (1.14.1)
|
|
58
60
|
rdoc (>= 4.0.0)
|
|
59
61
|
reline (>= 0.4.2)
|
|
60
|
-
json (2.7.
|
|
62
|
+
json (2.7.5)
|
|
61
63
|
language_server-protocol (3.17.0.3)
|
|
62
64
|
logger (1.6.1)
|
|
63
65
|
loofah (2.23.1)
|
|
@@ -70,7 +72,7 @@ GEM
|
|
|
70
72
|
racc (~> 1.4)
|
|
71
73
|
ostruct (0.6.0)
|
|
72
74
|
parallel (1.26.3)
|
|
73
|
-
parser (3.3.5.
|
|
75
|
+
parser (3.3.5.1)
|
|
74
76
|
ast (~> 2.4.1)
|
|
75
77
|
racc
|
|
76
78
|
psych (5.1.2)
|
|
@@ -91,9 +93,9 @@ GEM
|
|
|
91
93
|
rails-html-sanitizer (1.6.0)
|
|
92
94
|
loofah (~> 2.21)
|
|
93
95
|
nokogiri (~> 1.14)
|
|
94
|
-
railties (7.2.
|
|
95
|
-
actionpack (= 7.2.
|
|
96
|
-
activesupport (= 7.2.
|
|
96
|
+
railties (7.2.2)
|
|
97
|
+
actionpack (= 7.2.2)
|
|
98
|
+
activesupport (= 7.2.2)
|
|
97
99
|
irb (~> 1.13)
|
|
98
100
|
rackup (>= 1.0.0)
|
|
99
101
|
rake (>= 12.2)
|
|
@@ -119,7 +121,7 @@ GEM
|
|
|
119
121
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
120
122
|
rspec-support (~> 3.13.0)
|
|
121
123
|
rspec-support (3.13.1)
|
|
122
|
-
rubocop (1.
|
|
124
|
+
rubocop (1.68.0)
|
|
123
125
|
json (~> 2.3)
|
|
124
126
|
language_server-protocol (>= 3.17.0)
|
|
125
127
|
parallel (~> 1.10)
|
|
@@ -129,7 +131,7 @@ GEM
|
|
|
129
131
|
rubocop-ast (>= 1.32.2, < 2.0)
|
|
130
132
|
ruby-progressbar (~> 1.7)
|
|
131
133
|
unicode-display_width (>= 2.4.0, < 3.0)
|
|
132
|
-
rubocop-ast (1.
|
|
134
|
+
rubocop-ast (1.33.0)
|
|
133
135
|
parser (>= 3.3.1.0)
|
|
134
136
|
rubocop-performance (1.22.1)
|
|
135
137
|
rubocop (>= 1.48.1, < 2.0)
|
|
@@ -140,7 +142,7 @@ GEM
|
|
|
140
142
|
rubocop (~> 1.61)
|
|
141
143
|
ruby-progressbar (1.13.0)
|
|
142
144
|
securerandom (0.3.1)
|
|
143
|
-
sqlite3 (2.
|
|
145
|
+
sqlite3 (2.2.0)
|
|
144
146
|
mini_portile2 (~> 2.8.0)
|
|
145
147
|
stringio (3.1.1)
|
|
146
148
|
thor (1.3.2)
|
|
@@ -148,7 +150,7 @@ GEM
|
|
|
148
150
|
concurrent-ruby (~> 1.0)
|
|
149
151
|
unicode-display_width (2.6.0)
|
|
150
152
|
useragent (0.16.10)
|
|
151
|
-
webrick (1.
|
|
153
|
+
webrick (1.9.0)
|
|
152
154
|
zeitwerk (2.7.1)
|
|
153
155
|
|
|
154
156
|
PLATFORMS
|
data/README.md
CHANGED
|
@@ -289,10 +289,10 @@ cmd.context.decrypted_message #=> "Hola Mundo"
|
|
|
289
289
|
# With invalid options:
|
|
290
290
|
cmd = DecryptSecretMessage.call(encrypted_message: "idk", version: "v23")
|
|
291
291
|
cmd.status #=> "invalid"
|
|
292
|
-
cmd.reason #=> "Encrypted message is too short (minimum is 10 character). Version is not included in list
|
|
292
|
+
cmd.reason #=> "Encrypted message is too short (minimum is 10 character). Encrypted message has invalid magic numbers. Version is not included in list."
|
|
293
293
|
cmd.metadata #=> {
|
|
294
294
|
#=> user: ["is not included in list"],
|
|
295
|
-
#=> encrypted_message: ["is too short (minimum is 10 character)"]
|
|
295
|
+
#=> encrypted_message: ["is too short (minimum is 10 character)", "has invalid magic numbers"]
|
|
296
296
|
#=> }
|
|
297
297
|
```
|
|
298
298
|
|
|
@@ -388,28 +388,17 @@ cmd.bad?("Other reason") #=> false
|
|
|
388
388
|
|
|
389
389
|
Use hooks to run arbituary code at transition points and on finalized internals.
|
|
390
390
|
All hooks are ran in the order they are defined. Hooks types can be defined
|
|
391
|
-
multiple times.
|
|
392
|
-
command with a successful child command.
|
|
391
|
+
multiple times. Hooks are ran in the following order:
|
|
393
392
|
|
|
394
393
|
```ruby
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
---> 6c. BarCommand.before_validation
|
|
404
|
-
---> 6d. BarCommand.after_validation
|
|
405
|
-
---> 6e. BarCommand.before_execution
|
|
406
|
-
---> 6f. BarCommand.on_executing
|
|
407
|
-
---> 6g. BarCommand.after_execution
|
|
408
|
-
---> 6h. BarCommand.on_failure
|
|
409
|
-
---> 6i. BarCommand.on_interrupted
|
|
410
|
-
-> 7. FooCommand.after_execution
|
|
411
|
-
-> 8. FooCommand.on_failure
|
|
412
|
-
-> 9. FooCommand.on_interrupted
|
|
394
|
+
1. after_initialize
|
|
395
|
+
2. before_execution
|
|
396
|
+
3. before_validation
|
|
397
|
+
4. after_validation
|
|
398
|
+
5. on_executing
|
|
399
|
+
6. on_[success, noop, invalid, failure, error]
|
|
400
|
+
7. on_[complete, interrupted]
|
|
401
|
+
8. after_execution
|
|
413
402
|
```
|
|
414
403
|
|
|
415
404
|
### Lifecycle Hooks
|
|
@@ -22,17 +22,17 @@ module Lite
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def metadata
|
|
25
|
-
Utils.
|
|
25
|
+
Utils.cmd_try(object, :metadata) || command.metadata
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def caused_by
|
|
29
|
-
Utils.
|
|
29
|
+
Utils.cmd_try(object, :caused_by) || command
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def thrown_by
|
|
33
|
-
return object if Utils.
|
|
33
|
+
return object if Utils.cmd_try(object, :executed?)
|
|
34
34
|
|
|
35
|
-
Utils.
|
|
35
|
+
Utils.cmd_try(object, :thrown_by) || command.caused_by
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def command_exception
|
|
@@ -36,7 +36,7 @@ module Lite
|
|
|
36
36
|
define_method(method_name) do
|
|
37
37
|
return unless respond_to?(from)
|
|
38
38
|
|
|
39
|
-
Utils.
|
|
39
|
+
Utils.cmd_try(send(from), method_name)
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
end
|
|
@@ -44,7 +44,7 @@ module Lite
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def read_attribute_for_validation(method_name)
|
|
47
|
-
Utils.
|
|
47
|
+
Utils.cmd_try(self, method_name)
|
|
48
48
|
rescue NameError
|
|
49
49
|
# Do nothing, fallback to :undefined error
|
|
50
50
|
end
|
|
@@ -50,18 +50,19 @@ module Lite
|
|
|
50
50
|
increment_execution_index
|
|
51
51
|
assign_execution_cmd_id
|
|
52
52
|
start_monotonic_time
|
|
53
|
-
|
|
54
|
-
validate_context_attributes
|
|
53
|
+
|
|
55
54
|
run_hooks(:before_execution)
|
|
56
55
|
executing!
|
|
56
|
+
validate_context_attributes
|
|
57
57
|
run_hooks(:on_executing)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def after_execution
|
|
61
61
|
send(:"#{success? ? COMPLETE : INTERRUPTED}!")
|
|
62
|
-
run_hooks(:after_execution)
|
|
63
62
|
run_hooks(:"on_#{status}")
|
|
64
63
|
run_hooks(:"on_#{state}")
|
|
64
|
+
run_hooks(:after_execution)
|
|
65
|
+
|
|
65
66
|
stop_monotonic_time
|
|
66
67
|
append_execution_result
|
|
67
68
|
freeze_execution_objects
|
|
@@ -82,7 +83,7 @@ module Lite
|
|
|
82
83
|
def execute!
|
|
83
84
|
around_execution { call }
|
|
84
85
|
rescue StandardError => e
|
|
85
|
-
fault(e, Utils.
|
|
86
|
+
fault(e, Utils.cmd_try(e, :type) || ERROR, metadata, exception: e)
|
|
86
87
|
after_execution
|
|
87
88
|
raise(e)
|
|
88
89
|
end
|
|
@@ -23,7 +23,7 @@ module Lite
|
|
|
23
23
|
module ClassMethods
|
|
24
24
|
|
|
25
25
|
def hooks
|
|
26
|
-
@hooks ||= Utils.
|
|
26
|
+
@hooks ||= Utils.cmd_try(superclass, :hooks).dup || {}
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
HOOKS.each do |h|
|
|
@@ -41,7 +41,7 @@ module Lite
|
|
|
41
41
|
hooks = self.class.hooks[hook]
|
|
42
42
|
return if hooks.nil?
|
|
43
43
|
|
|
44
|
-
hooks.each { |h| Utils.
|
|
44
|
+
hooks.each { |h| Utils.cmd_call(self, h) }
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
end
|
data/lib/lite/command/step.rb
CHANGED
data/lib/lite/command/utils.rb
CHANGED
|
@@ -23,13 +23,13 @@ module Lite
|
|
|
23
23
|
!!(object_class <= other_class)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
def
|
|
26
|
+
def cmd_try(object, method_name, *args, include_private: true)
|
|
27
27
|
return unless object.respond_to?(method_name, include_private)
|
|
28
28
|
|
|
29
29
|
object.send(method_name, *args)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
def
|
|
32
|
+
def cmd_call(object, argument)
|
|
33
33
|
if argument.is_a?(Symbol) || argument.is_a?(String)
|
|
34
34
|
object.send(argument)
|
|
35
35
|
elsif argument.is_a?(Proc)
|
|
@@ -39,11 +39,13 @@ module Lite
|
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
def
|
|
43
|
-
if options[:if]
|
|
44
|
-
|
|
42
|
+
def cmd_eval(object, options = {})
|
|
43
|
+
if options[:if] && options[:unless]
|
|
44
|
+
cmd_call(object, options[:if]) && !cmd_call(object, options[:unless])
|
|
45
|
+
elsif options[:if]
|
|
46
|
+
cmd_call(object, options[:if])
|
|
45
47
|
elsif options[:unless]
|
|
46
|
-
!
|
|
48
|
+
!cmd_call(object, options[:unless])
|
|
47
49
|
else
|
|
48
50
|
options.fetch(:default, true)
|
|
49
51
|
end
|
data/lib/lite/command/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lite-command
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Juan Gomez
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-11-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activemodel
|
|
@@ -229,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
229
229
|
- !ruby/object:Gem::Version
|
|
230
230
|
version: '0'
|
|
231
231
|
requirements: []
|
|
232
|
-
rubygems_version: 3.5.
|
|
232
|
+
rubygems_version: 3.5.22
|
|
233
233
|
signing_key:
|
|
234
234
|
specification_version: 4
|
|
235
235
|
summary: Ruby Command based framework (aka service objects)
|