Module: Sbmt::Outbox

Defined in:
lib/sbmt/outbox.rb,
lib/sbmt/outbox/cli.rb,
lib/sbmt/outbox/engine.rb,
lib/sbmt/outbox/errors.rb,
lib/sbmt/outbox/logger.rb,
lib/sbmt/outbox/worker.rb,
lib/sbmt/outbox/version.rb,
lib/sbmt/outbox/ascii_art.rb,
lib/sbmt/outbox/throttler.rb,
lib/sbmt/outbox/thread_pool.rb,
lib/sbmt/outbox/probes/probe.rb,
lib/sbmt/outbox/error_tracker.rb,
app/models/sbmt/outbox/base_item.rb,
app/models/sbmt/outbox/inbox_item.rb,
lib/sbmt/outbox/database_switcher.rb,
lib/sbmt/outbox/middleware/runner.rb,
app/models/sbmt/outbox/outbox_item.rb,
lib/sbmt/outbox/middleware/builder.rb,
lib/sbmt/outbox/redis_client_factory.rb,
app/models/sbmt/outbox/base_item_config.rb,
app/interactors/sbmt/outbox/process_item.rb,
app/models/sbmt/outbox/inbox_item_config.rb,
app/models/sbmt/outbox/outbox_item_config.rb,
app/interactors/sbmt/outbox/dry_interactor.rb,
app/interactors/sbmt/outbox/base_create_item.rb,
app/interactors/sbmt/outbox/create_inbox_item.rb,
lib/sbmt/outbox/middleware/sentry/transaction.rb,
app/interactors/sbmt/outbox/create_outbox_item.rb,
app/jobs/sbmt/outbox/base_delete_stale_items_job.rb,
app/jobs/sbmt/outbox/delete_stale_inbox_items_job.rb,
app/jobs/sbmt/outbox/delete_stale_outbox_items_job.rb,
lib/sbmt/outbox/instrumentation/open_telemetry_loader.rb,
app/interactors/sbmt/outbox/retry_strategies/compacted_log.rb,
app/interactors/sbmt/outbox/retry_strategies/exponential_backoff.rb,
lib/sbmt/outbox/middleware/sentry/tracing_item_process_middleware.rb,
app/interactors/sbmt/outbox/partition_strategies/hash_partitioning.rb,
lib/sbmt/outbox/middleware/sentry/tracing_batch_process_middleware.rb,
app/interactors/sbmt/outbox/partition_strategies/number_partitioning.rb,
lib/sbmt/outbox/middleware/open_telemetry/tracing_create_item_middleware.rb,
lib/sbmt/outbox/middleware/open_telemetry/tracing_item_process_middleware.rb

Defined Under Namespace

Modules: AsciiArt, Instrumentation, Middleware, PartitionStrategies, Probes, RedisClientFactory, RetryStrategies Classes: BaseCreateItem, BaseDeleteStaleItemsJob, BaseItem, BaseItemConfig, CLI, ConfigError, CreateInboxItem, CreateOutboxItem, DatabaseError, DatabaseSwitcher, DeleteStaleInboxItemsJob, DeleteStaleOutboxItemsJob, DryInteractor, Engine, Error, ErrorTracker, InboxItem, InboxItemConfig, Logger, OutboxItem, OutboxItemConfig, ProcessItem, ThreadPool, Throttler, Worker

Constant Summary collapse

VERSION =
"5.0.1"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.current_workerObject

Returns the value of attribute current_worker.



43
44
45
# File 'lib/sbmt/outbox.rb', line 43

def current_worker
  @current_worker
end

Class Method Details

.active_job_base_classObject



60
61
62
# File 'lib/sbmt/outbox.rb', line 60

def active_job_base_class
  @active_job_base_class ||= config.active_job_base_class.safe_constantize || ActiveJob::Base
end

.active_record_base_classObject



56
57
58
# File 'lib/sbmt/outbox.rb', line 56

def active_record_base_class
  @active_record_base_class ||= config.active_record_base_class.safe_constantize || ActiveRecord::Base
end

.batch_process_middlewaresObject



124
125
126
# File 'lib/sbmt/outbox.rb', line 124

def batch_process_middlewares
  @batch_process_middlewares ||= config.batch_process_middlewares.map(&:constantize)
end

.configObject



48
49
50
# File 'lib/sbmt/outbox.rb', line 48

def config
  @config ||= Rails.application.config.outbox
end

.create_item_middlewaresObject



132
133
134
# File 'lib/sbmt/outbox.rb', line 132

def create_item_middlewares
  @create_item_middlewares ||= config.create_item_middlewares.map(&:constantize)
end

.database_switcherObject



68
69
70
# File 'lib/sbmt/outbox.rb', line 68

def database_switcher
  @database_switcher ||= config.database_switcher.constantize
end

.error_trackerObject



64
65
66
# File 'lib/sbmt/outbox.rb', line 64

def error_tracker
  @error_tracker ||= config.error_tracker.constantize
end

.inbox_item_classesObject



80
81
82
83
84
85
86
# File 'lib/sbmt/outbox.rb', line 80

def inbox_item_classes
  @inbox_item_classes ||= if config.inbox_item_classes.empty?
    (yaml_config[:inbox_items] || {}).keys.map { |name| name.camelize.constantize }
  else
    config.inbox_item_classes.map(&:constantize)
  end
end

.item_classesObject



88
89
90
# File 'lib/sbmt/outbox.rb', line 88

def item_classes
  @item_classes ||= outbox_item_classes + inbox_item_classes
end

.item_classes_by_nameObject



92
93
94
# File 'lib/sbmt/outbox.rb', line 92

def item_classes_by_name
  @item_classes_by_name ||= item_classes.index_by(&:box_name)
end

.item_process_middlewaresObject



128
129
130
# File 'lib/sbmt/outbox.rb', line 128

def item_process_middlewares
  @item_process_middlewares ||= config.item_process_middlewares.map(&:constantize)
end

.load_yaml(path) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
# File 'lib/sbmt/outbox.rb', line 112

def load_yaml(path)
  data = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new("4.0.0")
    YAML.safe_load(ERB.new(File.read(path)).result, aliases: true)
  else
    YAML.safe_load(ERB.new(File.read(path)).result, [], [], true)
  end

  data
    .with_indifferent_access
    .fetch(Rails.env, {})
end

.loggerObject



52
53
54
# File 'lib/sbmt/outbox.rb', line 52

def logger
  @logger ||= Sbmt::Outbox::Logger.new
end

.outbox_item_classesObject



72
73
74
75
76
77
78
# File 'lib/sbmt/outbox.rb', line 72

def outbox_item_classes
  @outbox_item_classes ||= if config.outbox_item_classes.empty?
    (yaml_config[:outbox_items] || {}).keys.map { |name| name.camelize.constantize }
  else
    config.outbox_item_classes.map(&:constantize)
  end
end

.yaml_configObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/sbmt/outbox.rb', line 96

def yaml_config
  return @yaml_config if defined?(@yaml_config)

  paths = if config.paths.empty?
    [Rails.root.join("config/outbox.yml").to_s]
  else
    config.paths
  end

  @yaml_config = paths.each_with_object({}.with_indifferent_access) do |path, memo|
    memo.deep_merge!(
      load_yaml(path)
    )
  end
end