Un ensemble d'objets prédéfini doit être agrégé dans un nouvel objet. Cependant, je veux que les utilisateurs spécifient une fonction personnalisée pour cela.Autoriser un script défini par l'utilisateur dans l'application Ruby/Rails
Maintenant, l'approche naïve serait
def foo; end
objects = [1,2,3]
# result = eval(user_script)
result = eval("objects.inject {|sum, n| sum + n }")
Ce que je évidemment ne veux pas faire! J'ai lu environ $SAFE = 4
(voir here), mais je ne suis pas sûr que cela suffise. Surtout parce que le script défini par l'utilisateur sera toujours en mesure d'appeler d'autres fonctions comme foo
. Je veux seulement autoriser l'accès à des fonctions de base de Ruby non dangereuses.
Existe-t-il des fonctionnalités permettant à Ruby d'exécuter en toute sécurité des scripts définis par l'utilisateur? Je n'ai pas besoin d'être une syntaxe Ruby. Ce serait bien, cependant.
C'est génial! Difficile de trouver de telles choses dans le rubyverse. –