Operator overload on views


#1

In my User auth scheme I have a userlevel. I’ve overloaded the User
class operators like this:

def >(item)
if item.class == “User”
self.userlevel > item.userlevel
else
self.userlevel > item
end
end

(other operators are overloaded in essentially the same way). As I
understand it, using the operator “>” inside the overloaded operator is
OK because User.userlevel.class == Fixnum.

in my “edit.rhtml” view, I have the following code:

<% if @local_user > @user &&
@local_user >= 7000 ||
@local_user == @user %>

<% end %>

this produces an exception:
“comparison of Fixnum with User failed” - are my overloaded operators
not being used, or am I doing something wrong?


#2

Try changing your comparison:

if item.class == “User”

to

if item.class == User

On a side note, I’m not a fan of overloading these operators.

Dan.


#3

Thanks! I should have realized the class method returned a class :wink:

Why don’t you believe in overloading these operators? In an activerecord
class, I find it fairly unuseful to compare memory space pointers.
Overloading the operators to compare the most useful information
(userlevel in this case) seems to make sense.


#4

I usually don’t like this kind of overloading because it’s not obvious
what
the overload means, which makes it less maintainable. I don’t naturally
associate user levels with < and > operators - I’d just as likely
associate
user id comparisons to them. In this case, I’d prefer a named
comparison
function like is_higher_userlevel().

But, it’s all down to the coding style of your organisation. Good
documentation can make this is a non-issue.

Cheers,

Dan.