Я пытаюсь определить методы, которые являются частями большую часть времени, но не всегда. Например:Чаще всего методы
class Service
def initialize(repo)
@repo = repo
end
private def repo
@repo
end
def all
repo.all
end
end
Мой класс Service
будет осуществлять функции вокруг репозитория объекта. Я хочу полностью скрыть объект repo
, чтобы предотвратить его утечку в мой производственный код.
Однако при отладке или тестировании я хочу быть ленивым и позвонить по телефону service.repo
напрямую, используя service.send :repo
.
Я думал о загрузке расширения класса или загрязнена ENV проверки склонения для моих тестов и консоли, однако, что предотвращает мои тесты от взлома если код внутри ./lib/*
делает плохое использование частных методов во время выполнения теста.
Теперь я изучаю с уточнениями, но это требует слишком много шаблонного и я хочу сделать некоторые декоратор, как это:
+LibPrivate
def repo
@repo
end
Это является Python like decorator, но я считаю, так как Руби 2.1 можно было бы определить пользовательские модификаторы за пределами частного/общедоступного без этого драгоценного камня
Это ломается точно состояние моего вопроса. После этого патча обезьяны мои тесты не будут ломаться, если другие части моего кода в «lib /» используют частные вызовы, но ломают производство. – SystematicFrank
Вы можете обернуть класс в прокси, но он будет более сложным, просто используя 'send: foo'. У вас мало альтернатив. Вы либо изменяете область действия для конкретного процесса, либо используете 'send' –
Избегание деталей реализации не всегда возможно. Например, в моей «службе» я никогда не захочу предоставить счет или пользовательский запрос. Однако, если я избегу этой детали реализации, у меня будет много ненужного шаблона конфигурации базы данных. – SystematicFrank