Bird
Raised Fist0
Rubyprogramming~5 mins

Extend for class methods in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the extend keyword do in Ruby?
It adds the methods from a module as class methods to the class or object it is called on.
Click to reveal answer
beginner
How is extend different from include in Ruby?
<code>include</code> adds module methods as instance methods, while <code>extend</code> adds them as class methods.
Click to reveal answer
beginner
Given <pre>module Greetings
  def hello
    "Hello!"
  end
end

class Person
  extend Greetings
end</pre> How do you call <code>hello</code>?
You call it on the class: Person.hello returns "Hello!".
Click to reveal answer
intermediate
Can extend be used on individual objects in Ruby?
Yes, it adds the module's methods as singleton methods to that object only.
Click to reveal answer
intermediate
Why use <code>extend</code> instead of defining class methods directly?
It promotes code reuse by sharing methods across classes without inheritance.
Click to reveal answer
What does extend add to a Ruby class?
ANothing, it just runs the module code
BInstance methods from a module
CConstants from a module
DClass methods from a module
Which keyword adds module methods as instance methods in Ruby?
Arequire
Bextend
Cinclude
Dimport
If a module has method foo, how do you call it after extend ModuleName in a class?
AClassName.foo
BClassName.new.foo
CModuleName.foo
DYou cannot call it
Can extend be used on a single object instance?
AYes, but adds methods to all instances
BYes, adds methods only to that object
CNo, only on classes
DNo, it raises an error
What is a main benefit of using extend for class methods?
AAvoids code duplication by sharing methods
BMakes code run faster
CChanges instance variables
DAutomatically creates instances
Explain how extend works to add class methods in Ruby.
Think about where the methods become available after using extend.
You got /3 concepts.
    Describe a scenario where using extend is better than inheritance.
    Consider when you want to share behavior but classes don’t share a parent.
    You got /3 concepts.

      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