Bird
Raised Fist0
Rubyprogramming~20 mins

Extend for class methods in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Extend Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of extending a module for class methods
What is the output of this Ruby code when the class method greet is called?
Ruby
module Friendly
  def greet
    "Hello from module"
  end
end

class Person
  extend Friendly
end

puts Person.greet
A"Hello from module"
BSyntaxError: unexpected keyword_end
CNoMethodError: undefined method `greet' for Person:Class
D"Hello from instance"
Attempts:
2 left
💡 Hint
Remember that extend adds module methods as class methods.
❓ Predict Output
intermediate
2:00remaining
Effect of including vs extending a module
What will be the output of this Ruby code?
Ruby
module Talk
  def speak
    "Speaking"
  end
end

class Animal
  include Talk
end

class Robot
  extend Talk
end

puts Animal.new.speak
puts Robot.speak
A
NoMethodError: undefined method `speak' for Animal:Class
Speaking
BNoMethodError for both calls
C
Speaking
Speaking
D
Speaking
NoMethodError: undefined method `speak' for Robot:Class
Attempts:
2 left
💡 Hint
Including adds instance methods; extending adds class methods.
🔧 Debug
advanced
2:00remaining
Why does this class method call fail?
Given this Ruby code, why does calling Car.honk raise an error?
Ruby
module Sounds
  def honk
    "Beep beep!"
  end
end

class Car
  include Sounds
end

puts Car.honk
ABecause the module method <code>honk</code> is private and cannot be called.
BBecause <code>include</code> adds instance methods, not class methods, so <code>Car.honk</code> is undefined.
CBecause <code>Car</code> forgot to inherit from <code>Sounds</code>.
DBecause <code>honk</code> is defined with wrong syntax inside the module.
Attempts:
2 left
💡 Hint
Think about the difference between include and extend.
📝 Syntax
advanced
2:00remaining
Identify the syntax error in extending a module
Which option contains a syntax error when trying to add class methods using a module?
Ruby
module Greetings
  def hello
    "Hi!"
  end
end

class User
  extend Greetings
end
A
class User
  extend Greetings.new
end
B
class User
  extend(Greetings)
end
C
class User
  extend Greetings()
end
D
class User
  extend Greetings
end
Attempts:
2 left
💡 Hint
Remember how to use extend with modules.
🚀 Application
expert
3:00remaining
How to add both instance and class methods from a module
You want to add instance methods and class methods from a single module Features to a class Gadget. Which code correctly achieves this?
Ruby
module Features
  def instance_feature
    "Instance method"
  end

  module ClassMethods
    def class_feature
      "Class method"
    end
  end
end

class Gadget
  # What goes here?
end

puts Gadget.new.instance_feature
puts Gadget.class_feature
A
class Gadget
  extend Features
  extend Features::ClassMethods
end
B
class Gadget
  extend Features
  include Features::ClassMethods
end
C
class Gadget
  include Features
  include Features::ClassMethods
end
D
class Gadget
  include Features
  extend Features::ClassMethods
end
Attempts:
2 left
💡 Hint
Use include for instance methods and extend for class methods.

Practice

(1/5)
1. What does the extend keyword do in Ruby when used inside a class?
easy
A. Includes the module's constants only
B. Adds the module's methods as instance methods to the class
C. Adds the module's methods as class methods to the class
D. Removes methods from the class

Solution

  1. Step 1: Understand extend usage

    The extend keyword adds methods from a module as class methods to the class that calls it.
  2. Step 2: Differentiate from include

    Unlike include, which adds methods as instance methods, extend adds them as class methods.
  3. Final Answer:

    Adds the module's methods as class methods to the class -> Option C
  4. Quick Check:

    extend = class methods [OK]
Hint: Remember: extend = class methods, include = instance methods [OK]
Common Mistakes:
  • Confusing extend with include
  • Thinking extend adds instance methods
  • Assuming extend removes methods
2. Which of the following is the correct syntax to add module methods as class methods using extend?
easy
A. class MyClass; def self.extend MyModule; end
B. class MyClass; include MyModule; end
C. class MyClass; MyModule.extend(self); end
D. class MyClass; extend MyModule; end

Solution

  1. Step 1: Identify correct extend usage

    The correct syntax is to call extend inside the class body with the module name.
  2. Step 2: Check each option

    class MyClass; extend MyModule; end uses extend MyModule inside the class, which is correct syntax.
  3. Final Answer:

    class MyClass; extend MyModule; end -> Option D
  4. Quick Check:

    Correct extend syntax = class MyClass; extend MyModule; end [OK]
Hint: Use 'extend ModuleName' inside class body for class methods [OK]
Common Mistakes:
  • Using include instead of extend
  • Calling extend on module instead of class
  • Incorrect method definition syntax
3. What will be the output of the following Ruby code?
module Greetings
  def hello
    "Hello from module"
  end
end

class Person
  extend Greetings
end

puts Person.hello
medium
A. NoMethodError: undefined method 'hello' for Person
B. Hello from module
C. Hello from module called on instance
D. SyntaxError

Solution

  1. Step 1: Understand extend Greetings effect

    The module's method hello becomes a class method of Person.
  2. Step 2: Check method call

    Person.hello calls the class method, which exists and returns "Hello from module".
  3. Final Answer:

    Hello from module -> Option B
  4. Quick Check:

    Class method from extend = "Hello from module" [OK]
Hint: extend adds module methods as class methods, so Person.hello works [OK]
Common Mistakes:
  • Thinking hello is an instance method
  • Calling hello on an instance instead of class
  • Expecting NoMethodError
4. Identify the error in this Ruby code snippet:
module Tools
  def tool_name
    "Hammer"
  end
end

class Worker
  extend Tools

  def self.tool_name
    "Wrench"
  end
end

puts Worker.tool_name
medium
A. No error; output is 'Wrench'
B. NoMethodError because tool_name is undefined
C. SyntaxError due to extend usage
D. Output is 'Hammer' ignoring class method

Solution

  1. Step 1: Analyze method definitions

    The module Tools defines tool_name, which is added as a class method to Worker by extend Tools.
  2. Step 2: Check method override

    Worker defines its own class method tool_name, which overrides the module method.
  3. Final Answer:

    No error; output is 'Wrench' -> Option A
  4. Quick Check:

    Class method override works; output = 'Wrench' [OK]
Hint: Class methods override extended module methods if defined later [OK]
Common Mistakes:
  • Assuming module method overrides class method
  • Expecting NoMethodError
  • Confusing instance and class methods
5. You want to share a method info as a class method across multiple classes without repeating code. Which approach using extend is best?
module InfoModule
  def info
    "Shared class info"
  end
end

class Alpha
  # What to do here?
end

class Beta
  # What to do here?
end
hard
A. Add extend InfoModule inside both Alpha and Beta classes
B. Add include InfoModule inside both Alpha and Beta classes
C. Define def self.info separately in Alpha and Beta
D. Use InfoModule.extend(self) outside classes

Solution

  1. Step 1: Understand sharing class methods

    Using extend InfoModule inside each class adds info as a class method.
  2. Step 2: Evaluate options

    Add extend InfoModule inside both Alpha and Beta classes correctly uses extend in both classes to share the method without repetition.
  3. Final Answer:

    Add extend InfoModule inside both Alpha and Beta classes -> Option A
  4. Quick Check:

    Use extend in each class to share class methods [OK]
Hint: Use extend inside each class to share class methods from a module [OK]
Common Mistakes:
  • Using include instead of extend for class methods
  • Defining methods separately instead of sharing
  • Calling extend on module instead of class
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard