pedrocarrico/public_ip

View on GitHub
lib/public_ip.rb

Summary

Maintainability
A
55 mins
Test Coverage
require 'public_ip/service/registry'
require 'public_ip/service/registrable'
require 'public_ip/service/simple'
require 'public_ip/service/parsed_html'
require 'public_ip/service/plain'
require 'public_ip/service/matched_expression'
require 'public_ip/service/json_type'

require 'public_ip/version'

module PublicIp
  MAX_RETRY_ATTEMPTS = 3
  TIMEOUT_IN_SECS = 3

  class UnknownService < StandardError; end

  module_function

  def get_ip(service: :random)
    tries ||= MAX_RETRY_ATTEMPTS
    if service == :random
      PublicIp::Service::Registry.random_service.ip
    else
      PublicIp::Service::Registry[service].ip
    end
  rescue PublicIp::Service::TimedOut, PublicIp::Service::InvalidIpAddress
    tries -= 1
    retry if tries.positive? && service == :random

    raise
  end

  def list_services
    PublicIp::Service::Registry.available_services
  end
end