Module: Hashie::Extensions::DeepMergeConcat

Included in:
Orchparty::AST::Node, Orchparty::Context
Defined in:
lib/deep_merge.rb

Instance Method Summary collapse

Instance Method Details

#deep_merge_concat(other_hash, &block) ⇒ Object

Returns a new hash with self and other_hash merged recursively.



61
62
63
64
65
# File 'lib/deep_merge.rb', line 61

def deep_merge_concat(other_hash, &block)
  copy = dup
  copy.extend(Hashie::Extensions::DeepMergeConcat) unless copy.respond_to?(:deep_merge_concat!)
  copy.deep_merge_concat!(other_hash, &block)
end

#deep_merge_concat!(other_hash, &block) ⇒ Object

Returns a new hash with self and other_hash merged recursively. Modifies the receiver in place.



69
70
71
72
73
# File 'lib/deep_merge.rb', line 69

def deep_merge_concat!(other_hash, &block)
  return self unless other_hash.is_a?(::Hash)
  _recursive_merge_concat(self, other_hash, &block)
  self
end

#deep_sort(&block) ⇒ Object

Returns a new hash with self and other_hash merged recursively.



47
48
49
50
51
# File 'lib/deep_merge.rb', line 47

def deep_sort(&block)
  copy = dup
  copy.extend(Hashie::Extensions::DeepMergeConcat) unless copy.respond_to?(:deep_sort!)
  copy.deep_sort!(&block)
end

#deep_sort!(&block) ⇒ Object

Returns a new hash with self and other_hash merged recursively. Modifies the receiver in place.



55
56
57
58
# File 'lib/deep_merge.rb', line 55

def deep_sort!(&block)
  _recursive_sort(self, &block)
  self
end

#deep_sort_by_key_and_sort_array(&block) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/deep_merge.rb', line 34

def deep_sort_by_key_and_sort_array(&block)
  self.keys.sort(&block).reduce({}) do |seed, key|
    seed[key] = self[key]
    if seed[key].is_a?(Hash)
      seed[key] = seed[key].deep_sort_by_key_and_sort_array(&block)
    elsif seed[key].is_a?(Hashie::Array)
      seed[key] = seed[key].sort(&block)
    end
    seed
  end
end

#deep_transform_values(&block) ⇒ Object



75
76
77
# File 'lib/deep_merge.rb', line 75

def deep_transform_values(&block)
  _deep_transform_values_in_object(self, &block)
end

#deep_transform_values!(&block) ⇒ Object



79
80
81
# File 'lib/deep_merge.rb', line 79

def deep_transform_values!(&block)
  _deep_transform_values_in_object!(self, &block)
end

#transform_keysObject



19
20
21
22
23
24
25
# File 'lib/deep_merge.rb', line 19

def transform_keys
  result = self.class.new
  each_key do |key|
    result[yield(key)] = self[key]
  end
  result
end

#transform_keys!Object



27
28
29
30
31
32
# File 'lib/deep_merge.rb', line 27

def transform_keys!
  keys.each do |key|
    self[yield(key)] = delete(key)
  end
  self
end

#transform_valuesObject



5
6
7
8
9
10
11
# File 'lib/deep_merge.rb', line 5

def transform_values
  result = self.class.new
  each do |key, value|
    result[key] = yield(value)
  end
  result
end

#transform_values!Object



13
14
15
16
17
# File 'lib/deep_merge.rb', line 13

def transform_values!
  each do |key, value|
    self[key] = yield(value)
  end
end