lite-command 2.0.3 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -0
- data/CHANGELOG.md +15 -0
- data/Gemfile.lock +3 -3
- data/README.md +499 -58
- data/lib/lite/command/attribute.rb +96 -0
- data/lib/lite/command/attribute_validator.rb +36 -0
- data/lib/lite/command/base.rb +8 -16
- data/lib/lite/command/fault.rb +19 -5
- data/lib/lite/command/fault_streamer.rb +40 -0
- data/lib/lite/command/internals/call.rb +100 -0
- data/lib/lite/command/internals/context.rb +46 -0
- data/lib/lite/command/internals/{executable.rb → execute.rb} +29 -22
- data/lib/lite/command/internals/fault.rb +41 -0
- data/lib/lite/command/internals/{resultable.rb → result.rb} +7 -6
- data/lib/lite/command/sequence.rb +28 -0
- data/lib/lite/command/step.rb +26 -0
- data/lib/lite/command/utils.rb +31 -0
- data/lib/lite/command/version.rb +1 -1
- data/lib/lite/command.rb +12 -5
- metadata +13 -6
- data/lib/lite/command/internals/callable.rb +0 -85
- data/lib/lite/command/internals/faultable.rb +0 -83
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: 2.0
|
4
|
+
version: 2.1.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-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ostruct
|
@@ -191,13 +191,20 @@ files:
|
|
191
191
|
- lib/generators/rails/command_generator.rb
|
192
192
|
- lib/generators/rails/templates/command.rb.tt
|
193
193
|
- lib/lite/command.rb
|
194
|
+
- lib/lite/command/attribute.rb
|
195
|
+
- lib/lite/command/attribute_validator.rb
|
194
196
|
- lib/lite/command/base.rb
|
195
197
|
- lib/lite/command/context.rb
|
196
198
|
- lib/lite/command/fault.rb
|
197
|
-
- lib/lite/command/
|
198
|
-
- lib/lite/command/internals/
|
199
|
-
- lib/lite/command/internals/
|
200
|
-
- lib/lite/command/internals/
|
199
|
+
- lib/lite/command/fault_streamer.rb
|
200
|
+
- lib/lite/command/internals/call.rb
|
201
|
+
- lib/lite/command/internals/context.rb
|
202
|
+
- lib/lite/command/internals/execute.rb
|
203
|
+
- lib/lite/command/internals/fault.rb
|
204
|
+
- lib/lite/command/internals/result.rb
|
205
|
+
- lib/lite/command/sequence.rb
|
206
|
+
- lib/lite/command/step.rb
|
207
|
+
- lib/lite/command/utils.rb
|
201
208
|
- lib/lite/command/version.rb
|
202
209
|
- lite-command.gemspec
|
203
210
|
homepage: http://drexed.github.io/lite-command
|
@@ -1,85 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Lite
|
4
|
-
module Command
|
5
|
-
|
6
|
-
STATUSES = [
|
7
|
-
SUCCESS = "success",
|
8
|
-
NOOP = "noop",
|
9
|
-
INVALID = "invalid",
|
10
|
-
FAILURE = "failure",
|
11
|
-
ERROR = "error"
|
12
|
-
].freeze
|
13
|
-
FAULTS = (STATUSES - [SUCCESS]).freeze
|
14
|
-
|
15
|
-
module Internals
|
16
|
-
module Callable
|
17
|
-
|
18
|
-
def self.included(base)
|
19
|
-
base.extend ClassMethods
|
20
|
-
end
|
21
|
-
|
22
|
-
module ClassMethods
|
23
|
-
|
24
|
-
def call(context = {})
|
25
|
-
new(context).tap(&:execute)
|
26
|
-
end
|
27
|
-
|
28
|
-
def call!(context = {})
|
29
|
-
new(context).tap(&:execute!)
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
def call
|
35
|
-
raise NotImplementedError, "call method not defined in #{self.class}"
|
36
|
-
end
|
37
|
-
|
38
|
-
def status
|
39
|
-
@status || SUCCESS
|
40
|
-
end
|
41
|
-
|
42
|
-
def success?
|
43
|
-
status == SUCCESS
|
44
|
-
end
|
45
|
-
|
46
|
-
def fault?(str = nil)
|
47
|
-
!success? && reason?(str)
|
48
|
-
end
|
49
|
-
|
50
|
-
FAULTS.each do |f|
|
51
|
-
# eg: noop? or failure?("idk")
|
52
|
-
define_method(:"#{f}?") do |str = nil|
|
53
|
-
status == f && reason?(str)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
FAULTS.each do |f|
|
60
|
-
# eg: error(object)
|
61
|
-
define_method(:"#{f}") do |object|
|
62
|
-
derive_fault_from(object)
|
63
|
-
@status = f
|
64
|
-
end
|
65
|
-
|
66
|
-
# eg: invalid!(object)
|
67
|
-
define_method(:"#{f}!") do |object|
|
68
|
-
send(:"#{f}", object)
|
69
|
-
raise fault(f.capitalize, object)
|
70
|
-
end
|
71
|
-
|
72
|
-
# eg: on_noop(exception)
|
73
|
-
define_method(:"on_#{f}") do |_exception|
|
74
|
-
# Define in your class to run code when a
|
75
|
-
# Lite::Command::Fault or StandardError happens
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
alias fail! failure!
|
80
|
-
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Lite
|
4
|
-
module Command
|
5
|
-
module Internals
|
6
|
-
module Faultable
|
7
|
-
|
8
|
-
def self.included(base)
|
9
|
-
base.class_eval do
|
10
|
-
attr_reader :caused_by, :thrown_by, :reason
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def reason?(str)
|
15
|
-
return true if str.nil?
|
16
|
-
|
17
|
-
reason == str
|
18
|
-
end
|
19
|
-
|
20
|
-
def caused_fault?
|
21
|
-
caused_by == self
|
22
|
-
end
|
23
|
-
|
24
|
-
def threw_fault?
|
25
|
-
thrown_by == self
|
26
|
-
end
|
27
|
-
|
28
|
-
def thrown?
|
29
|
-
fault? && !caused_fault?
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def throw!(command)
|
35
|
-
return if command.success?
|
36
|
-
|
37
|
-
send(:"#{command.status}!", command)
|
38
|
-
end
|
39
|
-
|
40
|
-
def derive_caused_by_from(object)
|
41
|
-
(object.caused_by if object.respond_to?(:caused_by)) || self
|
42
|
-
end
|
43
|
-
|
44
|
-
def derive_thrown_by_from(object)
|
45
|
-
if object.respond_to?(:executed?) && object.executed?
|
46
|
-
object
|
47
|
-
else
|
48
|
-
(object.thrown_by if object.respond_to?(:thrown_by)) || caused_by
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def derive_reason_from(object)
|
53
|
-
if object.respond_to?(:reason)
|
54
|
-
object.reason
|
55
|
-
elsif object.respond_to?(:message)
|
56
|
-
"[#{object.class.name}] #{object.message}".chomp(".")
|
57
|
-
else
|
58
|
-
object
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def derive_fault_from(object)
|
63
|
-
@caused_by ||= derive_caused_by_from(object)
|
64
|
-
@thrown_by ||= derive_thrown_by_from(object)
|
65
|
-
@reason ||= derive_reason_from(object)
|
66
|
-
end
|
67
|
-
|
68
|
-
def raise_dynamic_faults?
|
69
|
-
false
|
70
|
-
end
|
71
|
-
|
72
|
-
# eg: Lite::Command::Noop.new(...) or Users::ResetPassword::Noop.new(...)
|
73
|
-
def fault(type, thrower)
|
74
|
-
klass = raise_dynamic_faults? ? self.class : Lite::Command
|
75
|
-
fault = klass.const_get(type.to_s).new(reason, caused_by, self)
|
76
|
-
fault.set_backtrace(thrower.backtrace) if thrower.respond_to?(:backtrace)
|
77
|
-
fault
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|