cmdx 1.0.1 → 1.1.1
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/.cursor/prompts/docs.md +9 -0
- data/.cursor/prompts/rspec.md +21 -0
- data/.cursor/prompts/yardoc.md +13 -0
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +29 -3
- data/README.md +2 -1
- data/docs/ai_prompts.md +269 -195
- data/docs/basics/call.md +126 -60
- data/docs/basics/chain.md +190 -160
- data/docs/basics/context.md +242 -154
- data/docs/basics/setup.md +302 -32
- data/docs/callbacks.md +382 -119
- data/docs/configuration.md +211 -49
- data/docs/deprecation.md +245 -0
- data/docs/getting_started.md +161 -39
- data/docs/internationalization.md +590 -70
- data/docs/interruptions/exceptions.md +135 -118
- data/docs/interruptions/faults.md +152 -127
- data/docs/interruptions/halt.md +134 -80
- data/docs/logging.md +183 -120
- data/docs/middlewares.md +165 -392
- data/docs/outcomes/result.md +140 -112
- data/docs/outcomes/states.md +134 -99
- data/docs/outcomes/statuses.md +204 -146
- data/docs/parameters/coercions.md +251 -289
- data/docs/parameters/defaults.md +224 -169
- data/docs/parameters/definitions.md +289 -141
- data/docs/parameters/namespacing.md +250 -161
- data/docs/parameters/validations.md +247 -159
- data/docs/testing.md +196 -203
- data/docs/workflows.md +146 -101
- data/lib/cmdx/.DS_Store +0 -0
- data/lib/cmdx/callback.rb +39 -55
- data/lib/cmdx/callback_registry.rb +80 -73
- data/lib/cmdx/chain.rb +65 -122
- data/lib/cmdx/chain_inspector.rb +23 -116
- data/lib/cmdx/chain_serializer.rb +34 -146
- data/lib/cmdx/coercion.rb +57 -0
- data/lib/cmdx/coercion_registry.rb +113 -0
- data/lib/cmdx/coercions/array.rb +18 -36
- data/lib/cmdx/coercions/big_decimal.rb +21 -33
- data/lib/cmdx/coercions/boolean.rb +21 -40
- data/lib/cmdx/coercions/complex.rb +18 -31
- data/lib/cmdx/coercions/date.rb +20 -39
- data/lib/cmdx/coercions/date_time.rb +22 -39
- data/lib/cmdx/coercions/float.rb +19 -32
- data/lib/cmdx/coercions/hash.rb +22 -41
- data/lib/cmdx/coercions/integer.rb +20 -33
- data/lib/cmdx/coercions/rational.rb +20 -32
- data/lib/cmdx/coercions/string.rb +23 -31
- data/lib/cmdx/coercions/time.rb +24 -40
- data/lib/cmdx/coercions/virtual.rb +14 -31
- data/lib/cmdx/configuration.rb +101 -162
- data/lib/cmdx/context.rb +34 -166
- data/lib/cmdx/core_ext/hash.rb +42 -67
- data/lib/cmdx/core_ext/module.rb +35 -79
- data/lib/cmdx/core_ext/object.rb +63 -98
- data/lib/cmdx/correlator.rb +59 -154
- data/lib/cmdx/error.rb +37 -202
- data/lib/cmdx/errors.rb +153 -216
- data/lib/cmdx/fault.rb +68 -150
- data/lib/cmdx/faults.rb +26 -137
- data/lib/cmdx/immutator.rb +22 -110
- data/lib/cmdx/lazy_struct.rb +110 -186
- data/lib/cmdx/log_formatters/json.rb +14 -40
- data/lib/cmdx/log_formatters/key_value.rb +14 -40
- data/lib/cmdx/log_formatters/line.rb +14 -48
- data/lib/cmdx/log_formatters/logstash.rb +14 -57
- data/lib/cmdx/log_formatters/pretty_json.rb +14 -50
- data/lib/cmdx/log_formatters/pretty_key_value.rb +13 -46
- data/lib/cmdx/log_formatters/pretty_line.rb +16 -54
- data/lib/cmdx/log_formatters/raw.rb +19 -49
- data/lib/cmdx/logger.rb +22 -79
- data/lib/cmdx/logger_ansi.rb +31 -72
- data/lib/cmdx/logger_serializer.rb +74 -103
- data/lib/cmdx/middleware.rb +56 -60
- data/lib/cmdx/middleware_registry.rb +82 -77
- data/lib/cmdx/middlewares/correlate.rb +41 -226
- data/lib/cmdx/middlewares/timeout.rb +46 -185
- data/lib/cmdx/parameter.rb +167 -183
- data/lib/cmdx/parameter_evaluator.rb +231 -0
- data/lib/cmdx/parameter_inspector.rb +37 -55
- data/lib/cmdx/parameter_registry.rb +65 -84
- data/lib/cmdx/parameter_serializer.rb +32 -76
- data/lib/cmdx/railtie.rb +24 -107
- data/lib/cmdx/result.rb +254 -259
- data/lib/cmdx/result_ansi.rb +28 -80
- data/lib/cmdx/result_inspector.rb +34 -70
- data/lib/cmdx/result_logger.rb +23 -77
- data/lib/cmdx/result_serializer.rb +59 -125
- data/lib/cmdx/rspec/matchers.rb +28 -0
- data/lib/cmdx/rspec/result_matchers/be_executed.rb +42 -0
- data/lib/cmdx/rspec/result_matchers/be_failed_task.rb +94 -0
- data/lib/cmdx/rspec/result_matchers/be_skipped_task.rb +94 -0
- data/lib/cmdx/rspec/result_matchers/be_state_matchers.rb +59 -0
- data/lib/cmdx/rspec/result_matchers/be_status_matchers.rb +57 -0
- data/lib/cmdx/rspec/result_matchers/be_successful_task.rb +87 -0
- data/lib/cmdx/rspec/result_matchers/have_bad_outcome.rb +51 -0
- data/lib/cmdx/rspec/result_matchers/have_caused_failure.rb +58 -0
- data/lib/cmdx/rspec/result_matchers/have_chain_index.rb +59 -0
- data/lib/cmdx/rspec/result_matchers/have_context.rb +86 -0
- data/lib/cmdx/rspec/result_matchers/have_empty_metadata.rb +54 -0
- data/lib/cmdx/rspec/result_matchers/have_good_outcome.rb +52 -0
- data/lib/cmdx/rspec/result_matchers/have_metadata.rb +114 -0
- data/lib/cmdx/rspec/result_matchers/have_preserved_context.rb +66 -0
- data/lib/cmdx/rspec/result_matchers/have_received_thrown_failure.rb +64 -0
- data/lib/cmdx/rspec/result_matchers/have_runtime.rb +78 -0
- data/lib/cmdx/rspec/result_matchers/have_thrown_failure.rb +76 -0
- data/lib/cmdx/rspec/task_matchers/be_well_formed_task.rb +62 -0
- data/lib/cmdx/rspec/task_matchers/have_callback.rb +85 -0
- data/lib/cmdx/rspec/task_matchers/have_cmd_setting.rb +68 -0
- data/lib/cmdx/rspec/task_matchers/have_executed_callbacks.rb +92 -0
- data/lib/cmdx/rspec/task_matchers/have_middleware.rb +46 -0
- data/lib/cmdx/rspec/task_matchers/have_parameter.rb +181 -0
- data/lib/cmdx/task.rb +336 -427
- data/lib/cmdx/task_deprecator.rb +52 -0
- data/lib/cmdx/task_processor.rb +246 -0
- data/lib/cmdx/task_serializer.rb +34 -69
- data/lib/cmdx/utils/ansi_color.rb +13 -89
- data/lib/cmdx/utils/log_timestamp.rb +13 -42
- data/lib/cmdx/utils/monotonic_runtime.rb +11 -63
- data/lib/cmdx/utils/name_affix.rb +21 -71
- data/lib/cmdx/validator.rb +57 -0
- data/lib/cmdx/validator_registry.rb +108 -0
- data/lib/cmdx/validators/exclusion.rb +55 -94
- data/lib/cmdx/validators/format.rb +31 -85
- data/lib/cmdx/validators/inclusion.rb +65 -110
- data/lib/cmdx/validators/length.rb +117 -133
- data/lib/cmdx/validators/numeric.rb +123 -130
- data/lib/cmdx/validators/presence.rb +38 -79
- data/lib/cmdx/version.rb +1 -7
- data/lib/cmdx/workflow.rb +58 -330
- data/lib/cmdx.rb +1 -1
- data/lib/generators/cmdx/install_generator.rb +14 -31
- data/lib/generators/cmdx/task_generator.rb +39 -55
- data/lib/generators/cmdx/templates/install.rb +24 -6
- data/lib/generators/cmdx/workflow_generator.rb +41 -66
- data/lib/locales/ar.yml +0 -1
- data/lib/locales/cs.yml +0 -1
- data/lib/locales/da.yml +0 -1
- data/lib/locales/de.yml +0 -1
- data/lib/locales/el.yml +0 -1
- data/lib/locales/en.yml +0 -1
- data/lib/locales/es.yml +0 -1
- data/lib/locales/fi.yml +0 -1
- data/lib/locales/fr.yml +0 -1
- data/lib/locales/he.yml +0 -1
- data/lib/locales/hi.yml +0 -1
- data/lib/locales/it.yml +0 -1
- data/lib/locales/ja.yml +0 -1
- data/lib/locales/ko.yml +0 -1
- data/lib/locales/nl.yml +0 -1
- data/lib/locales/no.yml +0 -1
- data/lib/locales/pl.yml +0 -1
- data/lib/locales/pt.yml +0 -1
- data/lib/locales/ru.yml +0 -1
- data/lib/locales/sv.yml +0 -1
- data/lib/locales/th.yml +0 -1
- data/lib/locales/tr.yml +0 -1
- data/lib/locales/vi.yml +0 -1
- data/lib/locales/zh.yml +0 -1
- metadata +36 -8
- data/lib/cmdx/parameter_validator.rb +0 -81
- data/lib/cmdx/parameter_value.rb +0 -244
- data/lib/cmdx/parameters_inspector.rb +0 -72
- data/lib/cmdx/parameters_serializer.rb +0 -115
- data/lib/cmdx/rspec/result_matchers.rb +0 -917
- data/lib/cmdx/rspec/task_matchers.rb +0 -570
- data/lib/cmdx/validators/custom.rb +0 -102
@@ -1,48 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Cmdx
|
4
|
-
|
5
|
-
# Rails generator for creating CMDx initializer configuration.
|
4
|
+
# Rails generator for creating CMDx initializer configuration file.
|
6
5
|
#
|
7
|
-
# This generator creates a
|
8
|
-
# global
|
9
|
-
#
|
10
|
-
#
|
11
|
-
# The generated initializer provides sensible defaults that can be
|
12
|
-
# customized for specific application requirements.
|
13
|
-
#
|
14
|
-
# @example Generate CMDx initializer
|
15
|
-
# rails generate cmdx:install
|
16
|
-
#
|
17
|
-
# @example Generated file location
|
18
|
-
# config/initializers/cmdx.rb
|
19
|
-
#
|
20
|
-
# @since 1.0.0
|
6
|
+
# This generator creates a new initializer file at config/initializers/cmdx.rb
|
7
|
+
# with global configuration settings for the CMDx framework. The generated
|
8
|
+
# initializer provides a centralized location for configuring CMDx behavior
|
9
|
+
# such as logging, error handling, and default parameter settings.
|
21
10
|
class InstallGenerator < Rails::Generators::Base
|
22
11
|
|
23
12
|
source_root File.expand_path("templates", __dir__)
|
24
13
|
|
25
14
|
desc "Creates CMDx initializer with global configuration settings"
|
26
15
|
|
27
|
-
|
28
|
-
# Copies the CMDx configuration template to the Rails initializers directory.
|
16
|
+
# Copies the CMDx initializer template to the Rails application.
|
29
17
|
#
|
30
|
-
# Creates a new initializer file at
|
31
|
-
# default configuration
|
32
|
-
#
|
33
|
-
# - Timeout settings
|
34
|
-
# - Workflow execution controls
|
35
|
-
# - Logger configuration
|
18
|
+
# Creates a new initializer file at config/initializers/cmdx.rb by copying
|
19
|
+
# the install.rb template. This file contains the default CMDx configuration
|
20
|
+
# that can be customized for the specific application needs.
|
36
21
|
#
|
37
22
|
# @return [void]
|
38
|
-
# @raise [Thor::Error] if the destination file cannot be created
|
39
23
|
#
|
40
|
-
# @
|
41
|
-
#
|
42
|
-
#
|
43
|
-
|
44
|
-
#
|
45
|
-
# end
|
24
|
+
# @raise [Thor::Error] if the destination file cannot be created or already exists without force
|
25
|
+
#
|
26
|
+
# @example Generate CMDx initializer
|
27
|
+
# rails generate cmdx:install
|
28
|
+
# # Creates config/initializers/cmdx.rb
|
46
29
|
def copy_initializer_file
|
47
30
|
copy_file("install.rb", "config/initializers/cmdx.rb")
|
48
31
|
end
|
@@ -1,28 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Cmdx
|
4
|
-
|
5
|
-
# Rails generator for creating CMDx task classes.
|
4
|
+
# Rails generator for creating CMDx task files.
|
6
5
|
#
|
7
|
-
# This generator creates
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# The generator handles name normalization, ensuring "Task" suffix
|
13
|
-
# and proper file naming conventions. Generated tasks inherit from
|
14
|
-
# ApplicationTask when available, falling back to CMDx::Task.
|
15
|
-
#
|
16
|
-
# @example Generate a task
|
17
|
-
# rails generate cmdx:task SendEmail
|
18
|
-
# rails generate cmdx:task ProcessPayment
|
19
|
-
# rails generate cmdx:task ProcessPaymentTask # "Task" suffix preserved
|
20
|
-
#
|
21
|
-
# @example Generated file location
|
22
|
-
# app/cmds/send_email_task.rb
|
23
|
-
# app/cmds/process_payment_task.rb
|
24
|
-
#
|
25
|
-
# @since 1.0.0
|
6
|
+
# This generator creates task files in the app/cmds directory with proper
|
7
|
+
# class naming conventions and inheritance. It ensures task names end with
|
8
|
+
# "Task" suffix and creates files in the correct location within the Rails
|
9
|
+
# application structure.
|
26
10
|
class TaskGenerator < Rails::Generators::NamedBase
|
27
11
|
|
28
12
|
source_root File.expand_path("templates", __dir__)
|
@@ -30,25 +14,21 @@ module Cmdx
|
|
30
14
|
|
31
15
|
desc "Creates a task with the given NAME"
|
32
16
|
|
33
|
-
|
34
|
-
# Copies the task template to the application commands directory.
|
17
|
+
# Creates the task file from the template.
|
35
18
|
#
|
36
|
-
#
|
37
|
-
# The
|
38
|
-
#
|
39
|
-
# - Converting to snake_case for file naming
|
40
|
-
# - Adding "_task" suffix to the filename
|
41
|
-
# - Setting up proper class inheritance
|
19
|
+
# Generates a new task file in the app/cmds directory based on the provided
|
20
|
+
# name. The file name is normalized to ensure it ends with "_task.rb" and
|
21
|
+
# is placed in the appropriate subdirectory structure.
|
42
22
|
#
|
43
23
|
# @return [void]
|
44
|
-
# @raise [Thor::Error] if the destination file cannot be created
|
45
24
|
#
|
46
|
-
# @example
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
25
|
+
# @example Generate a user task
|
26
|
+
# rails generate cmdx:task user
|
27
|
+
# #=> Creates app/cmds/user_task.rb
|
28
|
+
#
|
29
|
+
# @example Generate a nested task
|
30
|
+
# rails generate cmdx:task admin/users
|
31
|
+
# #=> Creates app/cmds/admin/users_task.rb
|
52
32
|
def copy_files
|
53
33
|
name = file_name.sub(/_?task$/i, "")
|
54
34
|
path = File.join("app/cmds", class_path, "#{name}_task.rb")
|
@@ -57,37 +37,41 @@ module Cmdx
|
|
57
37
|
|
58
38
|
private
|
59
39
|
|
60
|
-
|
61
|
-
# Normalizes the class name by ensuring "Task" suffix.
|
40
|
+
# Ensures the class name ends with "Task" suffix.
|
62
41
|
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
42
|
+
# Takes the provided class name and appends "Task" if it doesn't already
|
43
|
+
# end with that suffix, ensuring consistent naming conventions across
|
44
|
+
# all generated task classes.
|
66
45
|
#
|
67
|
-
# @return [String] the
|
46
|
+
# @return [String] the class name with "Task" suffix
|
68
47
|
#
|
69
|
-
# @example Class name
|
70
|
-
# #
|
71
|
-
#
|
48
|
+
# @example Class name without suffix
|
49
|
+
# # Given name: "User"
|
50
|
+
# class_name #=> "UserTask"
|
72
51
|
#
|
73
|
-
#
|
74
|
-
# #
|
52
|
+
# @example Class name with suffix
|
53
|
+
# # Given name: "UserTask"
|
54
|
+
# class_name #=> "UserTask"
|
75
55
|
def class_name
|
76
56
|
@class_name ||= super.end_with?("Task") ? super : "#{super}Task"
|
77
57
|
end
|
78
58
|
|
79
|
-
##
|
80
59
|
# Determines the parent class for the generated task.
|
81
60
|
#
|
82
|
-
# Attempts to use ApplicationTask as the parent class if
|
83
|
-
#
|
84
|
-
# This allows applications to define
|
61
|
+
# Attempts to use ApplicationTask as the parent class if it exists in the
|
62
|
+
# application, otherwise falls back to CMDx::Task as the base class.
|
63
|
+
# This allows applications to define their own base task class with
|
64
|
+
# common functionality.
|
65
|
+
#
|
66
|
+
# @return [Class] the parent class for the generated task
|
67
|
+
#
|
68
|
+
# @raise [StandardError] if neither ApplicationTask nor CMDx::Task are available
|
85
69
|
#
|
86
|
-
# @
|
70
|
+
# @example With ApplicationTask defined
|
71
|
+
# parent_class_name #=> ApplicationTask
|
87
72
|
#
|
88
|
-
# @example
|
89
|
-
#
|
90
|
-
# # If ApplicationTask missing: "CMDx::Task"
|
73
|
+
# @example Without ApplicationTask
|
74
|
+
# parent_class_name #=> CMDx::Task
|
91
75
|
def parent_class_name
|
92
76
|
ApplicationTask
|
93
77
|
rescue StandardError
|
@@ -33,19 +33,37 @@ CMDx.configure do |config|
|
|
33
33
|
# Global middlewares - automatically applied to all tasks
|
34
34
|
# See https://github.com/drexed/cmdx/blob/main/docs/middlewares.md for more details
|
35
35
|
#
|
36
|
-
# config.middlewares.use CMDx::Middlewares::Timeout, seconds: 30
|
37
36
|
# config.middlewares.use CMDx::Middlewares::Correlate
|
38
|
-
# config.middlewares.use
|
39
|
-
# config.middlewares.use
|
37
|
+
# config.middlewares.use CMDx::Middlewares::Timeout, seconds: 30
|
38
|
+
# config.middlewares.use CustomAuthMiddleware, if: :admin?
|
39
|
+
# config.middlewares.use CustomPerfMiddleware.new(threshold: 5.0)
|
40
40
|
|
41
41
|
# Global callbacks - automatically applied to all tasks
|
42
42
|
# See https://github.com/drexed/cmdx/blob/main/docs/callbacks.md for more details
|
43
43
|
#
|
44
44
|
# config.callbacks.register :before_execution, :log_task_start
|
45
|
-
# config.callbacks.register :after_execution,
|
46
|
-
# config.callbacks.register :on_success, NotificationCallback.new([:email])
|
45
|
+
# config.callbacks.register :after_execution, TrackTaskCompletion
|
46
|
+
# config.callbacks.register :on_success, NotificationCallback.new(via: [:email, :slack])
|
47
47
|
# config.callbacks.register :on_failure, :alert_support, if: :critical?
|
48
|
-
# config.callbacks.register :on_complete, proc { |task,
|
48
|
+
# config.callbacks.register :on_complete, proc { |task, type|
|
49
49
|
# Metrics.increment("task.#{task.class.name.underscore}.completed")
|
50
50
|
# }
|
51
|
+
|
52
|
+
# Global coercions - custom parameter type conversions
|
53
|
+
# See https://github.com/drexed/cmdx/blob/main/docs/parameters/coercions.md for more details
|
54
|
+
#
|
55
|
+
# config.coercions.register :money, MoneyCoercion
|
56
|
+
# config.coercions.register :tags, TagsCoercion.new
|
57
|
+
# config.coercions.register :slug, proc { |value|
|
58
|
+
# value.to_s.downcase.gsub(/[^a-z0-9]+/, '-').gsub(/-+/, '-').strip('-')
|
59
|
+
# }
|
60
|
+
|
61
|
+
# Global validators - parameter validation logic
|
62
|
+
# See https://github.com/drexed/cmdx/blob/main/docs/parameters/validations.md for more details
|
63
|
+
#
|
64
|
+
# config.validators.register :email, EmailValidator
|
65
|
+
# config.validators.register :phone, PhoneValidator.new
|
66
|
+
# config.validators.register :phone, proc { |value, options|
|
67
|
+
# PhoneValidator.validate(value, options)
|
68
|
+
# }
|
51
69
|
end
|
@@ -1,36 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Cmdx
|
4
|
-
|
5
|
-
# Rails generator for creating CMDx workflow task classes.
|
4
|
+
# Rails generator for creating CMDx workflow files.
|
6
5
|
#
|
7
|
-
# This generator creates workflow
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# The generator handles name normalization, ensuring proper file naming
|
13
|
-
# conventions and class names. Generated workflow tasks inherit from
|
14
|
-
# ApplicationWorkflow when available, falling back to CMDx::Workflow.
|
15
|
-
#
|
16
|
-
# @example Generate a workflow task
|
17
|
-
# rails generate cmdx:workflow OrderProcessing
|
18
|
-
# rails generate cmdx:workflow PaymentWorkflow # "Workflow" suffix preserved
|
19
|
-
#
|
20
|
-
# @example Generated file location
|
21
|
-
# app/cmds/order_processing_workflow.rb
|
22
|
-
# app/cmds/payment_workflow.rb
|
23
|
-
#
|
24
|
-
# @example Generated class structure
|
25
|
-
# class OrderProcessingWorkflow < ApplicationWorkflow
|
26
|
-
# def call
|
27
|
-
# # Workflow orchestration logic
|
28
|
-
# end
|
29
|
-
# end
|
30
|
-
#
|
31
|
-
# @see CMDx::Workflow Base workflow class
|
32
|
-
# @see Rails::Generators::NamedBase Rails generator base class
|
33
|
-
# @since 1.0.0
|
6
|
+
# This generator creates workflow files in the app/cmds directory with proper
|
7
|
+
# class naming conventions and inheritance. It ensures workflow names end with
|
8
|
+
# "Workflow" suffix and creates files in the correct location within the Rails
|
9
|
+
# application structure.
|
34
10
|
class WorkflowGenerator < Rails::Generators::NamedBase
|
35
11
|
|
36
12
|
source_root File.expand_path("templates", __dir__)
|
@@ -38,28 +14,23 @@ module Cmdx
|
|
38
14
|
|
39
15
|
desc "Creates a workflow with the given NAME"
|
40
16
|
|
41
|
-
|
42
|
-
# Copies the workflow task template to the application commands directory.
|
17
|
+
# Creates the workflow file from the template.
|
43
18
|
#
|
44
|
-
#
|
45
|
-
# name. The
|
46
|
-
#
|
47
|
-
# - Converting to snake_case for file naming
|
48
|
-
# - Adding "_workflow" suffix to the filename
|
49
|
-
# - Setting up proper class inheritance
|
50
|
-
# - Ensuring class names end with "Workflow"
|
19
|
+
# Generates a new workflow file in the app/cmds directory based on the provided
|
20
|
+
# name. The file name is normalized to ensure it ends with "_workflow.rb" and
|
21
|
+
# is placed in the appropriate subdirectory structure.
|
51
22
|
#
|
52
23
|
# @return [void]
|
53
|
-
# @raise [Thor::Error] if the destination file cannot be created
|
54
24
|
#
|
55
|
-
# @
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
25
|
+
# @raise [Thor::Error] if the destination file cannot be created or already exists without force
|
26
|
+
#
|
27
|
+
# @example Generate a user workflow
|
28
|
+
# rails generate cmdx:workflow user
|
29
|
+
# #=> Creates app/cmds/user_workflow.rb
|
59
30
|
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
31
|
+
# @example Generate a nested workflow
|
32
|
+
# rails generate cmdx:workflow admin/users
|
33
|
+
# #=> Creates app/cmds/admin/users_workflow.rb
|
63
34
|
def copy_files
|
64
35
|
name = file_name.sub(/_?workflow$/i, "")
|
65
36
|
path = File.join("app/cmds", class_path, "#{name}_workflow.rb")
|
@@ -68,37 +39,41 @@ module Cmdx
|
|
68
39
|
|
69
40
|
private
|
70
41
|
|
71
|
-
|
72
|
-
# Normalizes the class name by ensuring it ends with "Workflow".
|
42
|
+
# Ensures the class name ends with "Workflow" suffix.
|
73
43
|
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
44
|
+
# Takes the provided class name and appends "Workflow" if it doesn't already
|
45
|
+
# end with that suffix, ensuring consistent naming conventions across
|
46
|
+
# all generated workflow classes.
|
77
47
|
#
|
78
|
-
# @return [String] the
|
48
|
+
# @return [String] the class name with "Workflow" suffix
|
79
49
|
#
|
80
|
-
# @example Class name
|
81
|
-
# #
|
82
|
-
#
|
50
|
+
# @example Class name without suffix
|
51
|
+
# # Given name: "User"
|
52
|
+
# class_name #=> "UserWorkflow"
|
83
53
|
#
|
84
|
-
#
|
85
|
-
# #
|
54
|
+
# @example Class name with suffix
|
55
|
+
# # Given name: "UserWorkflow"
|
56
|
+
# class_name #=> "UserWorkflow"
|
86
57
|
def class_name
|
87
58
|
@class_name ||= super.end_with?("Workflow") ? super : "#{super}Workflow"
|
88
59
|
end
|
89
60
|
|
90
|
-
|
91
|
-
#
|
61
|
+
# Determines the parent class for the generated workflow.
|
62
|
+
#
|
63
|
+
# Attempts to use ApplicationWorkflow as the parent class if it exists in the
|
64
|
+
# application, otherwise falls back to CMDx::Workflow as the base class.
|
65
|
+
# This allows applications to define their own base workflow class with
|
66
|
+
# common functionality.
|
67
|
+
#
|
68
|
+
# @return [Class] the parent class for the generated workflow
|
92
69
|
#
|
93
|
-
#
|
94
|
-
# falling back to CMDx::Workflow if ApplicationWorkflow is not defined.
|
95
|
-
# This allows applications to define custom base workflow behavior.
|
70
|
+
# @raise [StandardError] if neither ApplicationWorkflow nor CMDx::Workflow are available
|
96
71
|
#
|
97
|
-
# @
|
72
|
+
# @example With ApplicationWorkflow defined
|
73
|
+
# parent_class_name #=> ApplicationWorkflow
|
98
74
|
#
|
99
|
-
# @example
|
100
|
-
#
|
101
|
-
# # If ApplicationWorkflow missing: "CMDx::Workflow"
|
75
|
+
# @example Without ApplicationWorkflow
|
76
|
+
# parent_class_name #=> CMDx::Workflow
|
102
77
|
def parent_class_name
|
103
78
|
ApplicationWorkflow
|
104
79
|
rescue StandardError
|
data/lib/locales/ar.yml
CHANGED
data/lib/locales/cs.yml
CHANGED
data/lib/locales/da.yml
CHANGED
data/lib/locales/de.yml
CHANGED
@@ -11,7 +11,6 @@ de:
|
|
11
11
|
required: "ist ein erforderlicher Parameter"
|
12
12
|
undefined: "delegiert an undefinierte Methode %{source}"
|
13
13
|
validators:
|
14
|
-
custom: "ist nicht gültig"
|
15
14
|
exclusion:
|
16
15
|
of: "darf nicht einer von: %{values} sein"
|
17
16
|
within: "darf nicht zwischen %{min} und %{max} liegen"
|
data/lib/locales/el.yml
CHANGED
@@ -11,7 +11,6 @@ el:
|
|
11
11
|
required: "είναι υποχρεωτική παράμετρος"
|
12
12
|
undefined: "αναθέτει σε μη ορισμένη μέθοδο %{source}"
|
13
13
|
validators:
|
14
|
-
custom: "δεν είναι έγκυρο"
|
15
14
|
exclusion:
|
16
15
|
of: "δεν πρέπει να είναι ένα από: %{values}"
|
17
16
|
within: "δεν πρέπει να είναι μεταξύ %{min} και %{max}"
|
data/lib/locales/en.yml
CHANGED
data/lib/locales/es.yml
CHANGED
data/lib/locales/fi.yml
CHANGED
@@ -11,7 +11,6 @@ fi:
|
|
11
11
|
required: "on pakollinen parametri"
|
12
12
|
undefined: "delegoi määrittelemättömään metodiin %{source}"
|
13
13
|
validators:
|
14
|
-
custom: "ei ole kelvollinen"
|
15
14
|
exclusion:
|
16
15
|
of: "ei saa olla mikään seuraavista: %{values}"
|
17
16
|
within: "ei saa olla välillä %{min} ja %{max}"
|
data/lib/locales/fr.yml
CHANGED
data/lib/locales/he.yml
CHANGED
data/lib/locales/hi.yml
CHANGED
@@ -11,7 +11,6 @@ hi:
|
|
11
11
|
required: "एक आवश्यक पैरामीटर है"
|
12
12
|
undefined: "अपरिभाषित मेथड %{source} को प्रत्यायोजित करता है"
|
13
13
|
validators:
|
14
|
-
custom: "मान्य नहीं है"
|
15
14
|
exclusion:
|
16
15
|
of: "इनमें से एक नहीं होना चाहिए: %{values}"
|
17
16
|
within: "%{min} और %{max} के बीच नहीं होना चाहिए"
|
data/lib/locales/it.yml
CHANGED
data/lib/locales/ja.yml
CHANGED
data/lib/locales/ko.yml
CHANGED
data/lib/locales/nl.yml
CHANGED
data/lib/locales/no.yml
CHANGED
data/lib/locales/pl.yml
CHANGED
data/lib/locales/pt.yml
CHANGED
data/lib/locales/ru.yml
CHANGED
data/lib/locales/sv.yml
CHANGED
data/lib/locales/th.yml
CHANGED
data/lib/locales/tr.yml
CHANGED
data/lib/locales/vi.yml
CHANGED