Extend vs. Include Modules are used for mixins, ruby’s way of handling muliple inheritance without the complications. There are two ways to mixin, either include or extend to mix in a module’s functionality into a class.
include makes the module’s methods available to the instance of a class, attached to the instances of the class alone.
module Foo def foo puts 'heyyyyoooo!' end end class Bar include Foo end Bar.new.foo # heyyyyoooo! Bar.foo # NoMethodError: undefined method ‘foo’ for Bar:Class
extend makes these methods available to the class as class methods, implemented with a self << class*
class Baz extend Foo end Baz.foo # heyyyyoooo! Baz.new.foo # NoMethodError: undefined method ‘foo’ for #\<Baz:0x1e708>
More information here at the source link.
Any questions on this, please feel free to ask. We’re here to help…