Thread: Text encryption
View Single Post
Old Feb 10th, 2006, 2:05 PM   #8
Master
Programmer
 
Master's Avatar
 
Join Date: Sep 2005
Location: GA
Posts: 99
Rep Power: 3 Master is on a distinguished road
That is the code for it right there
class File
  attr_reader :name
  attr_reader :mode
  alias file_int initialize
  def initialize(*args)
    file_int(*args)
    @name = args[0]
    @mode = args[1] if !args[1].nil?
    @_self = self
  end
  
  def share(obj = nil)
    return if obj.nil?
    @_self = obj
  end
end


module Serialize
  W_MODE = %w[wb wb+ w+ w a]
  R_MODE = %w[rb rb+ a+ a]
  NOTWRITEABLE = "Instance of IO (write mode) is needed\n"
  NOTREADABLE  = "Instance of IO (read mode) is needed\n"
  CHAR = ";"
  $OPEN_N = 0
  module_function
  
  def encode(string)
    return if !string.is_a?(String)
    @str = string.unpack('B*')[0].tr('01', " \n")
  end
  def decode(string)
  return if !string.is_a?(String)
    [string.tr(" \n", '01')].pack('B*')
  end
  
  def save(data = nil, file = nil, depth = 0)
    return if data.nil?
    copyd = data#.deep_clone
    check =  data.is_a?(Array) || data.is_a?(String) || data.is_a?(Integer) || data.is_a?(Float)
    data = data.inspect.to_s
    temp = encode(data)
    name = nil
    mode = nil
    if !file.nil?
      if file.is_a?(File)
        name = file.name
        mode = file.mode
        raise NOTWRITEABLE if file.closed? || !W_MODE.include?(mode)
        if depth > 0
          new_file = File.new(name,mode)
          file.share(new_file)
        end
        file.write(temp)
        file.write(CHAR)
      else
        raise NOTWRITEABLE
      end
    end
    $Calls = copyd
    if file.nil?
      return $Calls
    else
      return temp
    end
  end
  
  def load_save(file = nil)
    msg = "No data to load\n"
    line = ""
    name = nil
    data = nil
    if !file.nil?
      $Calls = nil
    else
      if !$Calls.nil?
        return $Calls
      end
    end
      if file.is_a?(File)
        raise NOTREADABLE if file.closed? || !R_MODE.include?(file.mode)
        raise msg if FileTest.size(file.name) <= 0
        name = file.name
        if eval("$d_name.nil?")
          eval("$d_name = []; $c_name = 0") 
            while(true)
              break if file.eof?
              text = file.readline
              line += text
            end
          eval("$d_name = line.split(CHAR)")
        end
          eval("data = decode($d_name[$c_name])")
          eval("$c_name += 1")
          if !eval("$d_name.nil?")
            if eval("$c_name == $d_name.size")
              eval("$c_name = nil; $d_name = nil")
            end
          end
          begin
            return eval(data)
          rescue TypeError
            raise msg
          end
      end
  end
end
#usage
mystring = "Hello World"
myFile = File.open("filename","writemode")#filename = file to store data,mode = writemode"
Serialize.save(mystring) #this store the variable for later in the memory
Serialize.save(mystring,myFile) #this store the variable in a file for later
#you can call serialize.save as much as you want, that mean when you are loading, you have to use the same number of call for loading or less than. any greater will not load anything.
myFile.close()
myFile = File.open("filename","readmode")#filename = file to store data,mode = "readmode"
Serialize.load_save(myFile)
Master is offline   Reply With Quote