class Beowulf::Operation
Public Class Methods
new(options = {})
click to toggle source
# File lib/beowulf/operation.rb, line 7 def initialize(options = {}) opt = options.dup @type = opt.delete(:type) opt.each do |k, v| instance_variable_set("@#{k}", type(@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
Private Class Methods
broadcast_operations()
click to toggle source
# File lib/beowulf/operation.rb, line 81 def self.broadcast_operations @broadcast_operations ||= JSON[File.read broadcast_operations_json_path] end
broadcast_operations_json_path()
click to toggle source
# File lib/beowulf/operation.rb, line 77 def self.broadcast_operations_json_path @broadcast_operations_json_path ||= "#{File.dirname(__FILE__)}/broadcast_operations.json" end
known_operation_names()
click to toggle source
# File lib/beowulf/operation.rb, line 85 def self.known_operation_names broadcast_operations.map { |op| op["operation"].to_sym } end
param_names(type)
click to toggle source
# File lib/beowulf/operation.rb, line 89 def self.param_names(type) broadcast_operations.each do |op| if op['operation'].to_sym == type.to_sym return op['params'].map(&:to_sym) end end end
Public Instance Methods
payload()
click to toggle source
# 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()
click to toggle source
# 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
Private Instance Methods
use_condenser_namespace?()
click to toggle source
# File lib/beowulf/operation.rb, line 97 def use_condenser_namespace? @use_condenser_namespace end