cmdx 0.4.0 → 1.0.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/.DS_Store +0 -0
- data/.cursor/rules/cursor-instructions.mdc +6 -0
- data/.rubocop.yml +16 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.md +42 -1
- data/README.md +72 -25
- data/docs/ai_prompts.md +309 -0
- data/docs/basics/call.md +225 -14
- data/docs/basics/chain.md +271 -0
- data/docs/basics/context.md +232 -33
- data/docs/basics/setup.md +76 -12
- data/docs/callbacks.md +273 -0
- data/docs/configuration.md +158 -28
- data/docs/getting_started.md +134 -22
- data/docs/interruptions/exceptions.md +189 -11
- data/docs/interruptions/faults.md +187 -44
- data/docs/interruptions/halt.md +179 -35
- data/docs/logging.md +194 -53
- data/docs/middlewares.md +735 -0
- data/docs/outcomes/result.md +296 -10
- data/docs/outcomes/states.md +212 -19
- data/docs/outcomes/statuses.md +284 -18
- data/docs/parameters/coercions.md +402 -29
- data/docs/parameters/defaults.md +249 -25
- data/docs/parameters/definitions.md +238 -72
- data/docs/parameters/namespacing.md +250 -27
- data/docs/parameters/validations.md +193 -168
- data/docs/testing.md +550 -0
- data/docs/tips_and_tricks.md +95 -43
- data/docs/workflows.md +319 -0
- data/lib/cmdx/.DS_Store +0 -0
- data/lib/cmdx/callback.rb +69 -0
- data/lib/cmdx/callback_registry.rb +106 -0
- data/lib/cmdx/chain.rb +190 -0
- data/lib/cmdx/chain_inspector.rb +149 -0
- data/lib/cmdx/chain_serializer.rb +175 -0
- data/lib/cmdx/coercions/array.rb +37 -0
- data/lib/cmdx/coercions/big_decimal.rb +33 -0
- data/lib/cmdx/coercions/boolean.rb +41 -1
- data/lib/cmdx/coercions/complex.rb +31 -0
- data/lib/cmdx/coercions/date.rb +39 -0
- data/lib/cmdx/coercions/date_time.rb +39 -0
- data/lib/cmdx/coercions/float.rb +31 -0
- data/lib/cmdx/coercions/hash.rb +42 -0
- data/lib/cmdx/coercions/integer.rb +32 -0
- data/lib/cmdx/coercions/rational.rb +31 -0
- data/lib/cmdx/coercions/string.rb +31 -0
- data/lib/cmdx/coercions/time.rb +39 -0
- data/lib/cmdx/coercions/virtual.rb +31 -0
- data/lib/cmdx/configuration.rb +217 -9
- data/lib/cmdx/context.rb +173 -2
- data/lib/cmdx/core_ext/hash.rb +72 -0
- data/lib/cmdx/core_ext/module.rb +94 -0
- data/lib/cmdx/core_ext/object.rb +105 -0
- data/lib/cmdx/correlator.rb +217 -0
- data/lib/cmdx/error.rb +210 -8
- data/lib/cmdx/errors.rb +256 -1
- data/lib/cmdx/fault.rb +177 -2
- data/lib/cmdx/faults.rb +158 -2
- data/lib/cmdx/immutator.rb +121 -2
- data/lib/cmdx/lazy_struct.rb +261 -18
- data/lib/cmdx/log_formatters/json.rb +46 -0
- data/lib/cmdx/log_formatters/key_value.rb +46 -0
- data/lib/cmdx/log_formatters/line.rb +54 -0
- data/lib/cmdx/log_formatters/logstash.rb +64 -0
- data/lib/cmdx/log_formatters/pretty_json.rb +57 -0
- data/lib/cmdx/log_formatters/pretty_key_value.rb +51 -0
- data/lib/cmdx/log_formatters/pretty_line.rb +60 -0
- data/lib/cmdx/log_formatters/raw.rb +54 -0
- data/lib/cmdx/logger.rb +85 -0
- data/lib/cmdx/logger_ansi.rb +93 -7
- data/lib/cmdx/logger_serializer.rb +116 -0
- data/lib/cmdx/middleware.rb +74 -0
- data/lib/cmdx/middleware_registry.rb +106 -0
- data/lib/cmdx/middlewares/correlate.rb +266 -0
- data/lib/cmdx/middlewares/timeout.rb +232 -0
- data/lib/cmdx/parameter.rb +228 -1
- data/lib/cmdx/parameter_inspector.rb +61 -0
- data/lib/cmdx/parameter_registry.rb +125 -0
- data/lib/cmdx/parameter_serializer.rb +83 -0
- data/lib/cmdx/parameter_validator.rb +62 -0
- data/lib/cmdx/parameter_value.rb +109 -1
- data/lib/cmdx/parameters_inspector.rb +59 -0
- data/lib/cmdx/parameters_serializer.rb +102 -0
- data/lib/cmdx/railtie.rb +123 -3
- data/lib/cmdx/result.rb +399 -20
- data/lib/cmdx/result_ansi.rb +105 -9
- data/lib/cmdx/result_inspector.rb +76 -0
- data/lib/cmdx/result_logger.rb +90 -3
- data/lib/cmdx/result_serializer.rb +137 -0
- data/lib/cmdx/rspec/result_matchers.rb +917 -0
- data/lib/cmdx/rspec/task_matchers.rb +570 -0
- data/lib/cmdx/task.rb +409 -34
- data/lib/cmdx/task_serializer.rb +74 -2
- data/lib/cmdx/utils/ansi_color.rb +95 -0
- data/lib/cmdx/utils/log_timestamp.rb +48 -0
- data/lib/cmdx/utils/monotonic_runtime.rb +71 -4
- data/lib/cmdx/utils/name_affix.rb +78 -0
- data/lib/cmdx/validators/custom.rb +82 -0
- data/lib/cmdx/validators/exclusion.rb +94 -0
- data/lib/cmdx/validators/format.rb +102 -8
- data/lib/cmdx/validators/inclusion.rb +104 -0
- data/lib/cmdx/validators/length.rb +128 -0
- data/lib/cmdx/validators/numeric.rb +128 -0
- data/lib/cmdx/validators/presence.rb +93 -7
- data/lib/cmdx/version.rb +7 -1
- data/lib/cmdx/workflow.rb +394 -0
- data/lib/cmdx.rb +25 -64
- data/lib/generators/cmdx/install_generator.rb +37 -1
- data/lib/generators/cmdx/task_generator.rb +69 -1
- data/lib/generators/cmdx/templates/install.rb +8 -12
- data/lib/generators/cmdx/workflow_generator.rb +109 -0
- metadata +54 -15
- data/docs/basics/run.md +0 -34
- data/docs/batch.md +0 -53
- data/docs/example.md +0 -82
- data/docs/hooks.md +0 -59
- data/lib/cmdx/batch.rb +0 -43
- data/lib/cmdx/parameters.rb +0 -34
- data/lib/cmdx/run.rb +0 -38
- data/lib/cmdx/run_inspector.rb +0 -26
- data/lib/cmdx/run_serializer.rb +0 -16
- data/lib/cmdx/task_hook.rb +0 -18
- data/lib/generators/cmdx/batch_generator.rb +0 -30
- /data/lib/generators/cmdx/templates/{batch.rb.tt → workflow.rb.tt} +0 -0
data/lib/cmdx/parameters.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CMDx
|
4
|
-
class Parameters < Array
|
5
|
-
|
6
|
-
def invalid?
|
7
|
-
!valid?
|
8
|
-
end
|
9
|
-
|
10
|
-
def valid?
|
11
|
-
all?(&:valid?)
|
12
|
-
end
|
13
|
-
|
14
|
-
def validate!(task)
|
15
|
-
each { |p| recursive_validate!(task, p) }
|
16
|
-
end
|
17
|
-
|
18
|
-
def to_h
|
19
|
-
ParametersSerializer.call(self)
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_s
|
23
|
-
ParametersInspector.call(self)
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def recursive_validate!(task, parameter)
|
29
|
-
task.send(parameter.method_name)
|
30
|
-
parameter.children.each { |cp| recursive_validate!(task, cp) }
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
data/lib/cmdx/run.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CMDx
|
4
|
-
class Run
|
5
|
-
|
6
|
-
__cmdx_attr_delegator :index, to: :results
|
7
|
-
__cmdx_attr_delegator :state, :status, :outcome, :runtime, to: :first_result
|
8
|
-
|
9
|
-
attr_reader :id, :results
|
10
|
-
|
11
|
-
def initialize(attributes = {})
|
12
|
-
@id = attributes[:id] || SecureRandom.uuid
|
13
|
-
@results = Array(attributes[:results])
|
14
|
-
end
|
15
|
-
|
16
|
-
def freeze
|
17
|
-
first_result
|
18
|
-
super
|
19
|
-
end
|
20
|
-
|
21
|
-
def to_h
|
22
|
-
RunSerializer.call(self)
|
23
|
-
end
|
24
|
-
|
25
|
-
def to_s
|
26
|
-
RunInspector.call(self)
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def first_result
|
32
|
-
return @first_result if defined?(@first_result)
|
33
|
-
|
34
|
-
@first_result = @results.first
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
data/lib/cmdx/run_inspector.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CMDx
|
4
|
-
module RunInspector
|
5
|
-
|
6
|
-
FOOTER_KEYS = %i[
|
7
|
-
state status outcome runtime
|
8
|
-
].freeze
|
9
|
-
|
10
|
-
module_function
|
11
|
-
|
12
|
-
def call(run)
|
13
|
-
header = "\nrun: #{run.id}"
|
14
|
-
footer = FOOTER_KEYS.map { |key| "#{key}: #{run.send(key)}" }.join(" | ")
|
15
|
-
spacer = "=" * [header.size, footer.size].max
|
16
|
-
|
17
|
-
run
|
18
|
-
.results
|
19
|
-
.map { |r| r.to_h.except(:run_id).pretty_inspect }
|
20
|
-
.unshift(header, "#{spacer}\n")
|
21
|
-
.push(spacer, "#{footer}\n\n")
|
22
|
-
.join("\n")
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
data/lib/cmdx/run_serializer.rb
DELETED
data/lib/cmdx/task_hook.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CMDx
|
4
|
-
module TaskHook
|
5
|
-
|
6
|
-
module_function
|
7
|
-
|
8
|
-
def call(task, hook)
|
9
|
-
Array(task.class.cmd_hooks[hook]).each do |callables, options|
|
10
|
-
next unless task.__cmdx_eval(options)
|
11
|
-
|
12
|
-
hooks = Array(callables)
|
13
|
-
hooks.each { |h| task.__cmdx_try(h) }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Cmdx
|
4
|
-
class BatchGenerator < Rails::Generators::NamedBase
|
5
|
-
|
6
|
-
source_root File.expand_path("templates", __dir__)
|
7
|
-
check_class_collision prefix: "Batch"
|
8
|
-
|
9
|
-
desc "Generates a batch task with the given NAME (if one does not exist)."
|
10
|
-
|
11
|
-
def copy_files
|
12
|
-
name = file_name.sub(/^batch_?/i, "")
|
13
|
-
path = File.join("app/cmds", class_path, "batch_#{name}.rb")
|
14
|
-
template("batch.rb.tt", path)
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def class_name
|
20
|
-
@class_name ||= super.delete_prefix("Batch")
|
21
|
-
end
|
22
|
-
|
23
|
-
def parent_class_name
|
24
|
-
ApplicationBatch
|
25
|
-
rescue StandardError
|
26
|
-
CMDx::Batch
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
File without changes
|