class Fusuma::Device

detect input device

Attributes

available[R]
capabilities[R]
id[R]
name[R]

Public Class Methods

all() click to toggle source

Return devices sort devices by capabilities of gesture @return [Array]

# File lib/fusuma/device.rb, line 38
def all
  @all ||= fetch_devices.partition do |d|
    d.capabilities.match?(/gesture/)
  end.flatten
end
available() click to toggle source

@raise [SystemExit] @return [Array]

# File lib/fusuma/device.rb, line 46
def available
  @available ||= all.select(&:available).tap do |d|
    MultiLogger.debug(available_devices: d)
    raise 'Touchpad is not found' if d.empty?
  end
rescue RuntimeError => e
  # FIXME: should not exit without Runner class
  MultiLogger.error(e.message)
  exit 1
end
new(id: nil, name: nil, capabilities: nil, available: nil) click to toggle source
# File lib/fusuma/device.rb, line 11
def initialize(id: nil, name: nil, capabilities: nil, available: nil)
  @id = id
  @name = name
  @capabilities = capabilities
  @available = available
end
reset() click to toggle source
# File lib/fusuma/device.rb, line 57
def reset
  @all = nil
  @available = nil
end

Private Class Methods

fetch_devices() click to toggle source

@return [Array]

# File lib/fusuma/device.rb, line 65
def fetch_devices
  line_parser = LineParser.new

  libinput_command = Plugin::Inputs::LibinputCommandInput.new.command
  libinput_command.list_devices do |line|
    line_parser.push(line)
  end
  line_parser.generate_devices
end

Public Instance Methods

assign_attributes(attributes) click to toggle source

@param attributes [Hash]

# File lib/fusuma/device.rb, line 19
def assign_attributes(attributes)
  attributes.each do |k, v|
    case k
    when :id
      @id = v
    when :name
      @name = v
    when :capabilities
      @capabilities = v
    when :available
      @available = v
    end
  end
end