Class: Beowulf::Operation
- Inherits:
-
Object
- Object
- Beowulf::Operation
- Includes:
- OperationIds, OperationTypes, Utils
- Defined in:
- lib/beowulf/operation.rb
Constant Summary
Constants included from OperationTypes
Beowulf::OperationTypes::TYPES
Constants included from OperationIds
Instance Method Summary collapse
-
#initialize(options = {}) ⇒ Operation
constructor
A new instance of Operation.
- #payload ⇒ Object
- #to_bytes ⇒ Object
Methods included from Utils
#debug, #error, #extract_signatures, #hexlify, #pakArr, #pakC, #pakHash, #pakI, #pakL!, #pakPubKey, #pakQ, #pakS, #pakStr, #pakc, #pakq, #paks, #send_log, #unhexlify, #varint, #warning
Methods included from OperationTypes
Methods included from OperationIds
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 |
# File 'lib/beowulf/operation.rb', line 7 def initialize( = {}) opt = .dup @type = opt.delete(:type) opt.each do |k, v| instance_variable_set("@#{k}", type(@type, k, v)) end @use_condenser_namespace = if .keys.include? :use_condenser_namespace .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
#payload ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/beowulf/operation.rb', line 55 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 == Beowulf::Type::Future params[p] = case v when Beowulf::Type::Amount v.to_s else; v end end [@type, params] end |
#to_bytes ⇒ Object
26 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 52 53 |
# File 'lib/beowulf/operation.rb', line 26 def to_bytes bytes = [id(@type.to_sym)].pack('C') Operation::param_names(@type.to_sym).each do |p| next unless defined? p # puts p v = instance_variable_get("@#{p}") # puts v 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 Authority then v.to_bytes when AuthorityUpdate then v.to_bytes when NilClass then next else raise OperationError, "Unsupported type: #{v.class}" end end bytes end |