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
-
#<=>(other) ⇒ Object
comparison for hashes is ill-defined.
- #deep_sort(options = {}) ⇒ Object
- #deep_sort!(options = {}) ⇒ Object
- #deep_sort_by(options = {}, &block) ⇒ Object
- #deep_sort_by!(options = {}, &block) ⇒ Object
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( = {}) deep_sort_by() { |obj| obj } end |
#deep_sort!(options = {}) ⇒ Object
56 57 58 |
# File 'lib/deepsort.rb', line 56 def deep_sort!( = {}) deep_sort_by!() { |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( = {}, &block) hash = self.map do |key, value| [if key.respond_to?(:deep_sort_by) key.deep_sort_by(, &block) else key end, if value.respond_to?(:deep_sort_by) value.deep_sort_by(, &block) else value end] end Hash[[: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!( = {}, &block) hash = self.map do |key, value| [if key.respond_to?(:deep_sort_by!) key.deep_sort_by!(, &block) else key end, if value.respond_to?(:deep_sort_by!) value.deep_sort_by!(, &block) else value end] end replace(Hash[[:hash] == false ? hash : hash.sort_by!(&block)]) end |