Module: SagaForge
- Defined in:
- lib/saga_forge.rb,
lib/saga_forge/base.rb,
lib/saga_forge/event.rb,
lib/saga_forge/state.rb,
lib/saga_forge/router.rb,
lib/saga_forge/railtie.rb,
lib/saga_forge/version.rb,
lib/saga_forge/publisher.rb,
lib/saga_forge/definition.rb,
lib/saga_forge/sweeper_job.rb,
lib/saga_forge/timeout_job.rb,
lib/saga_forge/retry_policy.rb,
lib/saga_forge/configuration.rb,
lib/saga_forge/execution_job.rb,
lib/saga_forge/retention_job.rb,
lib/saga_forge/dashboard/graph.rb,
lib/saga_forge/compensation_job.rb,
lib/saga_forge/execution/facade.rb,
lib/saga_forge/execution/runner.rb,
lib/saga_forge/application_record.rb,
lib/saga_forge/compensation_runner.rb,
lib/saga_forge/execution/post_commit.rb,
lib/saga_forge/composite_retry_policy.rb,
lib/generators/saga_forge/migration_actions.rb,
lib/saga_forge/execution/compensation_facade.rb,
lib/generators/saga_forge/install/install_generator.rb,
lib/generators/saga_forge/upgrade/upgrade_generator.rb
Defined Under Namespace
Modules: Dashboard, Execution, Generators Classes: AmbiguousEventError, ApplicationRecord, Base, CompensationJob, CompensationRunner, CompositeRetryPolicy, ConcurrencyConflict, Configuration, Definition, DefinitionError, Error, Event, ExecutionJob, ForwardOnlyError, InstallGenerator, MissingCorrelationError, NoTerminalStateError, Publisher, Railtie, RetentionJob, RetryPolicy, Router, State, SweeperJob, TimeoutJob, UnknownCompensationError, UnknownStateError, UnstagedPublishError, UpgradeGenerator
Constant Summary collapse
- Loader =
Zeitwerk::Loader.for_gem.tap do |loader| loader.ignore("#{__dir__}/generators") loader.ignore("#{__dir__}/saga_forge/railtie.rb") loader.setup end
- VERSION =
"0.1.0"
Class Method Summary collapse
- .config ⇒ Object
- .configure {|config| ... } ⇒ Object
-
.guarding_execution ⇒ Object
Wrapped around user block invocation ONLY (forward, compensation, timeout blocks).
-
.primary_key_type ⇒ Object
PK type for engine tables: explicit config → host generator config → Rails default.
-
.publish(event_name, **payload) ⇒ Object
External publish entry point.
- .reset_configuration! ⇒ Object
-
.safe_error_message(msg, limit) ⇒ Object
Encoding-safe truncation for persisting error text into JSON columns: arbitrary bytes (binary paths, HTTP bodies) must never crash the failure-recording path itself.
-
.within_saga_execution? ⇒ Boolean
--- execution guard ---.
Class Method Details
.config ⇒ Object
37 |
# File 'lib/saga_forge.rb', line 37 def config = @config ||= Configuration.new |
.configure {|config| ... } ⇒ Object
39 |
# File 'lib/saga_forge.rb', line 39 def configure = yield(config) |
.guarding_execution ⇒ Object
Wrapped around user block invocation ONLY (forward, compensation, timeout blocks). Footgun-catcher, not a sandbox.
71 72 73 74 75 76 77 |
# File 'lib/saga_forge.rb', line 71 def guarding_execution previous = ActiveSupport::IsolatedExecutionState[:saga_forge_execution] ActiveSupport::IsolatedExecutionState[:saga_forge_execution] = true yield ensure ActiveSupport::IsolatedExecutionState[:saga_forge_execution] = previous end |
.primary_key_type ⇒ Object
PK type for engine tables: explicit config → host generator config → Rails default.
50 51 52 53 54 |
# File 'lib/saga_forge.rb', line 50 def primary_key_type config.primary_key_type || Rails.application&.config&.generators&.&.dig(:active_record, :primary_key_type) || :primary_key end |
.publish(event_name, **payload) ⇒ Object
External publish entry point. Raises UnstagedPublishError inside saga execution — use saga.publish there. (Publisher lands in Task 4.)
45 46 47 |
# File 'lib/saga_forge.rb', line 45 def publish(event_name, **payload) Publisher.publish(event_name, payload: payload) end |
.reset_configuration! ⇒ Object
41 |
# File 'lib/saga_forge.rb', line 41 def reset_configuration! = @config = Configuration.new |
.safe_error_message(msg, limit) ⇒ Object
Encoding-safe truncation for persisting error text into JSON columns: arbitrary bytes (binary paths, HTTP bodies) must never crash the failure-recording path itself.
65 66 67 |
# File 'lib/saga_forge.rb', line 65 def (msg, limit) msg.to_s.encode("UTF-8", invalid: :replace, undef: :replace, replace: "\u{FFFD}").truncate(limit) end |
.within_saga_execution? ⇒ Boolean
--- execution guard ---
58 59 60 |
# File 'lib/saga_forge.rb', line 58 def within_saga_execution? !!ActiveSupport::IsolatedExecutionState[:saga_forge_execution] end |