Class: Unleash::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/unleash/configuration.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Configuration

Returns a new instance of Configuration.



31
32
33
34
35
36
37
38
39
# File 'lib/unleash/configuration.rb', line 31

def initialize(opts = {})
  validate_custom_http_headers!(opts[:custom_http_headers]) if opts.has_key?(:custom_http_headers)
  set_defaults

  initialize_default_logger if opts[:logger].nil?

  merge(opts)
  refresh_backup_file!
end

Instance Attribute Details

#app_nameObject

Returns the value of attribute app_name.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def app_name
  @app_name
end

#backup_fileObject

Returns the value of attribute backup_file.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def backup_file
  @backup_file
end

#bootstrap_configObject

Returns the value of attribute bootstrap_config.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def bootstrap_config
  @bootstrap_config
end

#connection_idObject (readonly)

Returns the value of attribute connection_id.



29
30
31
# File 'lib/unleash/configuration.rb', line 29

def connection_id
  @connection_id
end

#custom_http_headersObject

Returns the value of attribute custom_http_headers.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def custom_http_headers
  @custom_http_headers
end

#disable_clientObject

Returns the value of attribute disable_client.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def disable_client
  @disable_client
end

#disable_metricsObject

Returns the value of attribute disable_metrics.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def disable_metrics
  @disable_metrics
end

#environmentObject

Returns the value of attribute environment.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def environment
  @environment
end

#experimental_modeObject

Returns the value of attribute experimental_mode.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def experimental_mode
  @experimental_mode
end

#instance_idObject

Returns the value of attribute instance_id.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def instance_id
  @instance_id
end

#log_levelObject

Returns the value of attribute log_level.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def log_level
  @log_level
end

#loggerObject

Returns the value of attribute logger.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def logger
  @logger
end

#metrics_intervalObject

Returns the value of attribute metrics_interval.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def metrics_interval
  @metrics_interval
end

#project_nameObject

Returns the value of attribute project_name.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def project_name
  @project_name
end

#refresh_intervalObject

Returns the value of attribute refresh_interval.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def refresh_interval
  @refresh_interval
end

#retry_limitObject

Returns the value of attribute retry_limit.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def retry_limit
  @retry_limit
end

#sdk_flavorObject

Returns the value of attribute sdk_flavor.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def sdk_flavor
  @sdk_flavor
end

#sdk_flavor_versionObject

Returns the value of attribute sdk_flavor_version.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def sdk_flavor_version
  @sdk_flavor_version
end

#strategiesObject

Returns the value of attribute strategies.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def strategies
  @strategies
end

#timeoutObject

Returns the value of attribute timeout.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def timeout
  @timeout
end

#urlObject

Returns the value of attribute url.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def url
  @url
end

#use_delta_apiObject

Returns the value of attribute use_delta_api.



7
8
9
# File 'lib/unleash/configuration.rb', line 7

def use_delta_api
  @use_delta_api
end

Instance Method Details

#client_metrics_uriObject



92
93
94
# File 'lib/unleash/configuration.rb', line 92

def client_metrics_uri
  URI("#{self.url_stripped_of_slash}/client/metrics")
end

#client_register_uriObject



96
97
98
# File 'lib/unleash/configuration.rb', line 96

def client_register_uri
  URI("#{self.url_stripped_of_slash}/client/register")
end

#fetch_toggles_uriObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/unleash/configuration.rb', line 76

def fetch_toggles_uri
  uri = nil
  ## Personal feeling but Rubocop's suggestion here is too dense to be properly readable
  # rubocop:disable Style/ConditionalAssignment
  if streaming_mode?
    uri = URI("#{self.url_stripped_of_slash}/client/streaming")
  elsif self.use_delta_api || polling_with_delta?
    uri = URI("#{self.url_stripped_of_slash}/client/delta")
  else
    uri = URI("#{self.url_stripped_of_slash}/client/features")
  end
  # rubocop:enable Style/ConditionalAssignment
  uri.query = "project=#{self.project_name}" unless self.project_name.nil?
  uri
end

#generate_custom_http_headersObject



119
120
121
122
123
# File 'lib/unleash/configuration.rb', line 119

def generate_custom_http_headers
  return self.custom_http_headers.call if self.custom_http_headers.respond_to?(:call)

  self.custom_http_headers
end

#http_headersObject



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/unleash/configuration.rb', line 64

def http_headers
  headers = {
    'User-Agent' => "UnleashClientRuby/#{Unleash::VERSION} #{RUBY_ENGINE}/#{RUBY_VERSION} [#{RUBY_PLATFORM}]",
    'UNLEASH-INSTANCEID' => self.instance_id,
    'UNLEASH-APPNAME' => self.app_name,
    'Unleash-Client-Spec' => CLIENT_SPECIFICATION_VERSION,
    'UNLEASH-SDK' => "unleash-ruby-sdk:#{Unleash::VERSION}"
  }.merge!(generate_custom_http_headers)
  headers['UNLEASH-CONNECTION-ID'] = @connection_id
  headers
end

#metrics_interval_in_millisObject



41
42
43
# File 'lib/unleash/configuration.rb', line 41

def metrics_interval_in_millis
  self.metrics_interval * 1_000
end

#polling_with_delta?Boolean

Returns:

  • (Boolean)


113
114
115
116
117
# File 'lib/unleash/configuration.rb', line 113

def polling_with_delta?
  self.experimental_mode.is_a?(Hash) &&
    self.experimental_mode[:type] == 'polling' &&
    self.experimental_mode[:format] == 'delta'
end

#refresh_backup_file!Object



60
61
62
# File 'lib/unleash/configuration.rb', line 60

def refresh_backup_file!
  self.backup_file = File.join(Dir.tmpdir, "unleash-#{app_name}-repo.json")
end

#sdk_flavor_fieldsObject



45
46
47
48
49
50
# File 'lib/unleash/configuration.rb', line 45

def sdk_flavor_fields
  {
    sdkFlavor: self.sdk_flavor,
    sdkFlavorVersion: self.sdk_flavor_version
  }.compact
end

#streaming_mode?Boolean

Returns:

  • (Boolean)


108
109
110
111
# File 'lib/unleash/configuration.rb', line 108

def streaming_mode?
  validate_streaming_support! if streaming_configured?
  streaming_configured?
end

#url_stripped_of_slashObject



100
101
102
# File 'lib/unleash/configuration.rb', line 100

def url_stripped_of_slash
  self.url.delete_suffix '/'
end

#use_bootstrap?Boolean

Returns:

  • (Boolean)


104
105
106
# File 'lib/unleash/configuration.rb', line 104

def use_bootstrap?
  self.bootstrap_config&.valid?
end

#validate!Object

Raises:

  • (ArgumentError)


52
53
54
55
56
57
58
# File 'lib/unleash/configuration.rb', line 52

def validate!
  return if self.disable_client

  raise ArgumentError, "app_name is a required parameter." if self.app_name.nil?

  validate_custom_http_headers!(self.custom_http_headers) unless self.url.nil?
end