Module: WifiWand::IPAddressExtractor
- Defined in:
- lib/wifi_wand/services/ip_address_extractor.rb
Class Method Summary collapse
- .address_from_line(line, line_type:, family:) ⇒ Object
- .addresses(output, line_type:, family:) ⇒ Object
- .expected_family?(address, family) ⇒ Boolean
- .normalized_address(address_token, family:) ⇒ Object
Class Method Details
.address_from_line(line, line_type:, family:) ⇒ Object
13 14 15 16 17 18 |
# File 'lib/wifi_wand/services/ip_address_extractor.rb', line 13 def self.address_from_line(line, line_type:, family:) tokens = line.split return nil unless tokens.first == line_type normalized_address(tokens[1], family: family) end |
.addresses(output, line_type:, family:) ⇒ Object
7 8 9 10 11 |
# File 'lib/wifi_wand/services/ip_address_extractor.rb', line 7 def self.addresses(output, line_type:, family:) output.each_line.filter_map do |line| address_from_line(line, line_type: line_type, family: family) end end |
.expected_family?(address, family) ⇒ Boolean
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/wifi_wand/services/ip_address_extractor.rb', line 33 def self.expected_family?(address, family) case family when :ipv4 address.ipv4? when :ipv6 address.ipv6? else raise ArgumentError, "Unknown IP address family: #{family.inspect}" end end |
.normalized_address(address_token, family:) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/wifi_wand/services/ip_address_extractor.rb', line 20 def self.normalized_address(address_token, family:) address = address_token&.split('/')&.first address = address&.split('%')&.first if family == :ipv6 return nil if address.nil? || address.empty? parsed_address = IPAddr.new(address) return nil unless expected_family?(parsed_address, family) address rescue IPAddr::InvalidAddressError nil end |