class Irrc::Query

Public: IRR / Whois query and result container.

Attributes

protocols[R]
sources[R]

Public Class Methods

new(object, options={}) click to toggle source

Public: Create a new Query object.

object - IRR object to extract. (eg: as-set, route-set, aut-num object) options - The Hash options to pass to IRR. (default: {procotol: [:ipv4, :ipv6]})

:source   - Specify authoritative IRR source names.
            If not given, any source will be accepted. (optional)
:protocol - :ipv4, :ipv6 or [:ipv4, :ipv6]
            A String or Symbol of protcol name is acceptable. (optional)

Examples

Irrc::Query.new('AS-JPNIC', source: :jpirr, protocol: :ipv4)
Irrc::Query.new('AS-JPNIC', source: [:jpirr, :radb])
# File lib/irrc/query.rb, line 28
def initialize(object, options={})
  options = {protocol: [:ipv4, :ipv6]}.merge(options)
  self.sources = options[:source]
  self.protocols = options[:protocol]
  self.object = object.to_s
end

Public Instance Methods

add_aut_num_result(autnums) click to toggle source

Public: Register aut-num object(s) as a result.

autnums - aut-num object(s) in String. Array form is also acceptable for multiple objects.

# File lib/irrc/query.rb, line 42
def add_aut_num_result(autnums)
  result = root.result

  @protocols.each do |protocol|
    result[protocol] ||= {}

    Array(autnums).each do |autnum|
      result[protocol][autnum] ||= []
    end
  end
end
add_prefix_result(prefixes, autnum, protocol) click to toggle source

Public: Register route object(s) as a result.

prefixes - route object(s) in String. Array form is also acceptable for multiple objects. autnum - Which aut-num has the route object(s). protocol - Which protocol the route object(s) is for. :ipv4 or :ipv6.

A String or Symbol of protcol name is acceptable.
# File lib/irrc/query.rb, line 60
def add_prefix_result(prefixes, autnum, protocol)
  result = root.result

  result[protocol] ||= {}
  result[protocol][autnum] ||= []
  result[protocol][autnum].push *Array(prefixes)
end
result() click to toggle source
# File lib/irrc/query.rb, line 35
def result
  @result ||= Struct.new(:ipv4, :ipv6).new
end

Private Instance Methods

protocols=(protocols) click to toggle source
# File lib/irrc/query.rb, line 75
def protocols=(protocols)
  protocols = Array(protocols).compact.map(&:to_s).flatten.uniq
  invalid = protocols - ['ipv4', 'ipv6']
  raise ArgumentError, "Invalid protocol: #{invalid.join(', ')}" unless invalid.empty?
  @protocols = protocols
end
sources=(sources) click to toggle source
# File lib/irrc/query.rb, line 71
def sources=(sources)
  @sources = Array(sources).compact.map(&:to_s).flatten.uniq
end