2010-04-22 4 views
5

Comment appelez-vous la méthode d'une classe incluse dans Ruby? Voir l'exemple ci-dessous. Cela fonctionne, mais ce n'est pas ce que je veux:Méthode d'appel sur la classe incluse dans Ruby

require 'httparty' 

module MyModule 
    class MyClass 
    include HTTParty 
    base_uri 'http://localhost'   

    def initialize(path) 
     # other code 
    end 

    end 
end 

C'est ce que je veux, mais ne fonctionne pas, en disant undefined method 'base_uri' [...]. Ce que j'essaie de faire est de définir dynamiquement le base_uri de httparty à partir du paramètre initialize.

require 'httparty' 

module MyModule 
    class MyClass 
    include HTTParty 

    def initialize(path) 
     base_uri 'http://localhost' 
     # other code 
    end 

    end 
end 

Répondre

7

Selon le HTTParty source code, base_uri est une méthode de classe. Donc, vous devez appeler la méthode sur le contexte de la classe

module MyModule 
    class MyClass 
    include HTTParty 

    def initialize(path) 
     self.class.base_uri 'http://localhost' 
     # other code 
    end 

    end 
end 

Attention que cette solution pourrait ne pas être thread-safe, selon la façon dont vous utilisez votre bibliothèque.

+0

Pouvez-vous jeter plus de lumière sur le problème de la sécurité des threads? En ruby ​​on rails nous avons plusieurs processus. est-ce que c'est sûr dans ce cas? Deux processus peuvent changer les classes base_uri simultanément. Comment ça marche? – user566245

Questions connexes