Skip to content

Instantly share code, notes, and snippets.

@bnadlerjr
Last active December 29, 2020 04:54
Show Gist options
  • Select an option

  • Save bnadlerjr/3269337 to your computer and use it in GitHub Desktop.

Select an option

Save bnadlerjr/3269337 to your computer and use it in GitHub Desktop.
Multiple callbacks as blocks
class CallbackList
NOOP_BLOCK = ->(*) { :ok }
def self.[](block)
block ||= NOOP_BLOCK
new.tap { |proxy| block.call(proxy) }
end
def respond_with(callback, *args)
callbacks.fetch(callback, NOOP_BLOCK).call(*args)
end
def method_missing(method, *args, &block)
block ? register_callback(method, block) : super
self
end
private
def callbacks
@callbacks ||= {}
end
def register_callback(method, block)
callbacks[method] = block
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment