feat: Add slug.sh --raw for deterministic raw file slugging
This commit is contained in:
parent
64125d91b4
commit
e62ad0c831
2 changed files with 42 additions and 0 deletions
|
|
@ -7,6 +7,18 @@
|
|||
# =============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
if [[ "${1:-}" == "--raw" ]]; then
|
||||
raw="${2:?usage: slug.sh --raw <raw/bucket/rel/path>}"
|
||||
rel="${raw#raw/}"; rel="${rel#*/}" # strip "raw/" and the bucket name
|
||||
rel="${rel%.*}" # strip extension
|
||||
slug="$(printf '%s\n' "$rel" | tr '/' '\n' \
|
||||
| sed -E 's/[^a-zA-Z0-9]+/-/g; s/-{2,}/-/g; s/^-+//; s/-+$//' \
|
||||
| tr '[:upper:]' '[:lower:]' | paste -sd- -)"
|
||||
[[ -n "$slug" ]] || { echo "slug: empty result for input '${raw}'" >&2; exit 1; }
|
||||
printf '%s\n' "$slug"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
input="${1:?usage: slug.sh <path-or-title>}"
|
||||
|
||||
# Strip directory and extension when given a path
|
||||
|
|
|
|||
30
tests/slug.bats
Normal file
30
tests/slug.bats
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
setup() {
|
||||
load 'helpers'
|
||||
SLUG="${SKILL_SCRIPTS}/slug.sh"
|
||||
}
|
||||
|
||||
@test "slug --raw: flat file remains unchanged" {
|
||||
run bash "$SLUG" --raw "raw/articles/il-pane.md"
|
||||
[ "$status" -eq 0 ]
|
||||
[ "$output" = "il-pane" ]
|
||||
}
|
||||
|
||||
@test "slug --raw: nested file gets folder prefix" {
|
||||
run bash "$SLUG" --raw "raw/articles/cibo/il-pane.md"
|
||||
[ "$status" -eq 0 ]
|
||||
[ "$output" = "cibo-il-pane" ]
|
||||
}
|
||||
|
||||
@test "slug --raw: distinct subdirs avoid collision" {
|
||||
s1="$(bash "$SLUG" --raw "raw/articles/cibo/pane.md")"
|
||||
s2="$(bash "$SLUG" --raw "raw/articles/storia/pane.md")"
|
||||
[ "$s1" != "$s2" ]
|
||||
}
|
||||
|
||||
@test "slug --raw: Bash and Python-calling-bash agree (single implementation)" {
|
||||
b="$(bash "$SLUG" --raw "raw/articles/cibo/il-pane.md")"
|
||||
p="$(python3 -c "import subprocess;print(subprocess.check_output(['bash','$SLUG','--raw','raw/articles/cibo/il-pane.md'],text=True).strip())")"
|
||||
[ "$b" = "$p" ]
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue