Class: FeatureHub::Sdk::FeatureHubConfig
- Inherits:
-
Object
- Object
- FeatureHub::Sdk::FeatureHubConfig
- Defined in:
- lib/feature_hub/sdk/feature_hub_config.rb
Overview
central dispatch class for FeatureHub SDK
Constant Summary collapse
- FALLBACK_ENVIRONMENT_ID =
"569b0129-d53d-4516-a818-9154af601047"
Instance Attribute Summary collapse
-
#api_keys ⇒ Object
readonly
Returns the value of attribute api_keys.
-
#client_evaluated ⇒ Object
readonly
Returns the value of attribute client_evaluated.
-
#edge_url ⇒ Object
readonly
Returns the value of attribute edge_url.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
Instance Method Summary collapse
- #close ⇒ Object
- #close_edge ⇒ Object
-
#edge_service_provider(edge_provider = nil) ⇒ Object
rubocop:enable Naming/AccessorMethodName.
- #environment_id ⇒ Object
- #feature(key, attrs = nil) ⇒ Object
- #force_new_edge_service ⇒ Object
-
#get_or_create_edge_service ⇒ Object
rubocop:disable Naming/AccessorMethodName.
- #init ⇒ Object
-
#initialize(edge_url = nil, api_keys = nil, repository = nil, edge_provider = nil, logger = nil) ⇒ FeatureHubConfig
constructor
rubocop:disable Metrics/ParameterLists.
- #new_context ⇒ Object
- #register_interceptor(interceptor) ⇒ Object
- #register_raw_update_listener(listener) ⇒ Object
- #repository(repo = nil) ⇒ Object
- #use_polling_edge_service(interval = ENV.fetch("FEATUREHUB_POLL_INTERVAL", ENV.fetch("FEATUREHUB_POLLING_INTERVAL", "30")).to_i) ⇒ Object
- #value(key, default_value = nil, attrs = nil) ⇒ Object
Constructor Details
#initialize(edge_url = nil, api_keys = nil, repository = nil, edge_provider = nil, logger = nil) ⇒ FeatureHubConfig
rubocop:disable Metrics/ParameterLists
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 32 def initialize(edge_url = nil, api_keys = nil, repository = nil, edge_provider = nil, logger = nil) # rubocop:disable Metrics/ParameterLists @logger = logger @repository = repository || FeatureHub::Sdk::FeatureHubRepository.new(nil, @logger) @closed = false resolved_url = resolve_edge_url(edge_url) resolved_keys = resolve_api_keys(api_keys) if resolved_url && resolved_keys && !resolved_keys.empty? detect_client_evaluated(resolved_keys) @edge_url = parse_edge_url(resolved_url) @api_keys = resolved_keys @edge_service_provider = edge_provider || method(:create_default_provider) else @edge_url = nil @api_keys = [] @client_evaluated = false @edge_service_provider = edge_provider || method(:create_null_provider) end end |
Instance Attribute Details
#api_keys ⇒ Object (readonly)
Returns the value of attribute api_keys.
30 31 32 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 30 def api_keys @api_keys end |
#client_evaluated ⇒ Object (readonly)
Returns the value of attribute client_evaluated.
30 31 32 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 30 def client_evaluated @client_evaluated end |
#edge_url ⇒ Object (readonly)
Returns the value of attribute edge_url.
30 31 32 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 30 def edge_url @edge_url end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
30 31 32 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 30 def logger @logger end |
Instance Method Details
#close ⇒ Object
131 132 133 134 135 136 137 138 139 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 131 def close unless @repository.nil? @logger&.info("[featurehubsdk] repository now closed") @repository.close @repository = nil end close_edge end |
#close_edge ⇒ Object
141 142 143 144 145 146 147 148 149 150 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 141 def close_edge return if @closed @logger&.info("[featurehubsdk] edge now closed") @closed = true return if @edge_service.nil? @edge_service.close @edge_service = nil end |
#edge_service_provider(edge_provider = nil) ⇒ Object
rubocop:enable Naming/AccessorMethodName
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 99 def edge_service_provider(edge_provider = nil) return nil if @closed return @edge_service_provider if edge_provider.nil? @edge_service_provider = edge_provider if @edge_service @edge_service&.close @edge_service = nil end edge_provider end |
#environment_id ⇒ Object
152 153 154 155 156 157 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 152 def environment_id return FALLBACK_ENVIRONMENT_ID if @api_keys.empty? parts = @api_keys.first.split("/") parts.length == 3 ? parts[1] : parts[0] end |
#feature(key, attrs = nil) ⇒ Object
58 59 60 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 58 def feature(key, attrs = nil) @repository.feature(key, attrs) end |
#force_new_edge_service ⇒ Object
80 81 82 83 84 85 86 87 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 80 def force_new_edge_service if @edge_service @edge_service&.close @edge_service = nil end get_or_create_edge_service end |
#get_or_create_edge_service ⇒ Object
rubocop:disable Naming/AccessorMethodName
90 91 92 93 94 95 96 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 90 def get_or_create_edge_service return nil if @closed @edge_service = create_edge_service if @edge_service.nil? @edge_service end |
#init ⇒ Object
75 76 77 78 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 75 def init get_or_create_edge_service.poll self end |
#new_context ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 119 def new_context get_or_create_edge_service edge_service = @closed ? nil : @edge_service if @client_evaluated ClientEvalFeatureContext.new(@repository, edge_service) else ServerEvalFeatureContext.new(@repository, edge_service) end end |
#register_interceptor(interceptor) ⇒ Object
66 67 68 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 66 def register_interceptor(interceptor) @repository.register_interceptor(interceptor) end |
#register_raw_update_listener(listener) ⇒ Object
70 71 72 73 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 70 def register_raw_update_listener(listener) @repository ||= FeatureHub::Sdk::FeatureHubRepository.new(nil, @logger) @repository.register_raw_update_listener(listener) end |
#repository(repo = nil) ⇒ Object
54 55 56 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 54 def repository(repo = nil) @repository = repo || @repository end |
#use_polling_edge_service(interval = ENV.fetch("FEATUREHUB_POLL_INTERVAL", ENV.fetch("FEATUREHUB_POLLING_INTERVAL", "30")).to_i) ⇒ Object
113 114 115 116 117 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 113 def use_polling_edge_service(interval = ENV.fetch("FEATUREHUB_POLL_INTERVAL", ENV.fetch("FEATUREHUB_POLLING_INTERVAL", "30")).to_i) @interval = interval @edge_service_provider = method(:create_polling_edge_provider) end |
#value(key, default_value = nil, attrs = nil) ⇒ Object
62 63 64 |
# File 'lib/feature_hub/sdk/feature_hub_config.rb', line 62 def value(key, default_value = nil, attrs = nil) @repository.value(key, default_value, attrs) end |