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)