Module: ALSA::Aconnect

Defined in:
lib/alsa/aconnect.rb,
lib/alsa/aconnect/port.rb,
lib/alsa/aconnect/error.rb,
lib/alsa/aconnect/client.rb,
lib/alsa/aconnect/config.rb,
lib/alsa/aconnect/parser.rb,
lib/alsa/aconnect/version.rb

Defined Under Namespace

Modules: Parser Classes: Client, Config, Error, Port

Constant Summary collapse

VERSION =
'0.1.5'

Class Method Summary collapse

Class Method Details

.configObject



57
58
59
# File 'lib/alsa/aconnect.rb', line 57

def config
  @config ||= Config.new
end

.configure {|config| ... } ⇒ Object

Yields:



61
62
63
# File 'lib/alsa/aconnect.rb', line 61

def configure
  yield config if block_given?
end

.connect(input, output) ⇒ Object



34
35
36
37
38
39
# File 'lib/alsa/aconnect.rb', line 34

def connect(input, output)
  input = "#{input.client.id}:#{input.id}" if input.is_a?(Port)
  output = "#{output.client.id}:#{output.id}" if output.is_a?(Port)

  run(input, output)
end

.disconnect(input, output) ⇒ Object



41
42
43
44
45
46
# File 'lib/alsa/aconnect.rb', line 41

def disconnect(input, output)
  input = "#{input.client.id}:#{input.id}" if input.is_a?(Port)
  output = "#{output.client.id}:#{output.id}" if output.is_a?(Port)

  run('-d', input, output)
end

.input_clientsObject



16
17
18
19
# File 'lib/alsa/aconnect.rb', line 16

def input_clients
  out = run('-i', '-l')
  Parser.parse_clients(out).map { |text| Client.new(text, :input) }
end

.input_portsObject



21
22
23
# File 'lib/alsa/aconnect.rb', line 21

def input_ports
  input_clients.map(&:ports).flatten
end

.output_clientsObject



25
26
27
28
# File 'lib/alsa/aconnect.rb', line 25

def output_clients
  out = run('-o', '-l')
  Parser.parse_clients(out).map { |text| Client.new(text, :output) }
end

.output_portsObject



30
31
32
# File 'lib/alsa/aconnect.rb', line 30

def output_ports
  output_clients.map(&:ports).flatten
end

.run(*arguments) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/alsa/aconnect.rb', line 48

def run(*arguments)
  cmd = [config.exec_path, *arguments].compact.join(' ')
  out, err, status = Open3.capture3(cmd)
  code = status.exitstatus
  raise Error.new code, err unless code.zero?

  out
end