Class: Smplkit::Config::ConfigClient
- Inherits:
-
Object
- Object
- Smplkit::Config::ConfigClient
- Defined in:
- lib/smplkit/config/client.rb
Overview
Synchronous config runtime namespace.
Obtained via Smplkit::Client#config. Exposes typed accessors (get_string, get_number, get_boolean, get_json) and runtime control (refresh, on_change).
Instance Method Summary collapse
- #_close ⇒ Object
- #_resolve_now(config_key) ⇒ Object
- #get(config_key, model_class = nil) ⇒ Object
- #get_boolean(item_key, default: nil, config: nil) ⇒ Object
- #get_json(item_key, default: nil, config: nil) ⇒ Object
- #get_number(item_key, default: nil, config: nil) ⇒ Object
- #get_string(item_key, default: nil, config: nil) ⇒ Object
-
#initialize(parent, manage:, metrics:) ⇒ ConfigClient
constructor
A new instance of ConfigClient.
- #live(config_key) ⇒ Object
- #on_change(config_key = nil, &block) ⇒ Object
- #refresh ⇒ Object
- #start ⇒ Object
Constructor Details
#initialize(parent, manage:, metrics:) ⇒ ConfigClient
Returns a new instance of ConfigClient.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/smplkit/config/client.rb', line 69 def initialize(parent, manage:, metrics:) @parent = parent @manage = manage @metrics = metrics @environment = parent._environment @service = parent._service @snapshots = {} @raw_chains = {} @global_listeners = [] @key_listeners = Hash.new { |h, k| h[k] = [] } @connected = false @lock = Mutex.new end |
Instance Method Details
#_close ⇒ Object
152 153 154 |
# File 'lib/smplkit/config/client.rb', line 152 def _close # No durable resources; symmetry stub. end |
#_resolve_now(config_key) ⇒ Object
148 149 150 |
# File 'lib/smplkit/config/client.rb', line 148 def _resolve_now(config_key) resolve(config_key) end |
#get(config_key, model_class = nil) ⇒ Object
94 95 96 97 98 99 100 101 |
# File 'lib/smplkit/config/client.rb', line 94 def get(config_key, model_class = nil) start unless @connected snapshot = resolve(config_key) return snapshot if model_class.nil? model_class.new(snapshot) end |
#get_boolean(item_key, default: nil, config: nil) ⇒ Object
115 116 117 |
# File 'lib/smplkit/config/client.rb', line 115 def get_boolean(item_key, default: nil, config: nil) typed_get(item_key, default, config) { |v| !!v } end |
#get_json(item_key, default: nil, config: nil) ⇒ Object
119 120 121 |
# File 'lib/smplkit/config/client.rb', line 119 def get_json(item_key, default: nil, config: nil) typed_get(item_key, default, config) { |v| v } end |
#get_number(item_key, default: nil, config: nil) ⇒ Object
107 108 109 110 111 112 113 |
# File 'lib/smplkit/config/client.rb', line 107 def get_number(item_key, default: nil, config: nil) typed_get(item_key, default, config) do |v| v.is_a?(Numeric) ? v : Float(v) rescue StandardError default end end |
#get_string(item_key, default: nil, config: nil) ⇒ Object
103 104 105 |
# File 'lib/smplkit/config/client.rb', line 103 def get_string(item_key, default: nil, config: nil) typed_get(item_key, default, config) { |v| v.is_a?(String) ? v : v.to_s } end |
#live(config_key) ⇒ Object
123 124 125 126 127 |
# File 'lib/smplkit/config/client.rb', line 123 def live(config_key) start unless @connected LiveConfigProxy.new(self, config_key) end |
#on_change(config_key = nil, &block) ⇒ Object
129 130 131 132 133 134 135 136 137 138 |
# File 'lib/smplkit/config/client.rb', line 129 def on_change(config_key = nil, &block) raise ArgumentError, "on_change requires a block" unless block if config_key.nil? @global_listeners << block else @key_listeners[config_key] << block end block end |
#refresh ⇒ Object
140 141 142 143 144 145 146 |
# File 'lib/smplkit/config/client.rb', line 140 def refresh @lock.synchronize do @snapshots.clear @raw_chains.clear end fire_change_listeners_all("manual") end |
#start ⇒ Object
84 85 86 87 88 89 90 91 92 |
# File 'lib/smplkit/config/client.rb', line 84 def start return if @connected @environment = @parent._environment @ws_manager = @parent._ensure_ws @ws_manager.on("config_changed") { |data| handle_config_changed(data) } @ws_manager.on("config_deleted") { |data| handle_config_deleted(data) } @connected = true end |