vtm9/adequate_crypto_address

View on GitHub
lib/adequate_crypto_address/xmr.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module AdequateCryptoAddress
  class Xmr
    attr_reader :address, :type

    def initialize(address)
      @address = address
      @type = address_type
    end

    def valid?(type = nil)
      if type
        address_type == type.to_sym
      else
        !address_type.nil?
      end
    end

    private

    def address_type
      return nil unless [95, 106].include?(address.size)

      return :monero if pattern_valid?
    end

    def pattern_valid?
      address.size == 95 ?
        address.match(/^4|8[0-9AB][1-9A-HJ-NP-Za-km-z]{93}$/) :
        address.match(/^4|8[1-9A-HJ-NP-Za-km-z]{105}(?:[1-9A-HJ-NP-Za-km-z]{30})?$/)
    end
  end
  Monero = Xmr
end