I’m struggling with the following issue:
$ rails c
Loading development environment (Rails 3.2.1)
irb(main):001:0> 2.class
=> Fixnum
irb(main):002:0> Fixnum === 2
=> true
irb(main):003:0> 2.hours.class
=> Fixnum
irb(main):004:0> Fixnum === 2.hours
=> false
irb(main):005:0>
I’d like to test whether some specified parameter is a symbol or a time span. The way I thought would be the natural way in Ruby/Rails is:
case param
when :today then
# do this...
when Fixnum then
# do that...
else
raise ArgumentError ...
end
As far as I can tell from ActiveSupport’s source code === is not overridden for Fixnum. So, what am I doing wrong?
You can see from the console, that
2.hourscan’t beFixnum, because it’s#inspectmethod is overridden. It just pretends to be Fixnum, but it isActiveSupport::Duration(see the source)Better check if it responds to some methods. If it responds to
to_i, it is not a symbol.