Class: KairosMcp::ConfigMerger
- Inherits:
-
Object
- Object
- KairosMcp::ConfigMerger
- Defined in:
- lib/kairos_mcp/config_merger.rb
Overview
ConfigMerger: Structural YAML merge for config files
Merges new template values into user-modified config files:
- New keys (only in template) → added with default values
- User-only keys (only in user file) → preserved
- Shared keys → user's value is kept
- Nested hashes → recursively merged
- Arrays → user's version is kept (no element-level merge)
This ensures config upgrades add new features without overwriting user customizations.
Class Method Summary collapse
-
.merge(user_config, new_config) ⇒ Hash
Merge new template config into user config.
-
.preview(user_config, new_config) ⇒ Hash
Preview what would change without applying.
Instance Method Summary collapse
-
#initialize(user_config, new_config) ⇒ ConfigMerger
constructor
A new instance of ConfigMerger.
-
#merge ⇒ Hash
Perform the merge.
-
#preview ⇒ Hash
Generate a diff preview.
Constructor Details
#initialize(user_config, new_config) ⇒ ConfigMerger
Returns a new instance of ConfigMerger.
37 38 39 40 |
# File 'lib/kairos_mcp/config_merger.rb', line 37 def initialize(user_config, new_config) @user = user_config || {} @new = new_config || {} end |
Class Method Details
.merge(user_config, new_config) ⇒ Hash
Merge new template config into user config
24 25 26 |
# File 'lib/kairos_mcp/config_merger.rb', line 24 def self.merge(user_config, new_config) new(user_config, new_config).merge end |
.preview(user_config, new_config) ⇒ Hash
Preview what would change without applying
33 34 35 |
# File 'lib/kairos_mcp/config_merger.rb', line 33 def self.preview(user_config, new_config) new(user_config, new_config).preview end |
Instance Method Details
#merge ⇒ Hash
Perform the merge
45 46 47 |
# File 'lib/kairos_mcp/config_merger.rb', line 45 def merge deep_merge(@user, @new) end |
#preview ⇒ Hash
Generate a diff preview
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/kairos_mcp/config_merger.rb', line 52 def preview diff = { added: [], # Keys in new but not in user (will be added) user_customized: [], # Keys where user has different value (user value kept) unchanged: [], # Keys with same value in both user_only: [] # Keys only in user config (preserved) } collect_diff(@user, @new, [], diff) diff end |