Skip to content

Commit

Permalink
Rename path replace-extension to path with-extension, add with-stem, …
Browse files Browse the repository at this point in the history
…with-parent
  • Loading branch information
132ikl committed Jan 6, 2025
1 parent 66c9995 commit f180f3e
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 37 deletions.
30 changes: 0 additions & 30 deletions stdlib-candidate/path/mod.nu

This file was deleted.

71 changes: 71 additions & 0 deletions stdlib-candidate/std-rfc/path/mod.nu
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Helper function for `path with` commands
def with-field [field: string, value: string] {
path parse
| update $field $value
| path join
}

# Replace extension of input file paths.
#
# Note that it doesn't change the file name locally.
#
# # Example
# - setting path ext to `rs`
# ```nushell
# > "ab.txt" | path with-extension "rs"
# ab.rs
# > "ab.txt" | path with-extension ".rs"
# ab.rs
#
# - setting a list of input path ext to `rs`
# > ["ab.txt", "cd.exe"] | path with-extension "rs"
# ╭───┬──────────╮
# │ 0 │ ab.rs │
# │ 1 │ cd.rs │
# ╰───┴──────────╯
# ```
export def with-extension [ext: string] {
let path = $in
let ext_trim = if $ext starts-with "." {
$ext | str substring 1..
} else {
$ext
}
$path | with-field extension $ext_trim
}

# Replace stem of input file paths.
#
# Note that it doesn't change the file name locally.
#
# # Example
# - replace stem with "share"
# ```nushell
# > "/usr/bin" | path with-stem "share"
# /usr/share
#
# - replace stem with "nushell"
# > ["/home/alice/", "/home/bob/secret.txt"] | path with-stem "nushell"
# ╭───┬───────────────────────╮
# │ 0 │ /home/nushell │
# │ 1 │ /home/bob/nushell.txt │
# ╰───┴───────────────────────╯
# ```
export def with-stem [stem: string] { with-field stem $stem }

# Replace parent field of input file paths.
#
# # Example
# - replace parent path with `/usr/share`
# ```nushell
# > "/etc/foobar" | path with-parent "/usr/share/"
# /usr/share/foobar
#
# - replace parent path with `/root/` for all filenames in list
# > ["/home/rose/meow", "/home/fdncred/"] | path with-parent "/root/"
# ╭───┬────────────╮
# │ 0 │ /root/meow │
# │ 1 │ /root/spam │
# ╰───┴────────────╯
# ```
export def with-parent [parent: string] { with-field parent $parent }
32 changes: 25 additions & 7 deletions stdlib-candidate/tests/path.nu
Original file line number Diff line number Diff line change
@@ -1,21 +1,39 @@
use path
use std-rfc/path
use std/assert

#[test]
def path_replace_extension [] {
let new_path = "ab.txt" | path replace-extension "rs"
def path_with_extension [] {
let new_path = "ab.txt" | path with-extension "rs"
assert equal $new_path "ab.rs"

let new_path = "ab.txt" | path replace-extension ".rs"
let new_path = "ab.txt" | path with-extension ".rs"
assert equal $new_path "ab.rs"
}

#[test]
def path_replace_extension_for_list [] {
let new_path = ["ab.txt", "cd.exe"] | path replace-extension "rs"
def path_with_extension_for_list [] {
let new_path = ["ab.txt", "cd.exe"] | path with-extension "rs"
assert equal $new_path ["ab.rs", "cd.rs"]


let new_path = ["ab.txt", "cd.exe"] | path replace-extension ".rs"
let new_path = ["ab.txt", "cd.exe"] | path with-extension ".rs"
assert equal $new_path ["ab.rs", "cd.rs"]
}

#[test]
def path_with_stem [] {
let new_path = "/usr/bin" | path with-stem "share"
assert equal $new_path "/usr/share"

let new_path = ["/home/alice/", "/home/bob/secret.txt"] | path with-stem "nushell"
assert equal $new_path ["/home/nushell", "/home/bob/nushell.txt"]
}

#[test]
def path_with_parent [] {
let new_path = "/etc/foobar" | path with-parent "/usr/share/"
assert equal $new_path "/usr/share/foobar"

let new_path = ["/home/rose/meow", "/home/fdncred/"] | path with-parent "/root/"
assert equal $new_path ["/root/meow", "/root/fdncred"]
}

0 comments on commit f180f3e

Please sign in to comment.