Sha256: 10d655a8beb171109b14238e19f6f4349bc8bb4d9505fd08fd7921d1cd86e6a3

Contents?: true

Size: 1.91 KB

Versions: 20

Compression:

Stored size: 1.91 KB

Contents

module Stellar
  class Asset
    def self.native
      new(:asset_type_native)
    end

    def self.alphanum4(code, issuer)
      raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
      code = normalize_code(code, 4)
      an = AlphaNum4.new({asset_code:code, issuer:issuer.account_id})
      new(:asset_type_credit_alphanum4, an)
    end

    def self.alphanum12(code, issuer)
      raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
      code = normalize_code(code, 12)
      an = AlphaNum12.new({asset_code:code, issuer:issuer.account_id})
      new(:asset_type_credit_alphanum12, an)
    end

    def to_s
      case switch
      when AssetType.asset_type_native
        "native"
      when AssetType.asset_type_credit_alphanum4
        anum = alpha_num4!
        issuer_address = Stellar::Convert.pk_to_address(anum.issuer)
        "#{anum.asset_code}/#{issuer_address}"
      when AssetType.asset_type_credit_alphanum12
        anum = alpha_num12!
        issuer_address = Stellar::Convert.pk_to_address(anum.issuer)
        "#{anum.asset_code}/#{issuer_address}"
      end
    end

    def inspect
      label = switch.to_s
      "#<Stellar::Asset #{to_s}>"
    end

    def code
      case switch
      when AssetType.asset_type_credit_alphanum4
        alpha_num4!.asset_code
      when AssetType.asset_type_credit_alphanum12
        alpha_num12!.asset_code
      else
        raise "#{switch} assets do not have a code"
      end
    end
    
    def issuer
      case switch
      when AssetType.asset_type_credit_alphanum4
        alpha_num4!.issuer
      when AssetType.asset_type_credit_alphanum12
        alpha_num12!.issuer
      else
        raise "#{switch} assets do not have a isuuer"
      end
    end

    def self.normalize_code(code, length)
      raise ArgumentError, "Invalid asset code: #{code}, must be <= #{length} bytes" if code.length > length

      code.ljust(length, "\x00")
    end
  end
end

Version data entries

20 entries across 20 versions & 3 rubygems

Version Path
stellar-base-0.14.0 lib/stellar/asset.rb
stellar-base-0.13.0 lib/stellar/asset.rb
stellar-base-0.12.0 lib/stellar/asset.rb
stellar-base-0.11.0 lib/stellar/asset.rb
auction-ruby-base-0.1.3 lib/stellar/asset.rb
auction-ruby-base-0.1.2 lib/stellar/asset.rb
auction-ruby-base-0.1.1 lib/stellar/asset.rb
stellar-base-0.10.0 lib/stellar/asset.rb
stellar-base-0.9.0 lib/stellar/asset.rb
stellar-base-0.8.0 lib/stellar/asset.rb
stellar-base-0.7.0 lib/stellar/asset.rb
stellar-base-0.6.1 lib/stellar/asset.rb
stellar-base-0.6.0 lib/stellar/asset.rb
stellar-base-0.5.0 lib/stellar/asset.rb
stellar-base-0.4.0 lib/stellar/asset.rb
open-core-0.3.0 lib/stellar/asset.rb
stellar-base-0.3.0 lib/stellar/asset.rb
stellar-base-0.2.0 lib/stellar/asset.rb
stellar-base-0.1.4 lib/stellar/asset.rb
stellar-base-0.1.3 lib/stellar/asset.rb