metaprogramming/method_added_chain_no_parens.rb

tests/_examples/metaprogramming/method_added_chain_no_parens.rb in the metorex repository.

module Tracking
  def method_added name
    super name
    (@seen ||= []) << name
  end

  def singleton_method_added name
    super name
    (@singletons ||= []) << name
  end
end

module Counting
  def method_added name
    super
    @count = (@count || 0) + 1
  end
end

class Rates
  extend Tracking
  extend Counting

  class << self
    def method_added name
      super
      @last = name
    end

    attr_reader :seen, :count, :last, :singletons
  end

  attr_writer :region
  attr_accessor :currency
  def load_rates = 1
  def store_rates = 2
  def self.refresh = 3
end

p [Rates.seen, Rates.count, Rates.last]
p Rates.singletons

Output:

[[:region=, :currency, :currency=, :load_rates, :store_rates], 5, :store_rates]
[:method_added, :seen, :count, :last, :singletons, :refresh]