Magazine

truncate_around

Publié le 09 octobre 2008 par Cédrci Bousmanne

Avec Ruby On Rails, il y a deux petites fonctions sympa à utiliser : truncate(), qui permet de tronquer une chaîne de caractères (string), et highlight(), qui, quant à elle, permet de mettre en évidence un mot dans une chaîne.

Le petit défaut de la fonction truncate() est de ne prendre que trois paramètres :

  1. La chaîne de caractères qui nous intéresse
  2. Le nombre de caractères maximums à afficher
  3. Et enfin, paramètre optionnel, la chaine de séparation, par exemple :

Or, dans le cas d’une completion automatique dans un formulaire de recherche, il pourrait être interressant de tronquer la ou les suggestions autours de la chaîne de caractères entrée par l’utilisateur. On pourrait également imaginer que la chaîne de caractères en question soit mise en évidence à l’aide de la fonction highlight().

C’est exactement ce que fait le helper truncate_around ci-dessous :

1
def truncate_around(string, term, length, do_highlight = false, separator = "…")

2
 

3
return if(string.nil? or term.nil? or length < 1)

4
r = term if term.size == length

5
r = term if term == string

6
r = string if string.size <= length

7
 

8
length = length - term.size

9
term_x = string.index(term)

10
term_y = term_x + term.size

11
 

12
if(!r)

13
  if(term_x == 0)

14
    a = 0

15
    b = length

16
    r = string[a..b] + separator

17
  elsif(term_y == string.size)

18
    b = string.size

19
    a = string.size - length

20
    r = separator + string[a..b]

21
  elsif(term_x < (length/2) + 1)

22
    a = 0

23
    b = length

24
    r = string[a..b] + separator

25
  elsif((string.size - term_y) < (length/2)+1)

26
    b = string.size

27
    a = string.size - length

28
    r = separator + string[a..b]

29
  else

30
    if length % 2 == 0

31
      a = term_x - length/2

32
      b = term_y + length/2

33
    else

34
      a = term_x - length/2

35
      b = term_y + length/2 + 1

36
    end

37
    r = separator + string[a..b] + separator

38
  end

39
end

40
 

41
if do_highlight

42
  return highlight(r, term)

43
else

44
  return r

45
end

Cette fonction prend 5 paramètres, dont 2 optionnels :

  1. string : prend la chaîne de caractères de base
  2. term : prend le mot-clé
  3. length : prend la longueur totale de la chaîne de caractères a retourner
  4. do_highlight : précise si on applique la fonction highlight() à la chaîne retournée. Par défaut : false.
  5. separator : prend une chaîne de caractères a appliquer en début et/ou fin de chaîne retournée. Par défaut : .

Exemple d’utilisation

Copier-coller cette fonction dans l’un de vos helper. Pour cet exemple, nous partirons du principe que cette fonction est présente dans le helper application_helper.rb.

script/console
>> helper :application
>> string = "une chaine de test, pour démontrer la puissance de truncate_around()"
>> term = "démontrer"
>> length = 20
>> helper.truncate_around(string, term, length)
=> "&hellip;pour démontrer la pu&hellip;"
>> helper.truncate_around(string, term, length, true)
=> "&hellip;pour <strong class=\"highlight\">démontrer</strong> la pu&hellip;"

Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

  • Ruby In Steel Free

    L'éditeur de RIS offre une édition de leur produit pour Visual Studio 2008, c'est ici. Pour rappel, Ruby In Steel est un add-in Visual Studio qui permet de... Lire la suite

    Par  Olivier Duval
    A CLASSER
  • Origine de l'écartement des rails

    Je suis sur que vous allez apprécier la démonstration suivante : Pourquoi la distance standard entre 2 rails de chemin de fer au Canada est-elle de 4 pieds et... Lire la suite

    Par  Cebeji
    A CLASSER
  • tous avec fip

    Le collectif des Auditeurs et Partenaires de Fip Nantes/St NazaireCOMMUNIQUE DE PRESSELe 29 octobre 2008Les associations des auditeurs et des partenaires de... Lire la suite

    Par  Pjjp44
    A CLASSER
  • Valtechdays 2008, Paris on Rails 2008 : mise a disposition des presentations

    Les organisateurs de 2 événements qui ont eu lieu en novembre et décembre livrent les supports de leurs présentations : Valtechdays 2008, rendez-vous auquel j'a... Lire la suite

    Par  Olivier Duval
    A CLASSER
  • Ruby et Merb inside : initialisation

    Préambule Cette année, parmi mes bonnes résolutions, j'ai décidé de me mettre (réellement) à Ruby, tant qu'au niveau personnel que professionnel. Pourquoi ? Lire la suite

    Par  Olivier Duval
    A CLASSER
  • Rencontre Avec

    Sur Yvelines radio, radio locale des Yvelines basée à Versailles, j'ai créé l'émission "Rencontre Avec" qui fait la part belle à la discussion, aux lives, à la... Lire la suite

    Par  Michaël Mitch
    A CLASSER
  • Voyagez avec nous

    "1500 kilomètres, 15 semaines, 2 filles, 1 webcam", tel est le concept du site VoyagezAvecNous.tv proposant des vidéos commentées du trip de 2 jeunes... Lire la suite

    Par  Grégory Roger
    A CLASSER

A propos de l’auteur


Cédrci Bousmanne 1 partage Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte