module IOSTSdk::Models

Constants

MODEL_REGISTRY

Public Class Methods

included(base) click to toggle source
# File lib/iost_sdk/models.rb, line 177
def self.included base
  base.send :include, InstanceMethods
  base.extend ClassMethods
end

Public Instance Methods

parse(data_key:, data_value:) click to toggle source
# File lib/iost_sdk/models.rb, line 221
def parse(data_key:, data_value:)
  # if nil, short-curcuit
  return nil unless data_value

  if IOSTSdk::Models::MODEL_REGISTRY[self.class.name].has_key?(data_key)
    instruction = IOSTSdk::Models::MODEL_REGISTRY[self.class.name][data_key]
    mode = instruction[:mode]
    class_name = instruction[:class]
    clazz = IOSTSdk::String.classify(class_name)

    case mode
    when :object
      clazz.new.populate(model_data: data_value)
    when :list
      data_value.empty? ? [] : data_value.map { |item| clazz.new.populate(model_data: item) }
    when :hash
      if data_value.empty?
        {}
      else
        data_value.each_with_object({}) do |(v_key, v_value), memo|
          memo[v_key] = clazz.new.populate(model_data: v_value)
        end
      end
    end
  else
    data_value
  end
end
raw_data() click to toggle source
# File lib/iost_sdk/models.rb, line 250
def raw_data
  raw_data = instance_variables.each_with_object({}) do |var_name, memo|
    n = var_name.to_s[1..-1].to_sym
    v = send(n)

    final_v = if IOSTSdk::Models::MODEL_REGISTRY[self.class.name].has_key?(n.to_s)
                mode = IOSTSdk::Models::MODEL_REGISTRY[self.class.name][n.to_s][:mode]
                case mode
                when :object
                  v.raw_data
                when :list
                  v.map(&:raw_data)
                when :hash
                  v.each_with_object({}) do |(v_key, v_value), memo|
                    memo[v_key] = v_value.raw_data
                  end
                end
              else
                v
              end
    memo[n] = final_v
  end

  raw_data
end