glugify/config
Types
Configuration options for customizing slugification behavior.
Each field controls a specific aspect of the slugification process:
separator: Character(s) used to separate words (default: “-”)lowercase: Whether to convert to lowercase (default:True)max_length: Optional maximum length limit (default:None)word_boundary: Whether to truncate at word boundaries (default:False)transliterate: Whether to convert Unicode to ASCII (default:True)allow_unicode: Whether to allow Unicode characters in output (default:False)custom_replacements: List of custom string replacements (default:[])preserve_leading_underscore: Whether to keep leading underscores (default:False)preserve_trailing_dash: Whether to keep trailing dashes (default:False)stop_words: List of words to remove (default:[])trim: Whether to trim whitespace (default:True)
pub type Config {
Config(
separator: String,
lowercase: Bool,
max_length: option.Option(Int),
word_boundary: Bool,
transliterate: Bool,
allow_unicode: Bool,
custom_replacements: List(#(String, String)),
preserve_leading_underscore: Bool,
preserve_trailing_dash: Bool,
stop_words: List(String),
trim: Bool,
)
}
Constructors
-
Config( separator: String, lowercase: Bool, max_length: option.Option(Int), word_boundary: Bool, transliterate: Bool, allow_unicode: Bool, custom_replacements: List(#(String, String)), preserve_leading_underscore: Bool, preserve_trailing_dash: Bool, stop_words: List(String), trim: Bool, )
Values
pub fn default() -> Config
Creates a default configuration with sensible defaults for most use cases.
Default values:
- Separator:
- - Lowercase:
True - Max length:
None(unlimited) - Word boundary:
False - Transliterate:
True - Allow unicode:
False - Custom replacements:
[] - Preserve leading underscore:
False - Preserve trailing dash:
False - Stop words:
[] - Trim:
True
Examples
let config = default()
pub fn validate_config(config: Config) -> Result(Config, String)
Validates configuration parameters and returns an error if invalid.
Currently validates:
- Separator length must be <= 10 characters
Returns the same config if valid, or an error message if invalid.
pub fn with_allow_unicode(
config: Config,
allow_unicode: Bool,
) -> Config
Sets whether Unicode characters are allowed in the output.
When True, Unicode characters are preserved in the output.
When False, only ASCII characters are allowed.
Usually used with transliterate: False.
Examples
default()
|> with_transliterate(False)
|> with_allow_unicode(True)
pub fn with_custom_replacements(
config: Config,
replacements: List(#(String, String)),
) -> Config
Sets custom string replacements to apply before other processing.
Each tuple contains #(from, to) where from is replaced with to.
Replacements are applied in the order provided.
Examples
default()
|> with_custom_replacements([
#("&", " and "),
#("@", " at "),
#("%", " percent ")
])
// "Cats & Dogs @ 100%" -> "cats-and-dogs-at-100-percent"
pub fn with_lowercase(config: Config, lowercase: Bool) -> Config
Sets whether the output should be converted to lowercase.
Examples
default()
|> with_lowercase(False)
// Results in: "Hello-World" instead of "hello-world"
pub fn with_max_length(config: Config, max_length: Int) -> Config
Sets the maximum length for the generated slug.
If the value is negative, the config remains unchanged.
Use with with_word_boundary(True) to truncate at word boundaries.
Examples
default()
|> with_max_length(10)
// Will truncate slugs to 10 characters maximum
pub fn with_separator(
config: Config,
separator: String,
) -> Config
Sets the separator character(s) used between words.
Examples
default()
|> with_separator("_")
// Results in: "hello_world" instead of "hello-world"
pub fn with_stop_words(
config: Config,
stop_words: List(String),
) -> Config
Sets a list of stop words to remove from the slug.
Stop words are removed after other processing but before final cleanup. Matching is case-insensitive.
Examples
default()
|> with_stop_words(["the", "a", "an", "and", "or"])
// "The Quick Brown Fox and the Lazy Dog" -> "quick-brown-fox-lazy-dog"
pub fn with_transliterate(
config: Config,
transliterate: Bool,
) -> Config
Sets whether Unicode characters should be transliterated to ASCII.
When True, characters like “café” become “cafe”.
When False, Unicode characters are preserved or cause an error.
Examples
default()
|> with_transliterate(False)
|> with_allow_unicode(True)
// Preserves Unicode: "café" -> "café"
pub fn with_trim(config: Config, trim: Bool) -> Config
Sets whether to trim leading and trailing whitespace from the input.
This is applied early in the processing pipeline.
Examples
default()
|> with_trim(False)
// Preserves leading/trailing spaces in processing
pub fn with_word_boundary(
config: Config,
word_boundary: Bool,
) -> Config
Sets whether truncation should respect word boundaries.
When True, truncation will not cut words in half.
Only applies when max_length is set.
Examples
default()
|> with_max_length(10)
|> with_word_boundary(True)
// "hello world test" -> "hello" (not "hello worl")