Module: JetstreamBridge::ConfigHelpers

Defined in:
lib/jetstream_bridge/config_helpers.rb,
lib/jetstream_bridge/config_helpers/lifecycle.rb

Overview

Convenience helpers to keep example configuration lean and consistent.

Defined Under Namespace

Modules: Lifecycle

Constant Summary collapse

DEFAULT_STREAM =
'sync-stream'
DEFAULT_BACKOFF =
%w[1s 5s 15s 30s 60s].freeze
DEFAULT_ACK_WAIT =
'30s'
DEFAULT_MAX_DELIVER =
5

Class Method Summary collapse

Class Method Details

.configure_bidirectional(app_name:, destination_app:, mode: :non_restrictive, stream_name: DEFAULT_STREAM, nats_url: ENV.fetch('NATS_URL', 'nats://nats:4222'), use_outbox: true, use_inbox: true, logger: nil, **overrides) {|config| ... } ⇒ JetstreamBridge::Config

Configure a bidirectional bridge with sensible defaults.

Parameters:

  • app_name (String)

    Name of the local app (publisher + consumer)

  • destination_app (String)

    Remote app to sync with

  • mode (Symbol) (defaults to: :non_restrictive)

    :non_restrictive (auto provision) or :restrictive

  • stream_name (String) (defaults to: DEFAULT_STREAM)

    JetStream stream name

  • nats_url (String) (defaults to: ENV.fetch('NATS_URL', 'nats://nats:4222'))

    NATS connection URL(s)

  • use_outbox (Boolean) (defaults to: true)

    Enable transactional outbox pattern

  • use_inbox (Boolean) (defaults to: true)

    Enable idempotent inbox pattern

  • logger (Logger, nil) (defaults to: nil)

    Logger to attach to configuration

  • overrides (Hash)

    Additional config overrides applied verbatim

Yields:

  • (config)

    Optional block for further customization

Returns:



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/jetstream_bridge/config_helpers.rb', line 33

def configure_bidirectional(
  app_name:,
  destination_app:,
  mode: :non_restrictive,
  stream_name: DEFAULT_STREAM,
  nats_url: ENV.fetch('NATS_URL', 'nats://nats:4222'),
  use_outbox: true,
  use_inbox: true,
  logger: nil,
  **overrides
)
  JetstreamBridge.configure do |config|
    apply_base_settings(config, app_name, destination_app, stream_name, nats_url, use_outbox, use_inbox, mode,
                        overrides)
    apply_reliability_defaults(config, overrides)
    config.logger = logger if logger
    apply_overrides(config, overrides)
    yield(config) if block_given?

    config
  end
end

.setup_rails_lifecycle(logger: nil, rails_app: nil) ⇒ Object

Wire JetstreamBridge lifecycle into Rails boot/shutdown.



57
58
59
# File 'lib/jetstream_bridge/config_helpers.rb', line 57

def setup_rails_lifecycle(logger: nil, rails_app: nil)
  Lifecycle.setup(logger: logger, rails_app: rails_app)
end