Sha256: 56001c103320dd2961868c09f24b0b1f5fa62b1cf33e147f3f85e699615ef4ad
Contents?: true
Size: 1017 Bytes
Versions: 1
Compression:
Stored size: 1017 Bytes
Contents
# frozen_string_literal: true module JunkDrawer # error to be thrown by Callable class CallableError < StandardError end # module to constrain interfaces of classes to just `call` module Callable def call raise NotImplementedError end def to_proc proc { |args| self.(*args) } end # `ClassMethods` defines a class level method `call` that delegates to # an instance. It also causes an error to be raised if a public instance # method is defined with a name other than `call` module ClassMethods def call(*args) new.(*args) end def to_proc new.to_proc end def method_added(method_name) return if method_name == :call || !public_method_defined?(method_name) raise CallableError, "invalid method name #{method_name}, " \ 'only public method allowed is "call"' end end def self.included(base) base.public_send(:extend, ClassMethods) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
junk_drawer-1.1.0 | lib/junk_drawer/callable.rb |