📖 Scenario: Imagine you are building a simple program to manage different types of vehicles. Some vehicles can fly, and some can float on water. You want to add these abilities to your vehicle classes without repeating code.
🎯 Goal: You will create custom modules as mixins to add flying and floating abilities to vehicle classes. Then, you will use these modules in specific vehicle classes and display their abilities.
📋 What You'll Learn
Create a module called Flyable with a method fly that returns the string "I can fly!"
Create a module called Floatable with a method float that returns the string "I can float!"
Create a class Car without any special abilities
Create a class Boat that includes the Floatable module
Create a class Plane that includes the Flyable module
Create an instance of each class: car, boat, and plane
Print the abilities of boat and plane by calling their respective methods
💡 Why This Matters
🌍 Real World
Modules as mixins help you add shared abilities to different classes without repeating code. This is useful in many programs where objects share behaviors.
💼 Career
Understanding modules and mixins is important for Ruby developers to write clean, reusable, and maintainable code.
Progress0 / 4 steps
1
Create the Flyable module
Create a module called Flyable with a method fly that returns the string "I can fly!".
Ruby
Hint
Use module Flyable to start and define a method fly inside it.
2
Create the Floatable module
Create a module called Floatable with a method float that returns the string "I can float!".
Ruby
Hint
Define another module similar to Flyable but with a method float.
3
Create vehicle classes and include modules
Create a class Car with no modules included. Create a class Boat that includes the Floatable module. Create a class Plane that includes the Flyable module.
Ruby
Hint
Use include inside the classes Boat and Plane to add the modules.
4
Create instances and print abilities
Create instances called car, boat, and plane from their classes. Print the result of calling float on boat and fly on plane.
Ruby
Hint
Create the instances with ClassName.new and use puts to print the abilities.
Practice
(1/5)
1. What is the main purpose of using a custom module as a mixin in Ruby?
easy
A. To share methods across multiple classes without repeating code
B. To create a new class that inherits from multiple classes
C. To define global variables accessible everywhere
D. To replace the need for classes entirely
Solution
Step 1: Understand what a module is
A module groups methods that can be reused in different classes.
Step 2: Recognize the role of mixins
Mixins let classes include these modules to share behavior without inheritance.
Final Answer:
To share methods across multiple classes without repeating code -> Option A
Quick Check:
Modules as mixins = code sharing [OK]
Hint: Modules share methods to avoid repeating code [OK]
Common Mistakes:
Confusing modules with multiple inheritance
Thinking modules define global variables
Believing modules replace classes
2. Which of the following is the correct syntax to include a module named Greetings inside a class Person?
easy
A. module Person; include Greetings; end
B. class Person; extend Greetings; end
C. class Person; use Greetings; end
D. class Person; include Greetings; end
Solution
Step 1: Identify how to add instance methods from a module
Use include inside the class to add module methods as instance methods.
Step 2: Check syntax correctness
Only class Person; include Greetings; end is valid Ruby syntax for this purpose.
Final Answer:
class Person; include Greetings; end -> Option D
Quick Check:
Include module inside class = class Person; include Greetings; end [OK]
Hint: Use include to add module methods as instance methods [OK]
Common Mistakes:
Using extend instead of include for instance methods
Writing module instead of class
Using non-existent keyword 'use'
3. What will be the output of the following Ruby code?
module Talk
def speak
"Hello!"
end
end
class Dog
include Talk
end
puts Dog.new.speak
medium
A. NoMethodError
B. Hello!
C. speak
D. nil
Solution
Step 1: Understand module inclusion
The Talk module defines speak method. Including it in Dog adds speak as an instance method.
Step 2: Call the method on Dog instance
Dog.new.speak calls the method and returns "Hello!" string.
Final Answer:
Hello! -> Option B
Quick Check:
Included method call = "Hello!" [OK]
Hint: Included module methods become instance methods [OK]
Common Mistakes:
Expecting NoMethodError because of missing method
Confusing include with extend
Thinking output is method name or nil
4. Identify the error in the following Ruby code that tries to use a module as a mixin:
module Helper
def help
"Helping"
end
end
class User
extend Helper
end
puts User.new.help
medium
A. Using extend instead of include causes NoMethodError on instance
B. Module Helper is not defined properly
C. User class should be a module
D. help method should be a class method
Solution
Step 1: Understand extend vs include
extend Helper adds methods as class methods, not instance methods.
Step 2: Analyze method call on instance
User.new.help calls help on an instance, but method is only on class, causing NoMethodError.
Final Answer:
Using extend instead of include causes NoMethodError on instance -> Option A
Quick Check:
extend adds class methods, not instance methods [OK]
Hint: Use include for instance methods, extend for class methods [OK]
Common Mistakes:
Confusing extend and include
Calling instance method on class method only
Thinking module definition is wrong
5. Given two modules Walk and Talk with methods walk and speak respectively, how can you create a class Person that uses both modules as mixins and calls both methods on an instance?
Choose the correct code snippet.
hard
A. class Person
extend Walk
extend Talk
end
p = Person.new
puts p.walk
puts p.speak
B. class Person
include Walk Talk
end
p = Person.new
puts p.walk
puts p.speak
C. class Person
include Walk
include Talk
end
p = Person.new
puts p.walk
puts p.speak
D. class Person
use Walk
use Talk
end
p = Person.new
puts p.walk
puts p.speak
Solution
Step 1: Understand including multiple modules
You can include multiple modules by calling include multiple times inside the class.
Step 2: Verify method calls on instance
Including modules adds their methods as instance methods, so p.walk and p.speak work.
Final Answer:
class Person
include Walk
include Talk
end
p = Person.new
puts p.walk
puts p.speak -> Option C
Quick Check:
Include modules separately for instance methods [OK]
Hint: Include each module separately for instance methods [OK]
Common Mistakes:
Using extend instead of include for instance methods
Trying to include multiple modules in one line
Using non-existent keyword 'use'
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.