Je peux accéder à l'espace de noms de premier niveau en Ruby avec deux deux-points devant le nom de la classe, par exemple ::AmbiguousClass
Comment pourrais-je faire cela via la méta-programmation ?
J'ai beaucoup de méthodes (plus de 5) qui valident et renvoient une classe donnée, dont toutes incluent une ligne comme ceci :
player = ::Player.find_by(uuid: input.player_uuid)
Je veux rendre cela plus général pour pouvoir simplement passer la classe à rechercher par UUID et réduire toutes ces méthodes en une seule. Voici ce que j'ai essayé :
def validate_and_return(model_name)
uuid_attr = "#{model_name}_uuid".to_sym
return unless input.respond_to?(uuid_attr)
klass = ::model_name.to_s.captialize.constantize
instance = klass.find_by(uuid: input.send(uuid_attr))
# valider l'instance
end
Cela ne fonctionne pas - cela renvoie une erreur de syntaxe :
Class:
Message: <"/home/dax/programming/xxx/lib/bus/converters/converter.rb:48: syntax error, unexpected tIDENTIFIER, expecting tCONSTANT