30. Juli 2007 in Ruby » Code-Schnipsel

Ruby-Snippet: Texte ordentlich kürzen

Die folgende Methode wird auf String-Objekte angewendet. Sie kürzt den übergebenen Text bis zu einer angegebenen Zeichenzahl, "rundet" auf ganze Wörter ab und gibt ihn dann zurück. Eine sinvolle Implementierung in einem Ruby-on-Rails-Projekt wäre im Modul ApplicationHelper. Sie kann dann ganz einfach in den Templates angewendet werden.

def shorten (string, count = 30)
	# String::shorten (naiv)
	# Autor: Martin Labuschin
	# Erstellt am 29.Juli 2007
	# String wird auf die durch count (optional, standard 30) bestimmte Anzahl von Zeichen gekürzt. Es werden dann ganze Wörter (erkannt durch Leerräume) zurückgegeben. Falls wirklich eine Kürzung duchgeführt wurde, wird ' ...' angehangen.
	# BEMERKUNG: Es wird nur Plaintext erwartet
	if string.length >= count 
		shortened = string[0, count]
		splitted = shortened.split(/\s/)
		words = splitted.length
		splitted[0, words-1].join(" ") + ' ...'
	else 
		string
	end
end

7 Kommentare

Jeena Paradies am 30. Juli 2007 #

Der Ansatz ist nett, aber ich hätte das so gelöst:

class String
def word_shorten ( length = 30 )
if self.length >= length
short = self[0, length].split(/\s/)

short[0, short.length-1].join(" ") + ' …'
else
self
end
end

end

puts "Lorem ipsum dolor sit amet.".word_shorten(10)

Jeena Paradies am 30. Juli 2007 #

Hier noch mal sinnvoller eingerückt: http://pastie.caboo.se/83383

Martin Labuschin am 30. Juli 2007 #

Funktionieren tun beide Beispiele. Du erweiterst aber die Klasse 'String', ich das Modul 'ApplicationHelper'. Ich denke in Rails-Projekten ist mein Ansatz mE die saubere Lösung.


Jedoch muss ich zugeben, dass deine einfacher anzuwenden ist.

Jeena Paradies am 30. Juli 2007 #

Hm, kann sein dass es in Rails besser ist diesen ApplicationHelper dazu zu verwenden. Ich habe nie mit Rails gearbeitet, deshalb kenne ich die Struktur nicht.

Martin Labuschin am 30. Juli 2007 #

Das Modul ApplicationHelper stellt darin enthaltene Methoden nur in dem Views (Templates) des MVC-Models bereit. In den meisten Anwendungsfällen würde das ausreichen.

Julian Schrader am 25. August 2007 #

Ich hatte diese Seite jetzt schon unendlich lange als Tab geöffnet, heute konnte ich es endlich einsetzen und mir eine ähnliche Funktion ableiten.


Danke für das Snippet!

Martin Labuschin am 25. August 2007 #

Nächste mal einfach bookmarken. Als Tab nervt's doch irgendwann... oder nicht ;)

Diskussion geschlossen

Die Kommentarfunktion dieses Artikels wurde deaktiviert. Private Mitteilungen an Martin bitte per E-Mail an martin@labuschin.com. Danke.