2009-09-18 13 views
6

Bir regex kullanarak metnin yerleştirilmesiyle ilgili birkaç ileti var. En popüler is this post.Dizelerdeki Ruby'ler için Ruby fontfy

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 

Herhangi fikirleri nasıl kıllı Regex uygulamak için:

: Şimdiye kadar nerede

budur (o 2 testleri başarısız) benim Spec biraz daha karmaşıktır Ancak

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

cevap

13

Bazı içerik eksik olabilir, ancak neden tekerleği yeniden icat ediyorsunuz? actionpack'da auto_link'u denediniz mi?

$ gem install actionpack 

$ irb -f --prompt simple 
>> require 'action_view' 
>> include ActionView::Helpers 

>> auto_link("abc http://google.com xyz") 
=> "abc <a href=\"http://google.com\">http://google.com</a> xyz" 
>> auto_link("abc <a href='http://google.com'>google</a> xyz") 
=> "abc <a href='http://google.com'>google</a> xyz" 
+0

yerp, oto bağlantı, uygulamada başarısız olmasının –

+0

bunu işaret için ... teşekkürler tüm testleri geçmek görünüyor? Bir hata alıyorum "yanlış argüman sayısı (2 için 1) dosya: tag_helper.rb location: tag_options çizgi: 113" bunu yapmaya çalışırken. Konsolda mükemmel çalışır, ancak – Arty

+3

'auto_link' 3.1'den beri Rails'den çıktı. Güncellenmiş bir cevap için http://stackoverflow.com/questions/6418710/replacing-the-auto-link-method-in-ruby-on-rails-3-1 adresini ziyaret edin. – Thilo