У меня есть модуль с несколькими методами, и я хочу, чтобы некоторые из них оставались закрытыми. Поскольку вы не можете пометить их как закрытые в модуле, я хотел извлечь реализацию во вложенный класс и делегировать вызовы этому классу.
У меня возникла проблема с установкой переменных экземпляра. Отрезанный код работает так, как и следовало ожидать для инициализации значения @id
, но он не работает для @token
.
. Есть ли возможность вызвать метод HelpersImpl#token_initializer
из модуля Helpers
, который установит @token
значение для него?
И второй вопрос: почему это работает, когда метод, который устанавливает переменные, определен в Helpers
, но не работает, когда определен в HelpersImpl
?
module Helpers
def init_token
HelpersImpl.new.token_initializer.call
end
def init_id
id_initializer.call
end
def id_initializer
lambda do
@id = 'id'
end
end
class HelpersImpl
def token_initializer
lambda do
@token = 'HelpersImpl'
end
end
end
private_constant :HelpersImpl
end
class User
include Helpers
def token
init_token
@token
end
def id
init_id
@id
end
end
user = User.new
if user.id == 'id'
puts 'Id - OK!'
else
puts "Id - Wrong id: #{user.id.inspect}"
end
if user.token == 'HelpersImpl'
puts 'Token - OK!'
else
puts "Token - Wrong token: #{user.token.inspect}"
end