Module: MultidispatchDSL::DSL

Defined in:
lib/multidispatch_dsl/dsl.rb

Instance Method Summary collapse

Instance Method Details

#mdef(method_name, *declaration, &block) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/multidispatch_dsl/dsl.rb', line 5

def mdef(method_name, *declaration, &block)
  real_method_name = ::MultidispatchDSL::Generator.method_name_from_declaration(method_name, declaration)
  define_method(real_method_name, &block)

  unless method_defined?(method_name)
    class_eval "      def \#{ method_name }(*args, &block)\n        real_method_name = ::MultidispatchDSL::Generator.method_name_from_args(__callee__, args)\n        if respond_to?(real_method_name)\n          send(real_method_name, *args, &block)\n        else\n          fallback_method_name = \"\#{ method_name }_anything\"\n          if respond_to?(fallback_method_name)\n            send(fallback_method_name, *args, &block)\n          else\n            raise ::MultidispatchDSL::MissingDeclarationError.new(__callee__, args)\n          end\n        end\n      end\n    RUBY\n  end\nend\n", __FILE__, __LINE__ + 1