Module: Webmidi::Transport::Adapter

Defined in:
lib/webmidi/transport/adapter.rb

Constant Summary collapse

REQUIRED_METHODS =
%i[
  available?
  list_inputs
  list_outputs
  open_input
  open_output
].freeze

Class Method Summary collapse

Class Method Details

.constant_name(name) ⇒ Object



32
33
34
35
# File 'lib/webmidi/transport/adapter.rb', line 32

def constant_name(name)
  camel = normalized_name(name).split("_").map(&:capitalize).join
  "Webmidi::Transport::#{camel}"
end

.constantize(path) ⇒ Object



37
38
39
# File 'lib/webmidi/transport/adapter.rb', line 37

def constantize(path)
  path.split("::").reduce(Object) { |namespace, const_name| namespace.const_get(const_name) }
end

.gem_name(name) ⇒ Object



24
25
26
# File 'lib/webmidi/transport/adapter.rb', line 24

def gem_name(name)
  "webmidi-#{normalized_name(name).tr("_", "-")}"
end

.normalized_name(name) ⇒ Object



41
42
43
# File 'lib/webmidi/transport/adapter.rb', line 41

def normalized_name(name)
  name.to_s.tr("-", "_")
end

.require_path(name) ⇒ Object



28
29
30
# File 'lib/webmidi/transport/adapter.rb', line 28

def require_path(name)
  "webmidi/transport/#{normalized_name(name)}"
end

.validate!(transport) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/webmidi/transport/adapter.rb', line 16

def validate!(transport)
  missing = REQUIRED_METHODS.reject { |method| transport.respond_to?(method) }
  return transport if missing.empty?

  raise TransportNotAvailableError,
    "Transport adapter #{transport.inspect} is missing: #{missing.join(", ")}"
end