Come posso usare strip_tags nel normale codice Ruby (non-rail)?

Devo trasformare l’HTML in testo normale. C’è una bella funzione che lo fa in SanitizeHelper di ActionView, ma ho difficoltà a capire come posso fare riferimento ad esso e usarlo in un semplice file test.rb.

http://api.rubyonrails.org/classs/ActionView/Helpers/SanitizeHelper.html

Mi piacerebbe poter chiamare strip_tags("lol") => "lol"

La domanda è abbastanza vecchia, ma ho avuto lo stesso problema di recente. Ho trovato una soluzione semplice: gem sanitize . È leggero, funziona bene e ha opzioni aggiuntive se ne hai bisogno.

 Sanitize.clean("lol") #=> "lol" 

ActiveSupport è l’unico framework Rails che supporta i singoli componenti cherry-picking. Gli altri framework, incluso ActionView, devono essere richiesti in massa:

 require 'action_view' 

Si noti che questo richiede non caricherà necessariamente tutto ActionView. Escludendo le situazioni in cui la sicurezza del thread richiede che i caricamenti automatici avvengano con impazienza, imposta semplicemente i caricamenti automatici e richiede dipendenze comuni. Ciò significa che seguendo la richiesta, se si fa riferimento, ad esempio ActionView::Helpers::SanitizeHelper , verrà richiesto action_view/helpers /sanitize_helper.rb .

Pertanto, il modo corretto e supportato per realizzare ciò che desideri utilizzando ActionView è il seguente:

 require 'action_view' class Test < Test::Unit::TestCase # or whatever include ActionView::Helpers::SanitizeHelper def my_test assert_equal "lol", strip_tags("lol") end end 

Questo non è ben documentato; Ho basato questa risposta principalmente sulla discussione su questo problema .

Credo che questo dovrebbe essere abbastanza:

 "lol".gsub(/< [^>]*>/ui,'') #=> lol 

Puoi anche usare Nokogiri:

 require 'rubygems' require 'nokogiri' doc = Nokogiri::HTML("lol") doc.text #=> "lol" 

Puoi ancora andare con quello di Rails facendo qualcosa del tipo:

 require 'rubygems' require 'action_view' class Foo include ActionView::Helpers::SanitizeHelper def test strip_tags("lol") end end f = Foo.new puts f.test #=> lol 

Se non lo usi molto spesso, puoi usare:

 ActionView::Base.full_sanitizer.sanitize(your_html_string) 

altrimenti è ansible definire un metodo nel file test_helper.rb come:

 def strip_html_tags(string) ActionView::Base.full_sanitizer.sanitize(string) end 

E poi nel tuo file test.rb, usa questo come:

 strip_html_tags(your_html_string) 

La domanda è abbastanza vecchia, ma puoi chiamarla nel tuo test.rb questo modo:

 ActionController::Base.helpers.strip_tags("lol") => "lol" 

Con questo esempio:

 "<p>example</p>" 

Questo mi ha aiutato:

 ActionView::Base.full_sanitizer.sanitize(Nokogiri::HTML(example).text) 

Produzione:

 example 
 HTML::FullSanitizer.new.sanitize('lol') # => "lol" 

Idealmente è necessario includere ActionView::Helpers::SanitizeHelper ma ci sono diverse dipendenze che non vengono incluse quando lo si fa. Puoi richiedere a te stesso di poter usare strip_tags .

 require 'erb' require 'active_support' require 'active_support/core_ext/class/attribute_accessors' require 'active_support/core_ext/string/encoding' require 'action_view/helpers/capture_helper' require 'action_view/helpers/sanitize_helper' include ActionView::Helpers::SanitizeHelper strip_tags("lol") # => "lol" 

Questo presuppone che tu abbia installato 3 gemme di rotaie.