Это действительно плохая идея - создавать приложение, которое изменяет себя при запросе через пользовательский ввод.Это побеждает преимущества контроля версий, и это делает для многих запутанных ошибок.
Если вам нужны настраиваемые пользователем параметры, которые нельзя изменить в источнике, рассмотрите возможность создания модели параметров / конфигурации, которая хранит ключи / значения в базе данных и интенсивно их кэширует.
Еще одна вещь, которую нужно иметь в виду, заключается в том, что определения классов Ruby выполняются как обычный код.Например, вы можете сделать следующее:
class Foo
if RUBY_VERSION == '1.9.2'
def self.bar
# do something 1.9.2 style
end
else
def self.bar
# do something 1.8.7 style
end
end
В этом примере показано более распространенное переключение Ruby-версии, но вы можете сделать то же самое, основываясь на значениях конфигурации , если они доступны для приложения.когда определение класса выполняется .Если вы load
класс, в котором вы делаете это, вы всегда можете load
повторить это, если / когда значения конфигурации изменятся, чтобы получить это преимущество.
По сути, это позволит вам иметь настройку, которая позволяет вашему пользователю, например, требовать, чтобы конкретная модель была проверена с помощью определенного валидатора, который вы не указали в своей кодовой базе, при условии, что ваша модель проверяетТакая конфигурация и определяет валидаторы, как я говорю.
Имеет смысл?