Skip to content

Instantly share code, notes, and snippets.

@Aupajo
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Aupajo/5fd21ed73b31690fb3b3 to your computer and use it in GitHub Desktop.
Save Aupajo/5fd21ed73b31690fb3b3 to your computer and use it in GitHub Desktop.
Autochain

Like autotune for your objects.

class Autochain
  attr_reader :subject

  def initialize(subject)
    @subject = subject
  end

  def method_missing(method_name, *args, &block)
    if subject.respond_to?(method_name)
      subject.send(method_name, *args, &block)
      subject
    else
      super
    end
  end

  def respond_if_missing?(method_name, include_private = false)
    subject.respond_to?(method_name, include_private) || super
  end
end
Autochain.new(badger)
  .save
  .recouperate
  .release_into_wild

# Equivalent to

badger.save              # => true
badger.recouperate       # => :recouperating
badger.release_into_wild # => :released
badger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment