Is this model ordering logical or crazy?

Bit of a mind-bender here…

I’m got a model that tracks rules that are applied to different
levels of product data, including:
Make, Product Range, Model, Derivative. There’s a RuleLevel class to
represent each level and has a column position. It looks something
like this:
class RuleLevel < ActiveRecord::Base
include Comparable

def +(offset)
RuleLevel.level_for_position(position + offset)

def -(offset)
RuleLevel.level_for_position(position - offset)

def <=>(other)
return -(position <=> other.position)

def self.level_for_position(position)
StockRuleLevel.find(:first, :conditions => “position = #

Imagine I also have constants MAKE, RANGE, MODEL, DERIVATIVE in the
class to get at the levels with positions 1, 2, 3, 4 respectively.

Now it makes sense that a more general rule is “greater” than a more
specfic rule, or in Ruby:
RuleLevel.RANGE > RuleLevel.DERIVATIVE => true (1)

And it also makes sense that the “next” rule level is the next most
specific one (because they are always processed from the top down), ie:
RuleLevel.MAKE + 1 => RuleLevel.RANGE (2)

But this leads to the following bizarre inequality:
RuleLevel.MAKE > RuleLevel.MAKE + 1 => true (3)

Does this make sense? It seems strange that an object should be less
than something increased by it, but if you change either (1) or (2)
the logic in the application sounds back to front. Maybe someone
with better understanding of algebra can make sense of this (or
perhaps just someone who has slept more than 6 hours a night this

Gold star to anyone who can convince me one way or another :wink:


This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs