2009-09-18 12 views
6

Es gab ein paar Posts über die Verknüpfung von Text mit einem Regex. Die beliebtesten is this post.Ruby linkify für URLs in Strings

jedoch meine spec ein wenig komplizierter ist:

describe TextFormatter do 

    def l(input) 
    TextFormatter.gsub_links!(input){|link| "!!#{link}!!"} 
    end 

    it "should detect simple links" do 
    l("http://www.cnn.com").should == "!!http://www.cnn.com!!" 
    end 

    it "should detect multi links" do 
    l("http://www.cnn.com http://boats.com?help.asp").should == "!!http://www.cnn.com!! !!http://boats.com?help.asp!!" 
    end 

    it "should compensate for parans properly" do 
    l("(http://this.is?hello_world)").should == "(!!http://this.is?hello_world!!)" 
    end 

    it "should ignore existing links" do 
    s = "<A HREF='http://sam.com'> http://sam.com </A>" 
    l(s.dup).should == s 
    end 

    it "should allow parans" do 
    l("http://sam.com.au?(red)").should == "!!http://sam.com.au?(red)!!" 
    end 

end 

Irgendwelche Ideen, wie die haarigen Regex zu implementieren:

Dies ist, wo ich so weit bin (es nicht 2 Tests):

def gsub_links!(input) 
    regex = /https?\:\/\/[\-\w+&@#\/%?=~\(\)\|!:,.;]*[\-\w+&@#\/%=~_\(\)|]/ 
    input.gsub!(regex) { |link| 
     yield link 
    } 
    end 

Antwort

13

Ich könnte etwas Kontext fehlen, aber warum neu erfinden das Rad? Haben Sie versucht auto_link in actionpack?

+0

yerp, auto link scheint alle meine Tests zu bestehen ... danke für das Aufzeigen –

+0

warum es nicht funktioniert in der App? Ich bekomme einen Fehler "falsche Anzahl von Argumenten (2 für 1) file: tag_helper.rb location: tag_options line: 113" während dies versucht wird. Es funktioniert perfekt in der Konsole obwohl – Arty

+3

'auto_link' ist von Rails seit 3.1. Eine aktualisierte Antwort finden Sie unter http://StackOverflow.com/questions/6418710/Replacing-the-Auto-Link-Method-in-Ruby-on-Rails-3-1. – Thilo

Verwandte Themen