Module: Wavify::Adapters

Defined in:
lib/wavify/adapters.rb,
sig/wavify.rbs

Overview

Catalog and loader for optional adapter gems that live outside the core gem.

Defined Under Namespace

Classes: AdapterSpec

Constant Summary collapse

KNOWN =
[
  AdapterSpec.new(
    name: :ffmpeg,
    kind: :codec,
    gem_name: "wavify-ffmpeg",
    require_path: "wavify/ffmpeg",
    formats: %w[mp3 aac m4a wav flac ogg],
    summary: "FFmpeg-backed codec adapter for formats that should not be mandatory core dependencies."
  ),
  AdapterSpec.new(
    name: :mp3,
    kind: :codec,
    gem_name: "wavify-mp3",
    require_path: "wavify/mp3",
    formats: %w[mp3],
    summary: "MP3 codec adapter."
  ),
  AdapterSpec.new(
    name: :midi,
    kind: :sequencer,
    gem_name: "wavify-midi",
    require_path: "wavify/midi",
    formats: %w[mid midi],
    summary: "MIDI import/export adapter for sequencer timelines."
  ),
  AdapterSpec.new(
    name: :spectrogram,
    kind: :analysis,
    gem_name: "wavify-spectrogram",
    require_path: "wavify/spectrogram",
    formats: %w[png json],
    summary: "Spectrogram and FFT analysis adapter."
  )
].freeze

Class Method Summary collapse

Class Method Details

.find(name) ⇒ AdapterSpec?

Parameters:

  • name (String, Symbol)

Returns:



51
52
53
54
# File 'lib/wavify/adapters.rb', line 51

def find(name)
  normalized = normalize_name(name)
  KNOWN.find { |adapter| adapter.name == normalized }
end

.knownArray<AdapterSpec>

Returns:



45
46
47
# File 'lib/wavify/adapters.rb', line 45

def known
  KNOWN.dup
end

.load(name) ⇒ true

Requires an optional adapter gem and lets it register itself.

Parameters:

  • name (String, Symbol)

Returns:

  • (true)


60
61
62
63
64
65
66
67
68
69
70
# File 'lib/wavify/adapters.rb', line 60

def load(name)
  adapter = find(name)
  raise InvalidParameterError, "unknown adapter: #{name.inspect}" unless adapter

  require adapter.require_path
  true
rescue LoadError
  raise UnsupportedFormatError,
        "adapter #{adapter.name} is not installed; add gem #{adapter.gem_name.inspect} " \
        "and require #{adapter.require_path.inspect}"
end