Class: Fusuma::Device::LineParser
- Inherits:
-
Object
- Object
- Fusuma::Device::LineParser
- Defined in:
- lib/fusuma/device.rb
Overview
parse line and generate devices
Instance Attribute Summary collapse
-
#lines ⇒ Object
readonly
Returns the value of attribute lines.
Instance Method Summary collapse
- #available_from(line) ⇒ Object
- #capabilities_from(line) ⇒ Object
- #extract_attribute(line:) ⇒ Hash
- #generate_devices ⇒ Array
- #id_from(line) ⇒ Object
-
#initialize ⇒ LineParser
constructor
A new instance of LineParser.
- #name_from(line) ⇒ Object
- #push(line) ⇒ Object
Constructor Details
#initialize ⇒ LineParser
Returns a new instance of LineParser.
80 81 82 |
# File 'lib/fusuma/device.rb', line 80 def initialize @lines = [] end |
Instance Attribute Details
#lines ⇒ Object (readonly)
Returns the value of attribute lines.
78 79 80 |
# File 'lib/fusuma/device.rb', line 78 def lines @lines end |
Instance Method Details
#available_from(line) ⇒ Object
139 140 141 142 143 144 145 146 147 |
# File 'lib/fusuma/device.rb', line 139 def available_from(line) # NOTE: is natural scroll available? if line =~ /^Nat.scrolling: / return false if line =~ %r{n/a} return true # disabled / enabled end nil end |
#capabilities_from(line) ⇒ Object
133 134 135 136 137 |
# File 'lib/fusuma/device.rb', line 133 def capabilities_from(line) line.match('^Capabilities:[[:space:]]*') do |m| m.post_match.strip end end |
#extract_attribute(line:) ⇒ Hash
107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/fusuma/device.rb', line 107 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_devices ⇒ Array
90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/fusuma/device.rb', line 90 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
121 122 123 124 125 |
# File 'lib/fusuma/device.rb', line 121 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
127 128 129 130 131 |
# File 'lib/fusuma/device.rb', line 127 def name_from(line) line.match('^Device:[[:space:]]*') do |m| m.post_match.strip end end |
#push(line) ⇒ Object
85 86 87 |
# File 'lib/fusuma/device.rb', line 85 def push(line) lines.push(line) end |