module DeepSort::DeepSortHash

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

Public Instance Methods

<=>(other) click to toggle source

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

Calls superclass method
# File lib/deepsort.rb, line 96
def <=>(other)
  super(other) || to_a <=> other.to_a || to_s <=> other.to_s
end
deep_sort(options = {}) click to toggle source
# File lib/deepsort.rb, line 52
def deep_sort(options = {})
  deep_sort_by(options) { |obj| obj }
end
deep_sort!(options = {}) click to toggle source
# File lib/deepsort.rb, line 56
def deep_sort!(options = {})
  deep_sort_by!(options) { |obj| obj }
end
deep_sort_by(options = {}, &block) click to toggle source
# 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) click to toggle source
# 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