class ActionSubscriber::Configuration

Constants

CONFIGURATION_MUTEX
DEFAULTS
NETWORK_RECOVERY_INTERVAL

Attributes

allow_low_priority_methods[RW]
connection_reaping_interval[RW]
connection_reaping_timeout_interval[RW]
decoder[RW]
default_exchange[RW]
error_handler[RW]
heartbeat[RW]
host[RW]
hosts[RW]
network_recovery_interval[RW]
password[RW]
port[RW]
prefetch[RW]
resubscribe_on_consumer_cancellation[RW]
seconds_to_wait_for_graceful_shutdown[RW]
threadpool_size[RW]
timeout[RW]
tls[RW]
tls_ca_certificates[RW]
tls_cert[RW]
tls_key[RW]
username[RW]
verify_peer[RW]
virtual_host[RW]

Public Class Methods

configure_from_yaml_and_cli(cli_options = {}, reload = false) click to toggle source

Class Methods

# File lib/action_subscriber/configuration.rb, line 62
def self.configure_from_yaml_and_cli(cli_options = {}, reload = false)
  CONFIGURATION_MUTEX.synchronize do
    @configure_from_yaml_and_cli = nil if reload
    @configure_from_yaml_and_cli ||= begin
      env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || ENV["APP_ENV"] || "development"

      yaml_config = {}
      absolute_config_path = ::File.expand_path(::File.join("config", "action_subscriber.yml"))
      if ::File.exists?(absolute_config_path)
        erb_yaml = ::ERB.new(::File.read(absolute_config_path)).result
        # Defined in Psych 3.2+ and the new canonical way to load trusted documents:
        # https://github.com/ruby/psych/issues/533#issuecomment-1019363688
        yaml_config = ::YAML.respond_to?(:unsafe_load) ? ::YAML.unsafe_load(erb_yaml)[env] : ::YAML.load(erb_yaml)[env]
      end

      ::ActionSubscriber::Configuration::DEFAULTS.each_pair do |key, value|
        exists, setting = fetch_config_value(key, cli_options, yaml_config)
        ::ActionSubscriber.config.__send__("#{key}=", setting) if exists
      end

      true
    end
  end
end
new() click to toggle source

Instance Methods

# File lib/action_subscriber/configuration.rb, line 99
def initialize
  self.decoder = {
    'application/json' => lambda { |payload| JSON.parse(payload) },
    'text/plain' => lambda { |payload| payload.dup }
  }

  self.error_handler = lambda do |error, env_hash|
    logger = ::ActionSubscriber::Logging.logger

    logger.error(error.message)
    logger.error(error.class.to_s)
    logger.error(error.backtrace.join("\n")) if error.try(:backtrace) && error.backtrace.is_a?(::Array)
  end

  DEFAULTS.each_pair do |key, value|
    self.__send__("#{key}=", value)
  end
end

Private Class Methods

fetch_config_value(key, cli_options, yaml_config) click to toggle source
# File lib/action_subscriber/configuration.rb, line 87
def self.fetch_config_value(key, cli_options, yaml_config)
  return [true, cli_options[key]] if cli_options.key?(key)
  return [true, cli_options[key.to_s]] if cli_options.key?(key.to_s)
  return [true, yaml_config[key]] if yaml_config.key?(key)
  return [true, yaml_config[key.to_s]] if yaml_config.key?(key.to_s)
  [false, nil]
end

Public Instance Methods

add_decoder(decoders) click to toggle source

Instance Methods

# File lib/action_subscriber/configuration.rb, line 121
def add_decoder(decoders)
  decoders.each_pair do |content_type, decoder|
    unless decoder.arity == 1
      raise "ActionSubscriber decoders must have an arity of 1. The #{content_type} decoder was given with arity of #{decoder.arity}."
    end
  end

  self.decoder.merge!(decoders)
end
connection_string=(url) click to toggle source
# File lib/action_subscriber/configuration.rb, line 131
def connection_string=(url)
  settings = ::ActionSubscriber::URI.parse_amqp_url(url)
  settings.each do |key, value|
    send("#{key}=", value)
  end
end
inspect() click to toggle source
# File lib/action_subscriber/configuration.rb, line 147
    def inspect
      inspection_string  = <<-INSPECT.strip_heredoc
        Rabbit Hosts: #{hosts}
        Rabbit Port: #{port}
        Threadpool Size: #{threadpool_size}
        Low Priority Subscriber: #{allow_low_priority_methods}
        Decoders:
      INSPECT
      decoder.each_key { |key| inspection_string << "  --#{key}\n" }
      return inspection_string
    end
middleware() click to toggle source
# File lib/action_subscriber/configuration.rb, line 143
def middleware
  @middleware ||= Middleware.initialize_stack
end