Class: Radiator::Operation

Inherits:
Object
  • Object
show all
Includes:
OperationIds, OperationTypes, Utils
Defined in:
lib/radiator/operation.rb

Constant Summary

Constants included from OperationTypes

Radiator::OperationTypes::TYPES

Constants included from OperationIds

Radiator::OperationIds::IDS

Instance Method Summary collapse

Methods included from Utils

#debug, #error, #extract_signatures, #hexlify, #pakArr, #pakC, #pakHash, #pakI, #pakL!, #pakS, #pakStr, #pakc, #paks, #send_log, #unhexlify, #varint, #warning

Methods included from OperationTypes

#type

Methods included from OperationIds

#id

Constructor Details

#initialize(options = {}) ⇒ Operation

Returns a new instance of Operation.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/radiator/operation.rb', line 7

def initialize(options = {})
  chain = (options.delete(:chain) || 'hive').to_sym
  opt = options.dup
  @type = opt.delete(:type)
  
  opt.each do |k, v|
    instance_variable_set("@#{k}", type(chain, @type, k, v))
  end
  
  @use_condenser_namespace = if options.keys.include? :use_condenser_namespace
    options.delete(:use_condenser_namespace)
  else
    true
  end
  
  unless Operation::known_operation_names.include? @type
    raise OperationError, "Unsupported operation type: #{@type}"
  end
end

Instance Method Details

#payloadObject



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/radiator/operation.rb', line 53

def payload
  params = {}
  
  Operation::param_names(@type.to_sym).each do |p|
    next unless defined? p
    
    v = instance_variable_get("@#{p}")
    next if v.nil?
    next if v.class == Radiator::Type::Future
    
    params[p] = case v
    when Radiator::Type::Beneficiaries then [[0, v.to_h]]
    when Hive::Type::Amount, Steem::Type::Amount
      if use_condenser_namespace?
        v.to_s
      else
        v.to_a
      end
    else; v
    end
  end
  
  [@type, params]
end

#to_bytesObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/radiator/operation.rb', line 27

def to_bytes
  bytes = [id(@type.to_sym)].pack('C')
  
  Operation::param_names(@type.to_sym).each do |p|
    next unless defined? p
    
    v = instance_variable_get("@#{p}")
    bytes += v.to_bytes and next if v.respond_to? :to_bytes
    
    bytes += case v
    when Symbol then pakStr(v.to_s)
    when String then pakStr(v)
    when Integer then paks(v)
    when TrueClass then pakC(1)
    when FalseClass then pakC(0)
    when ::Array then pakArr(v)
    when ::Hash then pakHash(v)
    when NilClass then next
    else
      raise OperationError, "Unsupported type: #{v.class}"
    end
  end
  
  bytes
end