module Collapsium::RecursiveSort
Provides recursive sort functions for hashes.
Public Instance Methods
recursive_sort(&block)
click to toggle source
Same as recursive_sort!
, but returns a copy.
# File lib/collapsium/recursive_sort.rb, line 52 def recursive_sort(&block) ret = nil if respond_to?(:recursive_dup) ret = recursive_dup else ret = dup end return ret.recursive_sort!(&block) end
recursive_sort!(&block)
click to toggle source
Recursively sort a Hash by its keys. Without a block, this function will not be able to compare keys of different size.
# File lib/collapsium/recursive_sort.rb, line 24 def recursive_sort!(&block) # If we have IndifferentAccess, we need to sort keys appropriately. the_keys = nil if singleton_class.ancestors.include?(IndifferentAccess) the_keys = IndifferentAccess.sorted_keys(keys, &block) else the_keys = keys.sort(&block) end return the_keys.reduce(self) do |seed, key| # Delete (and later re-insert) value for ordering value = self[key] delete(key) # Recurse into Hash values if value.is_a?(Hash) value.recursive_sort!(&block) end # re-insert value self[key] = value next seed end end