module Radiator::Utils

Public Instance Methods

debug(obj, prefix = nil) click to toggle source
# File lib/radiator/utils.rb, line 70
def debug(obj, prefix = nil)
  if %w(DEBUG TRACE).include? ENV['LOG']
    send_log(:debug, obj, prefix)
  end
end
error(obj, prefix = nil) click to toggle source
# File lib/radiator/utils.rb, line 60
def error(obj, prefix = nil)
  send_log(:error, obj, prefix)
end
extract_signatures(options) click to toggle source
# File lib/radiator/utils.rb, line 3
def extract_signatures(options)
  return [] unless defined? options[:params].map
  
  params = options[:params]
  
  signatures = params.map do |param|
    next unless defined? param.map
    
    param.map do |tx|
      tx[:signatures] rescue nil
    end
  end.flatten.compact
  
  expirations = params.map do |param|
    next unless defined? param.map
    
    param.map do |tx|
      Time.parse(tx[:expiration] + 'Z') rescue nil
    end
  end.flatten.compact
  
  [signatures, expirations.min]
end
hexlify(s) click to toggle source
# File lib/radiator/utils.rb, line 76
def hexlify(s)
  a = []
  if s.respond_to? :each_byte
    s.each_byte { |b| a << sprintf('%02X', b) }
  else
    s.each { |b| a << sprintf('%02X', b) }
  end
  a.join.downcase
end
pakArr(a) click to toggle source
# File lib/radiator/utils.rb, line 112
def pakArr(a)
  varint(a.size) + a.map do |v|
    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.join
end
pakC(i) click to toggle source
# File lib/radiator/utils.rb, line 146
def pakC(i)
  [i].pack('C')
end
pakHash(h) click to toggle source
# File lib/radiator/utils.rb, line 129
def pakHash(h)
  varint(h.size) + h.map do |k, v|
    pakStr(k.to_s) + 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.join
end
pakI(i) click to toggle source
# File lib/radiator/utils.rb, line 162
def pakI(i)
  [i].pack('I')
end
pakL!(i) click to toggle source
# File lib/radiator/utils.rb, line 166
def pakL!(i)
  [i].pack('L!')
end
pakS(i) click to toggle source
# File lib/radiator/utils.rb, line 158
def pakS(i)
  [i].pack('S')
end
pakStr(s) click to toggle source
# File lib/radiator/utils.rb, line 103
def pakStr(s)
  s = s.dup.force_encoding('BINARY')
  bytes = []
  bytes << varint(s.size)
  bytes << s
  
  bytes.join
end
pakc(i) click to toggle source
# File lib/radiator/utils.rb, line 150
def pakc(i)
  [i].pack('c')
end
paks(i) click to toggle source
# File lib/radiator/utils.rb, line 154
def paks(i)
  [i].pack('s')
end
send_log(level, obj, prefix = nil) click to toggle source
# File lib/radiator/utils.rb, line 27
def send_log(level, obj, prefix = nil)
  log_message = case obj
  when String
    log_message = if !!prefix
      "#{prefix} :: #{obj}"
    else
      obj
    end
    
    if !!@logger
      @logger.send level, log_message
    else
      puts "#{level}: #{log_message}"
    end
  else
    if defined? @logger.ap
      if !!prefix
        @logger.ap log_level: level, prefix => obj
      else
        @logger.ap obj, level
      end
    else
      if !!prefix
        @logger.send level, ({prefix => obj}).inspect
      else
        @logger.send level, obj.inspect
      end
    end
  end
  
  nil
end
unhexlify(s) click to toggle source
# File lib/radiator/utils.rb, line 86
def unhexlify(s)
  s.split.pack('H*')
end
varint(n) click to toggle source
# File lib/radiator/utils.rb, line 90
def varint(n)
  data = []
  while n >= 0x80
    data += [(n & 0x7f) | 0x80]
    
    n >>= 7
  end
  
  data += [n]
  
  data.pack('C*')
end
warning(obj, prefix = nil, log_debug_node = false) click to toggle source
# File lib/radiator/utils.rb, line 64
def warning(obj, prefix = nil, log_debug_node = false)
  debug("Current node: #{@url}", prefix) if !!log_debug_node && @url
    
  send_log(:warn, obj, prefix)
end