edubkendo
9/9/2014 - 4:14 AM

gistfile1.rb

def PackableStruct(values={})
  packcode = values.map{|k, v| to_packcode v}.join("")
  oscls = Struct.new(*values.map{|k, v| k}.push(:packcode)) do
    def pack
      (self.to_a - [self.packcode]).pack packcode
    end
  end
  os = oscls.new
  os.packcode = packcode
  return os
end