<p dir="ltr"><br>
On 15 Jul 2015 15:03, "Duncan Stuart" <<a href="mailto:dgmstuart@gmail.com">dgmstuart@gmail.com</a>> wrote:<br>
><br>
> Hi LRUG - hopefully an interesting little problem:<br>
><br>
> I have an Event class which has an "expected_date" attribute.<br>
> Some events don't have an expected date, so like a good little OO programmer i've created a Null object:<br>
><br>
> class NoExpectedDate<br>
>   def to_s(format=:default)<br>
>     "Unknown"<br>
>   end<br>
> end<br>
><br>
> This works great for printing the values, but when it comes to sorting the list I of course get:<br>
>    ArgumentError: comparison of Date with NoExpectedDate failed <br>
><br>
> If I include Comparable and define <=> then one comparison works, but the other doesn't :<br>
><br>
> class NoExpectedDate<br>
>   include Comparable<br>
>   def to_s(format=:default)<br>
>     "Unknown"<br>
>   end<br>
>   def <=>(other_date)<br>
>     1 # Treat it as after every other date<br>
>   end<br>
> end<br>
><br>
> $ NoExpectedDate.new > Date.today<br>
> => true<br>
><br>
> $ Date.today > NoExpectedDate.new<br>
> ArgumentError: comparison of Date with NoExpectedDate failed<br>
><br>
></p>
<p dir="ltr">Instead of including `Comparable`, set your `NoExpectedDate` class to inherit from `Date` (keep the overloads of `.to_s` and `.<=>`)<br>
</p>