#![forbid(unsafe_code)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![cfg_attr(docsrs, doc = include_str!("../README.md"))]
mod locale;
mod options;
mod slug;
pub use crate::locale::Locale;
pub use crate::options::Options;
pub use crate::slug::{slugify_with_options, Slugifier};
pub fn slugify(input: &str) -> String {
slugify_with_options(input, &Options::default())
}
#[cfg(test)]
mod tests {
use super::*;
use regex::Regex;
#[test]
fn basic_english() {
assert_eq!(slugify("Hello, World!"), "hello-world");
assert_eq!(
slugify(" Multiple spaces\tand\nlines "),
"multiple-spaces-and-lines"
);
}
#[test]
fn custom_separator() {
let opts = Options::default().separator("_");
assert_eq!(slugify_with_options("A B C", &opts), "a_b_c");
}
#[test]
fn german_locale() {
let opts = Options::default().locale(Some(Locale::De));
assert_eq!(
slugify_with_options("Füße lösen Ärger", &opts),
"fuesse-loesen-aerger"
);
}
#[test]
fn turkish_locale() {
let opts = Options::default().locale(Some(Locale::Tr));
assert_eq!(
slugify_with_options("İstanbul'a hoş geldiniz!", &opts),
"istanbula-hos-geldiniz"
);
}
#[test]
fn remove_pattern() {
let opts = Options::default().remove(Some(Regex::new("[']").unwrap()));
assert_eq!(slugify_with_options("rock 'n' roll", &opts), "rock-n-roll");
}
#[test]
fn fluent_builder_usage() {
use crate::slug::Slugifier;
use regex::Regex;
let s = Slugifier::new()
.separator("_")
.locale(Some(Locale::Tr))
.remove(Some(Regex::new("[0-9]").unwrap()))
.lowercase(true)
.trim(true);
assert_eq!(
s.slugify("İstanbul'a 123 hoş geldiniz!"),
"istanbula_hos_geldiniz"
);
}
}