Class: Ace::Support::Items::Molecules::ItemSorter
- Inherits:
-
Object
- Object
- Ace::Support::Items::Molecules::ItemSorter
- Defined in:
- lib/ace/support/items/molecules/item_sorter.rb
Overview
Sorts collections of items by a field with configurable direction. Nil values sort last regardless of direction.
Class Method Summary collapse
-
.sort(items, field:, direction: :asc, value_accessor: nil) ⇒ Array
Sort items by a field.
Class Method Details
.sort(items, field:, direction: :asc, value_accessor: nil) ⇒ Array
Sort items by a field
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/ace/support/items/molecules/item_sorter.rb', line 16 def self.sort(items, field:, direction: :asc, value_accessor: nil) return [] if items.nil? || items.empty? accessor = value_accessor || method(:default_value_accessor) multiplier = (direction == :desc) ? -1 : 1 items.sort do |a, b| val_a = accessor.call(a, field.to_s) val_b = accessor.call(b, field.to_s) # Nil values sort last regardless of direction if val_a.nil? && val_b.nil? 0 elsif val_a.nil? 1 elsif val_b.nil? -1 else (val_a <=> val_b || 0) * multiplier end end end |