Module: JSONAPI::Support::Sort::Compare
- Defined in:
- lib/json_api/support/sort/compare.rb
Overview
Compares two values for stable sort ordering. Ruby 3.4+ TrueClass#<=> returns nil when operands differ (true <=> false), so booleans are normalized before <=>.
Class Method Summary collapse
- .comparable(value) ⇒ Object
- .compare(value_a, value_b) ⇒ Object
- .raise_incomparable(value_a, value_b) ⇒ Object
Class Method Details
.comparable(value) ⇒ Object
20 21 22 23 24 |
# File 'lib/json_api/support/sort/compare.rb', line 20 def comparable(value) return value ? 1 : 0 if value in TrueClass | FalseClass value end |
.compare(value_a, value_b) ⇒ Object
11 12 13 14 15 16 17 18 |
# File 'lib/json_api/support/sort/compare.rb', line 11 def compare(value_a, value_b) return 0 if value_a.nil? && value_b.nil? return -1 if value_a.nil? return 1 if value_b.nil? comparable(value_a) <=> comparable(value_b) || raise_incomparable(value_a, value_b) end |
.raise_incomparable(value_a, value_b) ⇒ Object
26 27 28 29 |
# File 'lib/json_api/support/sort/compare.rb', line 26 def raise_incomparable(value_a, value_b) detail = "#{value_a.class.name} (#{value_a.inspect}), #{value_b.class.name} (#{value_b.inspect})" raise ArgumentError, "incomparable sort values: #{detail}" end |