Module: DeepSort::DeepSortHash

Defined in:
lib/deepsort.rb

Overview

inject this method into the Hash class to add deep sort functionality to Hashes

Instance Method Summary collapse

Instance Method Details

#<=>(other) ⇒ Object

comparison for hashes is ill-defined. this performs array or string comparison if the normal comparison fails.



96
97
98
# File 'lib/deepsort.rb', line 96

def <=>(other)
  super(other) || to_a <=> other.to_a || to_s <=> other.to_s
end

#deep_sort(options = {}) ⇒ Object



52
53
54
# File 'lib/deepsort.rb', line 52

def deep_sort(options = {})
  deep_sort_by(options) { |obj| obj }
end

#deep_sort!(options = {}) ⇒ Object



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

def deep_sort!(options = {})
  deep_sort_by!(options) { |obj| obj }
end

#deep_sort_by(options = {}, &block) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/deepsort.rb', line 60

def deep_sort_by(options = {}, &block)
  hash = self.map do |key, value|
    [if key.respond_to?(:deep_sort_by)
      key.deep_sort_by(options, &block)
    else
      key
    end,

    if value.respond_to?(:deep_sort_by)
      value.deep_sort_by(options, &block)
    else
      value
    end]
  end

  Hash[options[:hash] == false ? hash : hash.sort_by(&block)]
end

#deep_sort_by!(options = {}, &block) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/deepsort.rb', line 78

def deep_sort_by!(options = {}, &block)
  hash = self.map do |key, value|
    [if key.respond_to?(:deep_sort_by!)
      key.deep_sort_by!(options, &block)
    else
      key
    end,

    if value.respond_to?(:deep_sort_by!)
      value.deep_sort_by!(options, &block)
    else
      value
    end]
  end
  replace(Hash[options[:hash] == false ? hash : hash.sort_by!(&block)])
end