class Unleash::Configuration

Attributes

app_name[RW]
backup_file[RW]
custom_http_headers[RW]
disable_client[RW]
disable_metrics[RW]
environment[RW]
instance_id[RW]
log_level[RW]
logger[RW]
metrics_interval[RW]
refresh_interval[RW]
retry_limit[RW]
timeout[RW]
url[RW]

Public Class Methods

new(opts = {}) click to toggle source
# File lib/unleash/configuration.rb, line 22
def initialize(opts = {})
  ensure_valid_opts(opts)
  set_defaults

  initialize_default_logger if opts[:logger].nil?

  merge(opts)
  refresh_backup_file!
end

Public Instance Methods

client_metrics_url() click to toggle source
# File lib/unleash/configuration.rb, line 58
def client_metrics_url
  self.url + '/client/metrics'
end
client_register_url() click to toggle source
# File lib/unleash/configuration.rb, line 62
def client_register_url
  self.url + '/client/register'
end
fetch_toggles_url() click to toggle source
# File lib/unleash/configuration.rb, line 54
def fetch_toggles_url
  self.url + '/client/features'
end
http_headers() click to toggle source
# File lib/unleash/configuration.rb, line 47
def http_headers
  {
    'UNLEASH-INSTANCEID' => self.instance_id,
    'UNLEASH-APPNAME' => self.app_name
  }.merge(custom_http_headers.dup)
end
metrics_interval_in_millis() click to toggle source
# File lib/unleash/configuration.rb, line 32
def metrics_interval_in_millis
  self.metrics_interval * 1_000
end
refresh_backup_file!() click to toggle source
# File lib/unleash/configuration.rb, line 43
def refresh_backup_file!
  self.backup_file = Dir.tmpdir + "/unleash-#{app_name}-repo.json" if self.backup_file.nil?
end
validate!() click to toggle source
# File lib/unleash/configuration.rb, line 36
def validate!
  return if self.disable_client

  raise ArgumentError, "URL and app_name are required parameters." if self.app_name.nil? || self.url.nil?
  raise ArgumentError, "custom_http_headers must be a hash." unless self.custom_http_headers.is_a?(Hash)
end

Private Instance Methods

ensure_valid_opts(opts) click to toggle source
# File lib/unleash/configuration.rb, line 68
def ensure_valid_opts(opts)
  unless opts[:custom_http_headers].is_a?(Hash) || opts[:custom_http_headers].nil?
    raise ArgumentError, "custom_http_headers must be a hash."
  end
end
initialize_default_logger() click to toggle source
# File lib/unleash/configuration.rb, line 91
def initialize_default_logger
  self.logger = Logger.new(STDOUT)

  # on default logger, use custom formatter that includes thread_name:
  self.logger.formatter = proc do |severity, datetime, _progname, msg|
    thread_name = (Thread.current[:name] || "Unleash").rjust(16, ' ')
    "[#{datetime.iso8601(6)} #{thread_name} #{severity.ljust(5, ' ')}] : #{msg}\n"
  end
end
merge(opts) click to toggle source
# File lib/unleash/configuration.rb, line 101
def merge(opts)
  opts.each_pair{ |opt, val| set_option(opt, val) }
  self
end
set_defaults() click to toggle source
# File lib/unleash/configuration.rb, line 74
def set_defaults
  self.app_name         = nil
  self.environment      = 'default'
  self.url              = nil
  self.instance_id      = SecureRandom.uuid
  self.disable_client   = false
  self.disable_metrics  = false
  self.refresh_interval = 15
  self.metrics_interval = 10
  self.timeout          = 30
  self.retry_limit      = 1
  self.backup_file      = nil
  self.log_level        = Logger::WARN

  self.custom_http_headers = {}
end
set_option(opt, val) click to toggle source
# File lib/unleash/configuration.rb, line 106
def set_option(opt, val)
  __send__("#{opt}=", val)
rescue NoMethodError
  raise ArgumentError, "unknown configuration parameter '#{val}'"
end