Module: Interfacable

Defined in:
lib/interfacable.rb,
lib/interfacable/version.rb,
lib/interfacable/error_formatter.rb,
lib/interfacable/implementation_check.rb

Overview

Ruby interfaces yeah

Defined Under Namespace

Classes: Error, ErrorFormatter, ImplementationCheck

Constant Summary collapse

VERSION =
'0.1.1'

Instance Method Summary collapse

Instance Method Details

#implements(*interfaces) ⇒ Object

rubocop:enable Lint/InheritException



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

def implements(*interfaces)
  (@interfaces ||= []).push(*interfaces)

  # rubocop:disable Naming/MemoizedInstanceVariableName
  @interfacable_trace ||= TracePoint.trace(:end) do |t|
    # simplecov does not see inside this block
    # :nocov:
    # rubocop:enable Naming/MemoizedInstanceVariableName
    if self == t.self
      unless (errors = ImplementationCheck.new(self).perform(@interfaces)).empty?
        error_message = ErrorFormatter.new(self).format_errors(errors)
        raise(Error, error_message)
      end

      t.disable
    end
    # :nocov:
  end
end