Module: DeepSort::HashExt

Included in:
Hash
Defined in:
lib/deep_sort/hash_ext.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.deep_sort(hash, options = {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/deep_sort/hash_ext.rb', line 11

def self.deep_sort(hash, options = {})
  new_hash = {}
  keys = hash.keys

  begin
    keys = keys.sort
  rescue
    keys = keys.sort_by(&:to_s)
  end

  keys.each do |key|
    value = hash[key]

    if value.is_a?(Array)
      value = DeepSort::ArrayExt.deep_sort(value, options)
    elsif value.is_a?(Hash)
      value = DeepSort::HashExt.deep_sort(value, options)
    elsif options[:sort_enum] and value.is_a?(Enumerable)
      value = DeepSort::ArrayExt.deep_sort(value.to_a, options)
    end

    new_hash[key] = value
  end

  new_hash
end

Instance Method Details

#deep_sort(options = {}) ⇒ Object



7
8
9
# File 'lib/deep_sort/hash_ext.rb', line 7

def deep_sort(options = {})
  DeepSort::HashExt.deep_sort(self, options)
end

#deep_sort!(options = {}) ⇒ Object



2
3
4
5
# File 'lib/deep_sort/hash_ext.rb', line 2

def deep_sort!(options = {})
  new_hash = self.deep_sort(options)
  self.replace(new_hash)
end