Ruby idioms : Avoid check class membership
Avoid use class, is_a? and kind_of? to check class membership. Replace these statement with a message to the object that respond to the message. The code below is an anti-pattern.
if mortgage.class==FixRateMortgage mortgage.change_rate_not_allowed else mortgage.rate=rate end
The code below is more idiomatic in Ruby.
class Mortgage attr_accessor :rate end class FixedRateMortgage < Mortgage def initialize() @rate=5 end def rate=(rate) change_rate_not_allowed end def change_rate_not_allowed puts "The rate in a fixed rate mortage can not be change" end end
Sending the method rate= to either kind of classes will result in the appropriate behaviour.
Liked this concept…nice
This isn’t really a ruby issue, but more of a general OO issue. An object should handle tasks regarding itself internally, rather than trusting others to do it properly.