class OpenAssets::Protocol::AssetDefinition

The Definition of Open Asset

Attributes

asset_definition_url[RW]
asset_ids[RW]
contract_url[RW]
description[RW]
description_mime[RW]
divisibility[RW]
icon_url[RW]
image_url[RW]
issuer[RW]
name[RW]
name_short[RW]
proof_of_authenticity[RW]
type[RW]
version[RW]

Public Class Methods

new() click to toggle source
# File lib/openassets/protocol/asset_definition.rb, line 29
def initialize
  @asset_ids = []
  @version = '1.0'
  @divisibility = 0
end
parse_json(json) click to toggle source

Parse the JSON obtained from the json String, and create a AssetDefinition object. @param

# File lib/openassets/protocol/asset_definition.rb, line 37
def self.parse_json(json)
  parsed_json = JSON.parse(json)
  definition = new
  definition.asset_ids = parsed_json['asset_ids']
  definition.name_short = parsed_json['name_short']
  definition.name = parsed_json['name']
  definition.contract_url = parsed_json['contract_url']
  definition.issuer = parsed_json['issuer']
  definition.description = parsed_json['description']
  definition.description_mime = parsed_json['description_mime']
  definition.type = parsed_json['type']
  definition.divisibility = parsed_json['divisibility']
  definition.link_to_website = parsed_json['link_to_website']
  definition.icon_url = parsed_json['icon_url']
  definition.image_url = parsed_json['image_url']
  definition.version = parsed_json['version']
  definition
end

Public Instance Methods

include_asset_id?(asset_id) click to toggle source
# File lib/openassets/protocol/asset_definition.rb, line 56
def include_asset_id?(asset_id)
  return false if asset_ids.nil? || asset_ids.empty?
  asset_ids.include?(asset_id)
end
to_hash() click to toggle source
# File lib/openassets/protocol/asset_definition.rb, line 68
def to_hash
  instance_variables.inject({}) do |result, var|
    key = var.to_s
    key.slice!(0) if key.start_with?('@')
    result.update(key => instance_variable_get(var))
  end
end
to_json() click to toggle source

Convert Asset Definition to json format.

# File lib/openassets/protocol/asset_definition.rb, line 62
def to_json
  h = to_hash
  h.delete('proof_of_authenticity')
  h.to_json
end

Private Instance Methods

calc_proof_of_authenticity() click to toggle source
# File lib/openassets/protocol/asset_definition.rb, line 83
def calc_proof_of_authenticity
  result = false
  if !asset_definition_url.nil? && link_to_website
    subject = ssl_certificate_subject
    return true if !subject.nil? && subject == issuer
  end
  result
end
clear_poa_cache() click to toggle source
# File lib/openassets/protocol/asset_definition.rb, line 92
def clear_poa_cache
  @proof_of_authenticity = nil
end
ssl_certificate_subject() click to toggle source
# File lib/openassets/protocol/asset_definition.rb, line 96
def ssl_certificate_subject
  cache = OpenAssets::Cache::SSLCertificateCache.new
  subject = cache.get(asset_definition_url)
  if subject.nil?
    client = HTTPClient.new
    client.redirect_uri_callback = ->(uri, res) {res.header['location'][0]}
    response = client.get(asset_definition_url, :follow_redirect => true)
    cert = response.peer_cert
    unless cert.nil?
      subjects = cert.subject.to_a
      o = subjects.find{|x|x[0] == 'O'}
      if !o.nil? && o.length > 2
        subject = o[1]
        cache.put(asset_definition_url, subject, cert.not_after)
      end
    end
  end
  subject
end