What is the purpose of the included hook in Ruby modules?
The <code>included</code> hook runs automatically when a module is included in a class or another module. It allows you to add extra behavior or setup at the moment of inclusion.
Click to reveal answer
beginner
How do you define an included hook inside a Ruby module?
You define a class method named <code>self.included(base)</code> inside the module. The <code>base</code> parameter is the class or module that includes this module.
Click to reveal answer
intermediate
What can you do inside the included hook method?
Inside <code>included</code>, you can add methods, extend the including class with class methods, or perform setup tasks like adding callbacks or validations.
Click to reveal answer
intermediate
Example: What will happen when this module is included?<br><pre>module Greetings
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def say_hello
"Hello!"
end
end
end
class Person
include Greetings
end
Person.say_hello</pre>
The <code>included</code> hook extends the <code>Person</code> class with the <code>ClassMethods</code> module. So calling <code>Person.say_hello</code> will return <code>"Hello!"</code>.
Click to reveal answer
intermediate
Why is the included hook useful compared to just including a module?
It lets you run extra code exactly when the module is included, like adding class methods or setting up behavior, which you can't do by just including instance methods.
Click to reveal answer
What argument does the included hook method receive?
AThe class or module that includes the module
BThe name of the module being included
CNo arguments are passed
DThe instance of the including class
✗ Incorrect
The included method receives the including class or module as an argument, allowing you to modify it.
Which keyword is used to define the included hook inside a module?
Adef include_hook
Bdef included(base)
Cdef included!
Ddef self.included(base)
✗ Incorrect
The included hook is defined as a class method with self.included(base).
What is a common use of the included hook?
ATo define instance variables
BTo delete methods from the including class
CTo add class methods to the including class
DTo create new modules
✗ Incorrect
The included hook is often used to add class methods by extending the including class.
What happens if you include a module with an included hook in a class?
AThe hook runs only when an instance is created
BThe hook runs immediately during inclusion
CThe hook never runs
DThe hook runs when the class is defined
✗ Incorrect
The included hook runs right when the module is included in the class.
Can the included hook be used to add instance methods to the including class?
ANo, instance methods are added by the module itself
BYes, but only if you call super
CYes, by defining methods inside the hook
DNo, it only adds class variables
✗ Incorrect
Instance methods are added by the module itself; the included hook is mainly for extra setup like adding class methods.
Explain what the included hook does in Ruby modules and give an example of how it can be used.
Think about what happens when you include a module and want to add extra behavior.
You got /3 concepts.
Describe the difference between adding instance methods directly in a module and using the included hook to add class methods.
Consider what kinds of methods belong to instances vs the class itself.
You got /3 concepts.
Practice
(1/5)
1.
What does the included hook do in a Ruby module?
easy
A. It runs only when the module is extended, not included.
B. It runs code automatically when the module is included in a class.
C. It prevents the module from being included in any class.
D. It defines a method that must be called manually.
Solution
Step 1: Understand the purpose of the included hook
The included hook is a special method in Ruby modules that runs automatically when the module is included in a class.
Step 2: Compare options with the definition
Only It runs code automatically when the module is included in a class. correctly describes this automatic behavior. Other options describe manual calls, prevention, or extension, which are incorrect.
Final Answer:
It runs code automatically when the module is included in a class. -> Option B
Quick Check:
Included hook = automatic run on include [OK]
Hint: Remember: included runs automatically on module inclusion [OK]
Common Mistakes:
Thinking included runs on extend instead of include
Believing included requires manual method calls
Confusing included with preventing inclusion
2.
Which of the following is the correct syntax to define an included hook inside a Ruby module?
module Example
# What goes here?
end
easy
A. def self.included(base)
puts "Included in #{base}"
end
B. def included(base)
puts "Included in #{base}"
end
C. def included
puts "Included"
end
D. def self.include(base)
puts "Included in #{base}"
end
Solution
Step 1: Recall how to define class methods in modules
The included hook must be a module method, so it needs to be defined with self.included.
Step 2: Check the method signature
The method receives the including class as a parameter, so it must accept one argument (base).
Final Answer:
def self.included(base)
puts "Included in #{base}"
end -> Option A
Quick Check:
included hook = def self.included(base) [OK]
Hint: Use def self.included(base) for included hook syntax [OK]
Common Mistakes:
Defining included without self (instance method instead of module method)
Missing the base parameter
Using def self.include instead of included
3.
What will be the output of this Ruby code?
module Greetings
def self.included(base)
puts "Greetings included in #{base}"
end
end
class Person
include Greetings
end
medium
A. SyntaxError
B. No output
C. Greetings included in Person
D. Greetings included in Greetings
Solution
Step 1: Identify when included hook runs
The included hook runs automatically when the module is included in a class.
Step 2: Check the output inside the included method
The method prints "Greetings included in #{base}", where base is the class Person.
Final Answer:
Greetings included in Person -> Option C
Quick Check:
included hook prints class name on include [OK]
Hint: included hook prints message with class name on include [OK]
Common Mistakes:
Expecting no output because included is a hook
Confusing base with module name
Thinking included runs on class definition, not include
4.
Find the error in this Ruby code using the included hook:
module Logger
def included(base)
base.extend(ClassMethods)
end
module ClassMethods
def log(msg)
puts "Log: #{msg}"
end
end
end
class App
include Logger
end
App.log("Start")
medium
A. The include statement should be extend.
B. The ClassMethods module should be included, not extended.
C. The log method should be an instance method, not class method.
D. The included method should be defined as self.included, not instance method.
Solution
Step 1: Check how included hook is defined
The included hook must be a module method, defined as self.included, not an instance method.
Step 2: Understand the effect of incorrect definition
Defining included without self means it won't run automatically on include, so base.extend won't happen.
Final Answer:
The included method should be defined as self.included, not instance method. -> Option D
Quick Check:
included hook must be self.included [OK]
Hint: Define included as self.included to run on module include [OK]
Common Mistakes:
Defining included without self
Confusing extend and include in hook
Trying to call class method on instance
5.
You want to add a class method greet to any class that includes your module Friendly. Which is the best way to do this using the included hook?
module Friendly
# Fill in the included hook
end
class Dog
include Friendly
end
puts Dog.greet
hard
A. Define self.included(base) and inside it call base.extend with a module containing greet.
B. Define an instance method greet inside Friendly module.
C. Define a class method greet directly inside Friendly module without included hook.
D. Call include Friendly inside Dog.greet method.
Solution
Step 1: Understand how to add class methods via included hook
To add class methods, define self.included(base) and call base.extend with a module containing those methods.
Step 2: Why other options fail
Instance methods won't be class methods; defining class methods directly in module won't add them to including class; calling include inside method is incorrect.
Final Answer:
Define self.included(base) and inside it call base.extend with a module containing greet. -> Option A
Quick Check:
Use included hook + base.extend for class methods [OK]
Hint: Use included hook with base.extend to add class methods [OK]
Common Mistakes:
Defining greet as instance method instead of class method
Not using included hook to extend class
Trying to call include inside a method
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.