Bird
Raised Fist0
Rubyprogramming~5 mins

Method chaining patterns in Ruby

Choose your learning style10 modes available
Introduction

Method chaining lets you call many methods one after another in a single line. It makes code shorter and easier to read.

When you want to perform multiple actions on the same object step-by-step.
When you want to write clean and readable code without repeating the object name.
When you want to build or transform data in a smooth flow.
When you want to configure settings or options in a sequence.
When you want to avoid temporary variables for intermediate results.
Syntax
Ruby
class Example
  def initialize(value)
    @value = value
  end

  def add(number)
    @value += number
    self
  end

  def multiply(number)
    @value *= number
    self
  end

  def result
    @value
  end
end

obj = Example.new(5)
obj.add(3).multiply(2).result  # => 16

Each method returns self to allow chaining.

The last method can return a value instead of self to get the final result.

Examples
Chaining upcase and reverse changes the string step-by-step.
Ruby
class ChainExample
  def initialize(text)
    @text = text
  end

  def upcase
    @text = @text.upcase
    self
  end

  def reverse
    @text = @text.reverse
    self
  end

  def show
    @text
  end
end

obj = ChainExample.new("hello")
puts obj.upcase.reverse.show
Handles empty initial state and adds text step-by-step.
Ruby
class ChainExample
  def initialize(text)
    @text = text
  end

  def clear
    @text = ""
    self
  end

  def add_text(new_text)
    @text += new_text
    self
  end

  def show
    @text
  end
end

obj = ChainExample.new("")
puts obj.add_text("Hi").add_text("!").show
Clears text first, then tries to upcase empty string.
Ruby
class ChainExample
  def initialize(text)
    @text = text
  end

  def upcase
    @text = @text.upcase
    self
  end

  def clear
    @text = ""
    self
  end

  def show
    @text
  end
end

obj = ChainExample.new("hello")
puts obj.clear.upcase.show
Sample Program

This program creates a calculator object starting at 10. It then adds 5, subtracts 3, multiplies by 4, and divides by 2 using method chaining. Finally, it prints the result.

Ruby
class Calculator
  def initialize(value)
    @value = value
  end

  def add(number)
    @value += number
    self
  end

  def subtract(number)
    @value -= number
    self
  end

  def multiply(number)
    @value *= number
    self
  end

  def divide(number)
    if number == 0
      puts "Cannot divide by zero"
      self
    else
      @value /= number.to_f
      self
    end
  end

  def result
    @value
  end
end

calculator = Calculator.new(10)
puts "Initial value: #{calculator.result}"

calculator.add(5).subtract(3).multiply(4).divide(2)
puts "After chaining operations: #{calculator.result}"
OutputSuccess
Important Notes

Time complexity depends on each method's work; chaining itself adds no extra cost.

Space complexity is usually constant since methods modify the same object.

Common mistake: forgetting to return self in methods breaks the chain.

Use method chaining when you want smooth, readable sequences of operations on the same object.

Summary

Method chaining calls multiple methods on the same object in one line.

Each method (except the last) returns self to continue the chain.

It makes code shorter and easier to read by avoiding repeated object names.

Practice

(1/5)
1. What is the main purpose of method chaining in Ruby?
easy
A. To call multiple methods on the same object in one line
B. To create new objects automatically
C. To run methods in parallel threads
D. To convert objects into strings

Solution

  1. Step 1: Understand method chaining concept

    Method chaining allows calling several methods one after another on the same object without repeating the object name.
  2. Step 2: Identify the main purpose

    The main goal is to write shorter, cleaner code by linking method calls in one line.
  3. Final Answer:

    To call multiple methods on the same object in one line -> Option A
  4. Quick Check:

    Method chaining = calling multiple methods on one object [OK]
Hint: Method chaining links calls on one object in one line [OK]
Common Mistakes:
  • Thinking it creates new objects automatically
  • Confusing with threading or parallel execution
  • Believing it converts objects to strings
