2009-07-17 6 views
1

Ich habe kürzlich begonnen, Gurke & Subdomain-Fu zusammen zu verwenden, und es hat mich einige schreckliche Dinge tun.Gucumber & Subdomain-fu, um nett zusammen zu spielen

Ich habe einen Schritt Definition, die wie folgt aussehen verwendet:

path = grok_path(path) 
get path 

so schön und einfach ist, meiner Meinung nach. Aber jetzt ist es das:

path = grok_path(path) 
get "http://#{subdomain}.example.com#{path}" 

Diese arbeitet, aber es ist nicht gerade sauber. Was ist ein besserer Weg, dies zu tun?

Antwort

2

Nur um Schritt Definitionen besser lesbar zu machen, können Sie das Zeug in einem kleinen Verfahren wickeln konnte, wie folgt:

def subdomained_path(path, subdomain): 
    return "http://#{subdomain}.example.com#{path}" 
end 

dem Sie Ihren Schritt Definitionen in etwas aufzuräumen erlaubt wie:

path = grok_path(path) 
get subdomained_path(path, subdomain) 

Funktional sind die beiden gleichwertig (und ebenso wie Hacky), aber die Änderungen, die ich vorgeschlagen habe, werden zumindest den Code ein bisschen sauberer aussehen lassen. Wenn Sie Zugriff auf Ändern von Net :: HTTP.get haben, können Sie die tatsächliche "Get" -Methode ändern, um ein Sub-Domäne-Argument zu akzeptieren, das es noch sauberer macht.

+0

Dieses viel besser aussieht, danke! Ich bin nicht ganz glücklich damit, aber es ist das Beste, was ich bisher gesehen habe. –

2

Ich bin nicht sicher, wie gut diese in Gurke gilt (Shoulda hier verwendet wird), aber nach ein paar Empfehlungen an anderer Stelle versuchen, dies zuverlässig zu funktionieren scheint:

def in_subdomain(str) 
    # test.host == default testing domain, feel free to change to match your usage 
    @request.host = "#{str}.test.host" 
end 

vor und dann get zu nennen, Sie müssen Sie nur sicherstellen, dass Sie in_subdomain('subdomain-fuuuuuu') sind. Das setzt die URL und current_subdomain mindestens richtig (ich habe alles nicht überprüft), Weiterleitungen ohne Angabe von Subdomain bleiben in der Subdomain, und alle Weiterleitungen zu anderen Subdomains (oder :subdomain => false) setzen immer noch den richtigen umgeleiteten_to-Wert.

Diese (hochwertige und ich bin sicher, dass Sie sagen können) Tests bestehen, zum Beispiel, und sie haben eine Kontrolle über current_subdomain in der Steuerung:

should "show on the owner's subdomain" do 
    in_subdomain(@user.domain) 
    get :show, :id => @user.things.first.id 
    assert_response :success 
end 
should "not show on another users' subdomain" do 
    in_subdomain(@random_user.domain) 
    get :show, :id => @user.things.first.id 
    assert_redirected_to user_url(@random_user, :subdomain => @random_user.domain) 
end 
should "not show on a non-existent subdomain" do 
    in_subdomain("cthulhu-fhtagn") 
    get :show, :id => @user.things.first.id 
    assert_redirected_to root_url(:subdomain => false) 
end 
Verwandte Themen