Module: Protocol

Included in:
EmbeddingModelProtocol, SimilarityEngineProtocol, VocabularyProtocol
Defined in:
lib/kotoshu/embeddings/protocol.rb

Overview

Protocol - Ruby interface/contract system

Provides a simple way to define interfaces with required and optional methods.

Instance Method Summary collapse

Instance Method Details

#assert_implemented_by!(klass) ⇒ Object

Assert compliance



34
35
36
37
# File 'lib/kotoshu/embeddings/protocol.rb', line 34

def assert_implemented_by!(klass)
  errors = compliance_errors(klass)
  raise "Missing methods: #{errors.join(', ')}" unless errors.empty?
end

#compliance_errors(klass) ⇒ Object

Check compliance



29
30
31
# File 'lib/kotoshu/embeddings/protocol.rb', line 29

def compliance_errors(klass)
  required_methods.select { |m| !klass.respond_to?(m) }
end

#optional_methods(*names) ⇒ Object

Define optional methods



14
15
16
# File 'lib/kotoshu/embeddings/protocol.rb', line 14

def optional_methods
  @optional_methods ||= Set.new
end

#required_methods(*names) ⇒ Object

Define required methods



9
10
11
# File 'lib/kotoshu/embeddings/protocol.rb', line 9

def required_methods
  @required_methods ||= Set.new
end