Object#is_a? refers to a kind of class whereas Object#instance_of identifies the running Object's direct class.

class Behaviour
def initialize
puts 'Behaviour::initialize called'
end
end

class Fizz < Behaviour
def initialize
puts 'Fizz::initialize called'
end
end

b = Behaviour.new
#=> Behaviour::initialize called
b.is_a? Behaviour
#=> true

f = Fizz.new
#=> Fizz::initialize called
f.is_a? Behaviour
#=> true
f.instance_of? Fizz
#=> true
f.instance_of? Behaviour
#=> false

Resources:
- Class: Object [ruby-doc.org]

Read more: http://feeds.dzone.com/~r/dzone/snippets/~3/URWsmnETPL0/11301