10. Bibliothèque standard
Les méthodes des listes et des chaînes, plus les fonctions globales disponibles partout dans un script.
10.1 Méthodes des listes
Section intitulée « 10.1 Méthodes des listes »| Méthode | Rôle |
|---|---|
liste.each { |item| ... } |
Exécute le bloc pour chaque élément |
liste.each_with_index { |item, i| ... } |
Donne aussi la position (à partir de 0) |
liste.all { |item| ... } |
Vrai si tous satisfont la condition (vrai sur liste vide) |
liste.any { |item| ... } |
Vrai si au moins un la satisfait (faux sur liste vide) |
liste.filter { |item| ... } |
Ne garde que ceux qui la satisfont |
liste.map { |item| ... } |
Nouvelle liste transformée |
liste.length |
Nombre d’éléments (length() marche aussi) |
liste.contains(valeur) |
La valeur est-elle dans la liste ? |
liste.get(n) |
N-ième élément (à partir de 1) |
liste.first() / liste.last() |
Premier / dernier (null si la liste est vide) |
liste.join([séparateur]) |
Réunit en une chaîne (", " par défaut) |
check "List methods" { doc.pages.each { |page| assert page.width > 0, "page #{page.number} has no width" }
doc.fonts.each_with_index { |font, i| print("font", i + 1, "of", doc.fonts.length, ":", font.name) }
require doc.fonts.all { |f| f.is_embedded } assert doc.pages.any { |p| p.extract_text() != "" }, "the entire document has no text"
mauvaises = doc.images.filter { |img| img.dpi < 300 } assert mauvaises.length == 0, "#{mauvaises.length} image(s) with low resolution"
print("fonts:", doc.fonts.map { |f| f.name }.join(", "))
// get part de 1 : get(1) est le premier élément ligne = data::load_dataset("donnees/lots.csv").get(2) print("first column:", ligne.get(1))
// Sûr même sur une liste vide : null est faux tons = prepress::detect_spot_colors() assert !tons.first() || tons.first() == "Varnish", "unexpected special ink: #{tons.first()}"}10.2 Méthodes des chaînes
Section intitulée « 10.2 Méthodes des chaînes »| Méthode | Rôle |
|---|---|
texte.contains(sous) |
Contient-il ce fragment ? |
texte.starts_with(sous) |
Commence-t-il par ce fragment ? |
texte.ends_with(sous) |
Finit-il par ce fragment ? |
texte.trim() |
Retire les espaces de début et de fin |
texte.to_uppercase() |
Tout en majuscules |
texte.to_lowercase() |
Tout en minuscules |
texte.length |
Nombre de caractères |
check "String methods" { titre = doc.title require titre.length > 0 require titre.trim() == titre // aucun espace superflu assert !titre.to_lowercase().contains("draft"), "title still marked as draft"
code = codes::decode_barcode(1) assert code.starts_with("789"), "GTIN is not Brazilian" assert doc.filename.ends_with(".pdf"), "unexpected extension"}
check "contains on each type" { // Chaîne : cherche un FRAGMENT dans le texte require "final document".contains("final")
// Liste : cherche un ÉLÉMENT complet require ["a", "b"].contains("a") require !["ab"].contains("a") // "a" n'est pas un élément de cette liste}10.3 Fonctions globales
Section intitulée « 10.3 Fonctions globales »| Fonction | Rôle |
|---|---|
min(a, b) / max(a, b) |
Le plus petit / le plus grand |
abs(x) |
Valeur absolue |
round(x) |
Arrondit à l’entier le plus proche |
print(...) |
Affiche, séparé par des espaces, sur la sortie d’erreur |
region(x, y, l, h [, nom]) |
Crée une région (chapitre 2) |
print écrit sur la sortie d’erreur : > rapport.json ne reçoit donc que le
rapport.
check "Global functions" { const LARGEUR_A4 = 595.0 const TOLERANCE = 5.0
// abs est la clé des comparaisons de dimensions avec tolérance doc.pages.each { |page| assert abs(page.width - LARGEUR_A4) < TOLERANCE, "page #{page.number} is outside A4: #{page.width}pt" }
// round rend les messages lisibles // Sans : "217.4453125 DPI". Avec : "217 DPI". doc.images.each { |img| assert img.dpi >= 300, "image on page #{img.page_number}: #{round(img.dpi)} DPI" }
print("document:", doc.filename) print("pages:", doc.page_count, "| fonts:", doc.fonts.length)}10.4 Tournures courantes
Section intitulée « 10.4 Tournures courantes »// Compter combien d'éléments ne passent pascheck "Problem count" { mauvaises = doc.images.filter { |i| i.dpi < 300 } assert mauvaises.length == 0, "#{mauvaises.length} of #{doc.images.length} images below 300 DPI"}
// Lister les éléments fautifs dans le messagecheck "List in the message" { // Enchaînement sur la même ligne : pas de retour avant le point problemes = doc.pages.filter { |p| !p.has_trim_box }.map { |p| p.number } assert problemes.length == 0, "pages without a TrimBox: #{problemes.join(", ")}"}
// Validation avec tolérancefunction proche_de(valeur, cible, tolerance) { abs(valeur - cible) < tolerance}
check "With tolerance" { doc.pages.each { |page| assert proche_de(page.width, 595.0, 2.0), "page #{page.number}: width #{page.width}pt (expected 595 ± 2)" }}
// Ne pas planter sur un document videcheck "Defensive" { // Le court-circuit évite d'appeler first() sur une liste vide assert doc.pages.length == 0 || doc.pages.first().width > 0, "the first page has no width"}