module Tins::Implement

def implement(method_name, msg = :default)

def implement(method_name, msg = :default)
  method_name.nil? and return
  case msg
  when ::Symbol
    msg = MESSAGES.fetch(msg)
  when ::Hash
    return implement method_name, msg.fetch(:in)
  end
  display_method_name = method_name
  if m = instance_method(method_name) rescue nil
    m.extend Tins::MethodDescription
    display_method_name = m.description(style: :name)
  end
  begin
    msg = msg % { method_name: display_method_name, module: self }
  rescue KeyError
  end
  define_method(method_name) do |*|
    raise ::NotImplementedError, msg
  end
end

def implement_in_submodule(method_name)

def implement_in_submodule(method_name)
  implement method_name,
    'method %{method_name} has to be implemented in submodules of'\
    ' %{module}'
end