Ruby mixin: extend or include?

I have following code:

module CarHelper
  def call_helpline
    puts "Calling helpline..."
  end
end

class Car
  extend CarHelper
end

class Truck
  class << self
    include CarHelper
  end
end

# Test code
Car.call_helpline
Truck.call_helpline

In fact both 2 lines of test codes works. So is there any difference
between the way I use 'extend' and 'include' (inside a singleton class
of self)?

···

--
Posted via http://www.ruby-forum.com/.

The only difference that I know of is how the hooks get called:

module M
  def self.extended(obj)
    p "M is extended by #{obj.inspect} from line #{caller.first[/\d+/]}"
  end

  def self.included(klass)
    p "M is included in #{klass.inspect} from line #{caller.first[/\d+/]}"
  end
end

class C
  extend M
  class << self
    include M
  end
end

# >> "M is extended by C from line 12"
# >> "M is included in #<Class:C> from line 14"

As an aside, this is yet another argument against extending the object in
the included hook.

···

On Thu, Sep 29, 2011 at 9:48 PM, Jones Lee <joneslee85@gmail.com> wrote:

I have following code:

module CarHelper
def call_helpline
   puts "Calling helpline..."
end
end

class Car
extend CarHelper
end

class Truck
class << self
   include CarHelper
end
end

# Test code
Car.call_helpline
Truck.call_helpline

In fact both 2 lines of test codes works. So is there any difference
between the way I use 'extend' and 'include' (inside a singleton class
of self)?

--
Posted via http://www.ruby-forum.com/\.