2. Which of the following is the correct syntax for method chaining in Ruby?
easy
A. object|method1|method2|method3
B. object.method1.method2.method3
C. object::method1::method2::method3
D. object->method1->method2->method3

Solution

  1. Step 1: Recall Ruby method call syntax

    In Ruby, methods are called on objects using dot notation: object.method.
  2. Step 2: Identify chaining syntax

    Method chaining uses multiple dots to call methods one after another on the same object.
  3. Final Answer:

    object.method1.method2.method3 -> Option B
  4. Quick Check:

    Ruby chaining uses dots between methods [OK]
Hint: Use dots (.) to chain methods in Ruby [OK]
Common Mistakes:
  • Using arrows (->) which is not Ruby syntax
  • Using double colons (::) which are for constants or modules
  • Using pipes (|) which are not method call operators
3. What will be the output of the following Ruby code?
class Box
  def initialize(value)
    @value = value
  end

  def add(x)
    @value += x
    self
  end

  def multiply(x)
    @value *= x
    self
  end

  def value
    @value
  end
end

box = Box.new(2)
result = box.add(3).multiply(4).value
puts result
medium
A. 20
B. 14
C. 10
D. 8

Solution

  1. Step 1: Trace the add method

    Start with @value = 2. add(3) adds 3: 2 + 3 = 5, returns self.
  2. Step 2: Trace the multiply method

    multiply(4) multiplies @value by 4: 5 * 4 = 20, returns self.
  3. Step 3: Call value method

    value returns @value which is 20.
  4. Final Answer:

    20 -> Option A
  5. Quick Check:

    2 + 3 = 5; 5 * 4 = 20 [OK]
Hint: Follow each method step-by-step, remember self returns object [OK]
Common Mistakes:
  • Forgetting that add and multiply return self
  • Calculating operations in wrong order
  • Returning intermediate values instead of final
4. Identify the error in the following Ruby code that tries to chain methods:
class Person
  def initialize(name)
    @name = name
  end

  def greet
    puts "Hello, #{@name}!"
  end

  def farewell
    puts "Goodbye, #{@name}!"
  end
end

p = Person.new("Sam")
p.greet.farewell
medium
A. initialize method missing return statement
B. farewell method is misspelled
C. Cannot create Person object with new
D. greet method does not return self, so chaining fails

Solution

  1. Step 1: Check method return values

    greet prints a message but returns nil (default for puts).
  2. Step 2: Understand chaining requirement

    For chaining, greet must return self to allow calling farewell next.
  3. Final Answer:

    greet method does not return self, so chaining fails -> Option D
  4. Quick Check:

    Method chaining needs methods to return self [OK]
Hint: Ensure methods return self to chain calls [OK]
Common Mistakes:
  • Assuming puts returns self
  • Thinking initialize needs explicit return
  • Believing object creation is the problem
5. You want to create a Ruby class TextFormatter that allows chaining methods to transform a string. The methods are:
- upcase: converts text to uppercase
- reverse: reverses the text
- append(str): adds str to the end

Which implementation correctly supports chaining all these methods and returns the final string with result?
hard
A. Each method prints the modified string and returns nil
B. Each method returns the modified string directly without returning self
C. Each method modifies @text, returns self; add a result method returning @text
D. Each method returns a new TextFormatter object with modified text

Solution

  1. Step 1: Understand chaining requirements

    To chain methods, each must return self (the object) so next method can be called.
  2. Step 2: Provide final output method

    Since methods return self, a separate method (like result) should return the final string.
  3. Final Answer:

    Each method modifies @text, returns self; add a result method returning @text -> Option C
  4. Quick Check:

    Return self to chain, separate method to get final string [OK]
Hint: Return self in methods, separate method returns final value [OK]
Common Mistakes:
  • Returning strings breaks chaining
  • Printing inside methods returns nil
  • Returning new objects breaks original chain
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