2016-04-07 3 views
0

Ich benutze Nicht-AR-Modell mit einer Factory-Methode darauf.FactoryGirl: Erstellen Sie Fabriken für Modell mit privater Klassenmethode neu

class MyModel 
    include ActiveAttr::Model 

    attribute :data 
    attribute :frequency 

    def self.process_data 
    # ... 
    new(data: 'foo', frequency: 1) # e. g. 
    end 
    private_class_method :new 
end 

Das Werk Invokation von cource einen Fehler werfen würde: private Methode `neue‘ genannt für MyModel Gibt es spezielle Optionen für die Fabrik, um diesen Fehler zu verzichten gesetzt werden?

+1

Warum möchten Sie, dass Ihre ': new'-Methode privat ist? –

+0

@ TheCha͢mp so Factory-Methode implementiert ist - wenn Sie ein Objekt mit verschiedenen Optionen für verschiedene Fälle instanziieren möchten. Anstatt mit neuem aufzurufen, könnte man es mit 'MyModel.process_data' aufrufen. – DreamWalker

Antwort

3

Blick in initialize_with.

class A 
    class << self 
    private :new 
    end 
end 

FactoryGirl.define do 
    factory :a do 
    initialize_with { A.send :new } 
    end 
end 

FactoryGirl.build :a 
#<C:0x007ff1219f0190> 
+0

Das war's! Vielen Dank. – DreamWalker

Verwandte Themen