Class: Changit::ConfigMerger

Inherits:
Object
  • Object
show all
Defined in:
lib/changit/config_merger.rb

Instance Method Summary collapse

Constructor Details

#initialize(src_config, target_config) ⇒ ConfigMerger

Returns a new instance of ConfigMerger.



3
4
5
6
# File 'lib/changit/config_merger.rb', line 3

def initialize(src_config, target_config)
  @src = src_config
  @target = target_config
end

Instance Method Details

#hash_difference(src_token_hash, target_token_hash) ⇒ Object

return the difference between two hashes



34
35
36
# File 'lib/changit/config_merger.rb', line 34

def hash_difference(src_token_hash, target_token_hash)
  src_token_hash.dup.delete_if { |k, _| target_token_hash.key?(k) }
end

#mergeObject

comapre and merge src_config into target_config into a lexer



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/changit/config_merger.rb', line 9

def merge
  src_lexer = Lexer.new(@src)
  src_token_hash = src_lexer.token_hash

  target_lexer = Lexer.new(@target)
  target_token_hash = target_lexer.token_hash

  if target_token_hash.empty?
    target_lexer = src_lexer
  else
    target_token_hash.each do |k, v|
      if src_token_hash[k]
        target_token_hash[k].merge!(src_token_hash[k])
      end
    end

    config_difference = hash_difference(src_token_hash, target_token_hash)
    target_token_hash.merge!(config_difference)
    target_lexer.reconstruct_tokens_from_hash!
  end

  target_lexer
end