Module: Tins::Implement

Included in:
Module
Defined in:
lib/tins/implement.rb

Constant Summary collapse

MESSAGES =
{
  default:   'method %{method_name} not implemented in module %{module}',
  subclass:  'method %{method_name} has to be implemented in '\
    'subclasses of %{module}',
  submodule: 'method %{method_name} has to be implemented in '\
    'submodules of %{module}',
}

Instance Method Summary collapse

Instance Method Details

#implement(method_name, msg = :default) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/tins/implement.rb', line 11

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

#implement_in_submodule(method_name) ⇒ Object



33
34
35
36
37
# File 'lib/tins/implement.rb', line 33

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