Class: Webspicy::Support::DeepMerge

Inherits:
Object
  • Object
show all
Defined in:
lib/webspicy/support/deep_merge.rb

Constant Summary collapse

DEFAULT_OPTIONS =
{
  uniq_on_arrays: false
}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ DeepMerge

Returns a new instance of DeepMerge.



9
10
11
# File 'lib/webspicy/support/deep_merge.rb', line 9

def initialize(options = {})
  @options = DEFAULT_OPTIONS.merge(options)
end

Class Method Details

.deep_dup(*args, &bl) ⇒ Object



17
18
19
# File 'lib/webspicy/support/deep_merge.rb', line 17

def self.deep_dup(*args, &bl)
  new.deep_dup(*args, &bl)
end

.deep_merge(*args, &bl) ⇒ Object



13
14
15
# File 'lib/webspicy/support/deep_merge.rb', line 13

def self.deep_merge(*args, &bl)
  new.deep_merge(*args, &bl)
end

.symbolize_keys(*args, &bl) ⇒ Object



21
22
23
# File 'lib/webspicy/support/deep_merge.rb', line 21

def self.symbolize_keys(*args, &bl)
  new.symbolize_keys(*args, &bl)
end

Instance Method Details

#deep_dup(x) ⇒ Object



42
43
44
45
46
47
48
49
50
51
# File 'lib/webspicy/support/deep_merge.rb', line 42

def deep_dup(x)
  case x
  when Array
    x.map{|y| deep_dup(y) }
  when Hash
    x.each_with_object({}){|(k,v),memo| memo[k] = deep_dup(v) }
  else
    x
  end
end

#deep_merge(h1, h2) ⇒ Object



38
39
40
# File 'lib/webspicy/support/deep_merge.rb', line 38

def deep_merge(h1, h2)
  merge_maps(deep_dup(h1), deep_dup(h2))
end

#symbolize_keys(arg) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/webspicy/support/deep_merge.rb', line 25

def symbolize_keys(arg)
  case arg
  when Hash
    arg.each_pair.each_with_object({}){|(k,v),memo|
      memo[k.to_sym] = symbolize_keys(v)
    }
  when Array
    arg.map{|item| symbolize_keys(item) }
  else
    arg
  end
end