Module: JetstreamBridge::ConsumerModeResolver
- Defined in:
- lib/jetstream_bridge/core/consumer_mode_resolver.rb
Constant Summary collapse
- VALID_MODES =
[:pull, :push].freeze
Class Method Summary collapse
- .app_specific(app_name) ⇒ Object
- .env_for(app_name) ⇒ Object
- .from_map(app_name) ⇒ Object
- .normalize(mode) ⇒ Object
-
.resolve(app_name:, override: nil, fallback: :pull) ⇒ Object
Resolve consumer mode for a given app.
- .shared ⇒ Object
Class Method Details
.app_specific(app_name) ⇒ Object
42 43 44 45 46 47 |
# File 'lib/jetstream_bridge/core/consumer_mode_resolver.rb', line 42 def app_specific(app_name) key = "CONSUMER_MODE_#{app_name.to_s.upcase}" return nil unless ENV.key?(key) normalize(ENV.fetch(key, nil)) end |
.env_for(app_name) ⇒ Object
26 27 28 |
# File 'lib/jetstream_bridge/core/consumer_mode_resolver.rb', line 26 def env_for(app_name) from_map(app_name) || app_specific(app_name) || shared end |
.from_map(app_name) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/jetstream_bridge/core/consumer_mode_resolver.rb', line 30 def from_map(app_name) env_map = ENV.fetch('CONSUMER_MODES', nil) return nil if env_map.to_s.strip.empty? pairs = env_map.split(',').each_with_object({}) do |pair, memo| key, mode = pair.split(':', 2).map { |p| p&.strip } memo[key] = mode if key && mode end normalize(pairs[app_name.to_s]) if pairs.key?(app_name.to_s) end |
.normalize(mode) ⇒ Object
55 56 57 58 59 60 61 62 |
# File 'lib/jetstream_bridge/core/consumer_mode_resolver.rb', line 55 def normalize(mode) return nil if mode.nil? || mode.to_s.strip.empty? m = mode.to_s.downcase.to_sym return m if VALID_MODES.include?(m) raise ArgumentError, "Invalid consumer mode #{mode.inspect}. Use :pull or :push." end |
.resolve(app_name:, override: nil, fallback: :pull) ⇒ Object
Resolve consumer mode for a given app.
Priority: 1) explicit override (symbol/string) 2) env map CONSUMER_MODES=“app:mode,…” 3) per-app env CONSUMER_MODE_<APP_NAME> 4) shared env CONSUMER_MODE 5) fallback (default :pull)
17 18 19 20 21 22 23 24 |
# File 'lib/jetstream_bridge/core/consumer_mode_resolver.rb', line 17 def resolve(app_name:, override: nil, fallback: :pull) return normalize(override) if override from_env = env_for(app_name) return from_env if from_env normalize(fallback) end |
.shared ⇒ Object
49 50 51 52 53 |
# File 'lib/jetstream_bridge/core/consumer_mode_resolver.rb', line 49 def shared return nil unless ENV['CONSUMER_MODE'] normalize(ENV.fetch('CONSUMER_MODE', nil)) end |