Class: Profiler::EnvOverrideStore
- Inherits:
-
Object
- Object
- Profiler::EnvOverrideStore
- Defined in:
- lib/profiler/env_override_store.rb
Constant Summary collapse
- DELETED_SENTINEL =
"__profiler_deleted__"- RESTORE_SENTINEL =
"__profiler_restore__"
Instance Method Summary collapse
-
#all_overrides ⇒ Object
Returns active overrides (excludes RESTORE entries — already being reverted).
- #apply! ⇒ Object
- #clear ⇒ Object
- #delete(key) ⇒ Object
- #reset(key) ⇒ Object
- #reset_all ⇒ Object
-
#set(key, value) ⇒ Object
File format: { “KEY” => { “value” => “…”, “original” => “…” } } Sentinels for “value”: DELETED_SENTINEL → ENV.delete(key) RESTORE_SENTINEL → restore ENV to “original” (cleaned up after apply!).
Instance Method Details
#all_overrides ⇒ Object
Returns active overrides (excludes RESTORE entries — already being reverted)
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/profiler/env_override_store.rb', line 95 def all_overrides load_overrides.reject do |_, entry| value = entry.is_a?(Hash) ? entry["value"] : entry value == RESTORE_SENTINEL end.transform_values do |entry| entry.is_a?(Hash) ? entry : { "value" => entry, "original" => nil } end rescue => e warn "[Profiler] EnvOverrideStore: failed to load overrides: #{e.}" {} end |
#apply! ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/profiler/env_override_store.rb', line 67 def apply! overrides = load_overrides restore_keys = [] overrides.each do |key, entry| value = entry.is_a?(Hash) ? entry["value"] : entry original = entry.is_a?(Hash) ? entry["original"] : nil case value when DELETED_SENTINEL ENV.delete(key) when RESTORE_SENTINEL original.nil? ? ENV.delete(key) : ENV[key] = original restore_keys << key else ENV[key] = value end end if restore_keys.any? restore_keys.each { |k| overrides.delete(k) } save_overrides(overrides) end rescue => e warn "[Profiler] EnvOverrideStore: failed to apply overrides: #{e.}" end |
#clear ⇒ Object
107 108 109 110 111 |
# File 'lib/profiler/env_override_store.rb', line 107 def clear FileUtils.rm_f(override_file_path) rescue => e warn "[Profiler] EnvOverrideStore: failed to clear: #{e.}" end |
#delete(key) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/profiler/env_override_store.rb', line 25 def delete(key) overrides = load_overrides original = original_for(overrides, key) overrides[key] = { "value" => DELETED_SENTINEL, "original" => original } save_overrides(overrides) rescue => e warn "[Profiler] EnvOverrideStore: failed to delete #{key}: #{e.}" end |
#reset(key) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/profiler/env_override_store.rb', line 34 def reset(key) overrides = load_overrides entry = overrides[key] return unless entry original = entry["original"] # Keep a RESTORE entry so Sidekiq workers pick it up on next job overrides[key] = { "value" => RESTORE_SENTINEL, "original" => original } save_overrides(overrides) # Apply immediately to the current (web) process original.nil? ? ENV.delete(key) : ENV[key] = original rescue => e warn "[Profiler] EnvOverrideStore: failed to reset #{key}: #{e.}" end |
#reset_all ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/profiler/env_override_store.rb', line 50 def reset_all overrides = load_overrides restore_overrides = {} overrides.each do |key, entry| original = entry.is_a?(Hash) ? entry["original"] : nil # Apply immediately to the current (web) process original.nil? ? ENV.delete(key) : ENV[key] = original # Leave a RESTORE sentinel for Sidekiq workers to pick up restore_overrides[key] = { "value" => RESTORE_SENTINEL, "original" => original } end restore_overrides.empty? ? clear : save_overrides(restore_overrides) rescue => e warn "[Profiler] EnvOverrideStore: failed to reset all: #{e.}" end |
#set(key, value) ⇒ Object
File format: { “KEY” => { “value” => “…”, “original” => “…” } } Sentinels for “value”:
DELETED_SENTINEL → ENV.delete(key)
RESTORE_SENTINEL → restore ENV[key] to "original" (cleaned up after apply!)
16 17 18 19 20 21 22 23 |
# File 'lib/profiler/env_override_store.rb', line 16 def set(key, value) overrides = load_overrides original = original_for(overrides, key) overrides[key] = { "value" => value.to_s, "original" => original } save_overrides(overrides) rescue => e warn "[Profiler] EnvOverrideStore: failed to set #{key}: #{e.}" end |