Module: DeepSort::DeepSortHash
- Defined in:
- lib/deepsort.rb
Overview
inject this method into the Hash class to add deep sort functionality to Hashes Note: this cannot sort a hashes keys in place (deep_sort!), only the values
Instance Method Summary collapse
- #deep_sort ⇒ Object
- #deep_sort! ⇒ Object
- #deep_sort_by(&block) ⇒ Object
-
#deep_sort_by!(&block) ⇒ Object
Ruby Hashes don’t have in-place-modification like map!, each!, or sort! that means that this method won’t be able to sort the hash keys in place either.
Instance Method Details
#deep_sort ⇒ Object
55 56 57 |
# File 'lib/deepsort.rb', line 55 def deep_sort deep_sort_by { |obj| obj } end |
#deep_sort! ⇒ Object
59 60 61 |
# File 'lib/deepsort.rb', line 59 def deep_sort! deep_sort_by! { |obj| obj } end |
#deep_sort_by(&block) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/deepsort.rb', line 63 def deep_sort_by(&block) Hash[self.map do |key, value| [if key.respond_to? :deep_sort_by key.deep_sort_by &block elsif key.respond_to? :sort_by key.sort_by &block else key end, if value.respond_to? :deep_sort_by value.deep_sort_by &block elsif value.respond_to? :sort_by value.sort_by &block else value end] end.sort_by &block] end |
#deep_sort_by!(&block) ⇒ Object
Ruby Hashes don’t have in-place-modification like map!, each!, or sort! that means that this method won’t be able to sort the hash keys in place either. since Hashes are technically non-sorted key value pairs, this shouldn’t be a problem
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/deepsort.rb', line 87 def deep_sort_by!(&block) Hash[self.map do |key, value| if key.respond_to? :deep_sort_by! key.deep_sort_by! &block elsif key.respond_to? :sort_by! key.sort_by! &block end if value.respond_to? :deep_sort! value.deep_sort_by! &block elsif value.respond_to? :sort_by! value.sort_by! &block end [key, value] end] end |