Class: Fusuma::Device::LineParser

Inherits:
Object
  • Object
show all
Defined in:
lib/fusuma/device.rb

Overview

parse line and generate devices

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeLineParser

: () -> void



92
93
94
# File 'lib/fusuma/device.rb', line 92

def initialize
  @lines = []
end

Instance Attribute Details

#linesObject (readonly)

Returns the value of attribute lines.



89
90
91
# File 'lib/fusuma/device.rb', line 89

def lines
  @lines
end

Instance Method Details

#available_from(line) ⇒ Object

: (String) -> bool?



158
159
160
161
162
163
164
165
166
# File 'lib/fusuma/device.rb', line 158

def available_from(line)
  # NOTE: is natural scroll available?
  if /^Nat.scrolling: /.match?(line)
    return false if %r{n/a}.match?(line)

    return true # disabled / enabled
  end
  nil
end

#capabilities_from(line) ⇒ Object

: (String) -> String?



151
152
153
154
155
# File 'lib/fusuma/device.rb', line 151

def capabilities_from(line)
  line.match("^Capabilities:[[:space:]]*") do |m|
    m.post_match.strip
  end
end

#extract_attribute(line:) ⇒ Hash

: (line: String) -> Hash[untyped, untyped]

Parameters:

Returns:



122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/fusuma/device.rb', line 122

def extract_attribute(line:)
  if (id = id_from(line))
    {id: id}
  elsif (name = name_from(line))
    {name: name}
  elsif (capabilities = capabilities_from(line))
    {capabilities: capabilities}
  elsif (available = available_from(line))
    {available: available}
  else
    {}
  end
end

#generate_devicesArray

: () -> Array

Returns:

  • (Array)


104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/fusuma/device.rb', line 104

def generate_devices
  lines.each_with_object([]) do |line, devices|
    attributes = extract_attribute(line: line)

    next if attributes == {}

    if attributes[:name]
      # when detected new line including device name
      devices << Device.new # next device
    end

    devices.last.assign_attributes(attributes) unless devices.empty?
  end
end

#id_from(line) ⇒ Object

: (String) -> String?



137
138
139
140
141
# File 'lib/fusuma/device.rb', line 137

def id_from(line)
  line.match("^Kernel:[[:space:]]*") do |m|
    m.post_match.match(/event[0-9]+/).to_s
  end
end

#name_from(line) ⇒ Object

: (String) -> String?



144
145
146
147
148
# File 'lib/fusuma/device.rb', line 144

def name_from(line)
  line.match("^Device:[[:space:]]*") do |m|
    m.post_match.strip
  end
end

#push(line) ⇒ Object

: (String) -> Array

Parameters:



98
99
100
# File 'lib/fusuma/device.rb', line 98

def push(line)
  lines.push(line)
end