module Aerospike::Peers::Parse
Parse
the response from peers command
Constants
- BASE_REGEX
- Object
Object
representing the parsed response from peers command
Public Class Methods
call(response)
click to toggle source
# File lib/aerospike/peers/parse.rb, line 31 def call(response) gen, port, peers = parse_base(response) ::Aerospike::Peers::Parse::Object.new.tap do |obj| obj.generation = gen.to_i obj.port_default = port.empty? ? nil : port.to_i obj.peers = parse_peers(peers, obj) end end
parse_base(response)
click to toggle source
# File lib/aerospike/peers/parse.rb, line 41 def parse_base(response) BASE_REGEX.match(response).to_a.last(3).tap do |parsed| # Expect three pieces parsed from the Regex raise ::Aerospike::Exceptions::Parse if parsed.size != 3 end end
parse_host(parser, peer)
click to toggle source
# File lib/aerospike/peers/parse.rb, line 87 def parse_host(parser, peer) if parser.current == '[' # IPv6 parser.step host = parser.read_until(']') # skip one extra if port is detected, to match read behavior below parser.step if parser.current == ':' else host = parser.read_until(',', ':', ']') end port = parser.prev == ':' ? parser.read_until(',', ']').to_i : nil if parser.prev == ',' || parser.prev == ']' return ::Aerospike::Host.new(host, port, peer.tls_name) end raise ::Aerospike::Exceptions::Parse, "Unterminated host in response" end
parse_hosts(parser, peer)
click to toggle source
# File lib/aerospike/peers/parse.rb, line 74 def parse_hosts(parser, peer) result = [] parser.expect('[') return result if parser.current == ']' loop do result << parse_host(parser, peer) break if parser.current == ']' end result end
parse_peer(parser, obj)
click to toggle source
# File lib/aerospike/peers/parse.rb, line 60 def parse_peer(parser, obj) ::Aerospike::Peer.new.tap do |peer| parser.expect('[') peer.node_name = parser.read_until(',') peer.tls_name = parser.read_until(',') peer.hosts = parse_hosts(parser, peer) # Assign default port if missing peer.hosts.each do |host| host.port ||= obj.port_default end parser.expect(']') end end
parse_peers(response, obj)
click to toggle source
# File lib/aerospike/peers/parse.rb, line 48 def parse_peers(response, obj) return [] if response.empty? parser = ::Aerospike::Utils::StringParser.new(response) [].tap do |result| loop do result << parse_peer(parser, obj) break unless parser.current == ',' parser.step end end end