Можем ли мы переопределить метод ENV в рельсах? - PullRequest
0 голосов
/ 24 января 2019

Нормальное поведение

ENV[SOME_ENV_VARIABLE] указывает на .env файл или окружение var для heroku

Пользовательское поведение

Я хочу, если кто-то звонит ENV[SOME_ENV_VARIABLE] Я хочувызвать метод с аргументом SOME_ENV_VARIABLE.и этот метод должен возвращать somevalue, если это значение nil, то он должен возвращать это значение из файла .env

`ENV[SOME_ENV_VARIABLE]` # a method call to delegate_env_var(key) where key = SOME_ENV_VARIABLE


 def delegate_env_var(key) # key is `SOME_ENV_VARIABLE`
   value = databasecall(key)
   value.nil? ? ENV[SOME_ENV_VARIABLE] : value
 end

1 Ответ

0 голосов
/ 24 января 2019

ENV не метод, а константа:

> defined? ENV
=> "constant"

Вы можете переназначить его любому объекту, который вам нужен, даже строке (принимая предупреждение):

ENV = "asd"
(pry):27: warning: already initialized constant ENV
=> "asd"

Таким образом, вы, вероятно, могли бы создать объект, который бы реализовал метод [] описанным вами способом, и делегировать другие из них ENV.

Хотя это довольно рискованно.Я бы предпочел добавить пользовательский класс, который переносит ENV и доступ к переменным среды через этот класс:

класс Env def self.get # get from DB или ENV end end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...