ryonkn/bgpview-ruby-gem

View on GitHub
lib/bgp_view/prefixes.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require 'bgp_view/api'
require 'bgp_view/ip'

module BGPView
  class Prefixes
    @@cache = {}

    private_class_method :new
    attr_reader :ipv4, :ipv6

    def initialize(number)
      BGPView::Number.check(number)

      prefixes = BGPView::API.call("asn/#{number}/prefixes")

      @ipv4 = extract_ip(prefixes, 'ipv4')
      @ipv6 = extract_ip(prefixes, 'ipv6')

      @@cache[number] = self
    end

    def self.find(asn)
      @@cache.key?(asn.number) ? @@cache[asn.number] : new(asn.number)
    end

    private

    def extract_ip(prefixes, version)
      prefixes[:data]["#{version}_prefixes".to_sym].map do |prefix|
        BGPView::Ip.new(prefix)
      end
    end
  end
end