Sort nil values last in Relation#order instead of raising - #214
Open
pcbeingused333 wants to merge 1 commit into
Open
pcbeingused333 wants to merge 1 commit into
pcbeingused333 wants to merge 1 commit into
Conversation
`order` did `sort_by { it.public_send(attribute) }`, so a single resource
whose ordering attribute is `nil` — a common case for optional frontmatter
like a date or a position — raised `ArgumentError: comparison of NilClass
with ... failed` and took the whole query down.
`nil` values are now partitioned out of the sort and appended last, in
their original relative order, for both directions.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GtYgwYNfJ3wHrw9xrooVoB
Author
|
CI is on |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The bug
Relation#orderissort_by { it.public_send(attribute) }, so one resource with anilvalue for the ordering attribute — an optional frontmatter field like a date, aposition, or a category — brings the whole query down.#in_order_ofalready guards this (|| Float::INFINITYin thefilter: falsebranch);#orderdidn't.The fix
Partition
nilvalues out of the comparison and append them last, in their original relative order, for both:ascand:desc.Tests
test/perron/relation_test.rb— aRelationwith twonilpositions among the values, asserting order for asc and desc. Fails onmain(ArgumentError).bundle exec rakeis green (402 runs, 0 failures;standardrbclean).🤖 Generated with Claude Code