metaprogramming/advanced/method/delegation_no_parens.rb

tests/_examples/metaprogramming/advanced/method/delegation_no_parens.rb in the metorex repository.

# Method Delegation without parentheses (where possible)

class Logger
  def log(message)
    puts "[LOG] #{message}"
  end
end

class Service
  def initialize
    @logger = Logger.new
  end

  def process(data)
    @logger.log("Processing: #{data}")
    "processed: #{data}"
  end
end

puts "=== Simple Delegation ==="
service = Service.new
puts service.process("input data")

class Delegator
  def initialize(target)
    @target = target
  end

  def delegate(method_name)
    @target
  end
end

puts ""
puts "=== Dynamic Delegation ==="
logger = Logger.new
d = Delegator.new(logger)
target = d.delegate("log")
target.log("delegated message")

class LoggingProxy
  def initialize(target)
    @target = target
  end

  def call(method_name, arg)
    puts "Before: #{method_name}"
    result = @target.process(arg)
    puts "After: #{method_name} -> #{result}"
    result
  end
end

puts ""
puts "=== Forwarding with Hooks ==="
proxy = LoggingProxy.new(Service.new)
proxy.call("process", "test data")

Output:

=== Simple Delegation ===
[LOG] Processing: input data
processed: input data

=== Dynamic Delegation ===
[LOG] delegated message

=== Forwarding with Hooks ===
Before: process
[LOG] Processing: test data
After: process -> processed: test data