Шон,
Нет способа не требовать библиотеки, о которой я знаю. Я думаю, если вы хотите персонализировать свой Ruby так, чтобы вы могли «свернуть свой», используя eval.
Сценарий ниже в основном работает как переводчик. Вы можете добавлять свои собственные функции и включать библиотеки. Дайте файлу разрешения на выполнение файла и поместите его в / usr / bin, если вы действительно этого хотите. Тогда просто используйте
$ myruby <source>
Вот код для очень минимального. В качестве примера я включил библиотеку дайджеста md5 и создал пользовательскую функцию с именем md5 ()
#!/usr/bin/ruby -w
require 'digest/md5';
def executeCode(file)
handle = File.open(file,'r');
for line in handle.readlines()
line = line.strip();
begin
eval(line);
rescue Exception => e
print "Problem with script '" + file + "'\n";
print e + "\n";
end
end
end
def checkFile(file)
if !File.exists?(file)
print "No such source file '" + file + "'\n";
exit(1);
elsif !File.readable?(file)
print "Cannot read from source file '" + file + "'\n";
exit(1);
else
executeCode(file);
end
end
# My custom function for our "interpreter"
def md5(key=nil)
if key.nil?
raise "md5 requires 1 parameter, 0 given!\n";
else
return Digest::MD5.hexdigest(key)
end
end
if ARGV[0].nil?
print "No input file specified!\n"
exit(1);
else
checkFile(ARGV[0]);
end
Сохраните его как myruby или myruby.rb и предоставьте ему права на выполнение (755). Теперь вы готовы создать обычный исходный файл ruby
puts "I will now generate a md5 digest for mypass using the md5() function"
puts md5('mypass')
Сохраните это и запустите, как обычный сценарий ruby, но с нашим новым интерпретатором. Вы заметите, что мне не нужно было включать какие-либо библиотеки или писать функцию в исходном коде, потому что все это определено в нашем интерпретаторе.
Вероятно, это не самый идеальный метод, но это единственный, который я могу придумать.
Приветствия