Skip to content
💨 A faster pure Ruby implementation of Pathname with extra bits.
Ruby Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



Pathutil tries to be a faster pure Ruby impelementation of Pathname. It arose out of a need to fix basic problems with Pathname, such as suscepetibility to join overrides, need for automatic encoding, and normalization (for stuff like Jekyll) and the ability to do other safe-style operations in an encapsulated format, like copying files and folders with symlinks but only if they originate from the given root.

Diverging (or New/Extra) Methods

  • encoding, encoding= - Set the read/write encoding.
  • normalize - crlf => lf (read), lf => crlf (write).
  • !~, =~ - Regexp operations on the path, behaves normally.
  • search_backwards - Allows you to search backwards for a file or folder.
  • >=, > - Check if a file is in but ahead of a path:"/tmp/hello") > "/tmp" # => true
  • in_path? - Check if a file is within a given path:"/tmp/hello").in_path?("/tmp") # => true
  • <=, < - Check if a file is in but below a path:"/tmp") < "/tmp/hello" # => true
  • read_yaml - a wrapper around Yaml.safe_load and SafeYAML to make reading YAML easy.
  • children - behaves like Pathname, except it accepts a block to work on the path.
  • safe_copy - Copy files, disallowing symlinks unless in_path?
  • enforce_root - Force a root if not already in that root.
  • read_yaml - Read YAML with or without safe.
  • unlink - Behaves like File.

touch, rm_r, link, symlink, cp_r, rm, cp, rm_rf, first (alias of dirname), shellescape, to_regexp, chdir, glob (does chdir first), gsub (works on @path), chomp (works on @path), mkdir_p, to_str (alias of to_s), to_a (alias of children), regexp_escape, last (alias of basename), to_pathname, split_path, read_json, rm_f

Current (All) Methods

Pathutil has and responds to all methods that Pathname provides and forwards them where they need to go with wrappers if necessary and with our @path as the first argumement on our behalf. It is a true encapsulator with a few extra helpers to make your life easy.

relative_path_from, touch, mkpath, rmtree, rm_r, sub_ext, directory?, exist?, opendir, readable?, readable_real?, world_readable?, writable?, writable_real?, world_writable?, executable?, executable_real?, file?, size?, owned?, grpowned?, pipe?, symlink?, socket?, blockdev?, chardev?, setuid?, setgid?, sticky?, stat, lstat, ftype, atime, mtime, ctime, birthtime, utime, chmod, chown, lchmod, lchown, link, symlink, readlink, truncate, rename, find, unlink, expand_path, normalize, realpath, <, basename, >, realdirpath, extname, dirname, cp_r, rm, zero?, make_link, cp, rm_rf, entries, /, +, make_symlink, first, to_path, each_entry, shellescape, to_regexp, chdir, mkdir, rmdir, glob, fnmatch?, <=, >=, fnmatch, split, read, write, sub, gsub, chomp, mkdir_p, open, readlines, delete, size, each_line, sysopen, encoding, binwrite, binread, to_str, to_a, split_path, to_pathname, read_yaml, read_json, in_path?, regexp_escape, enforce_root, parent, safe_copy, root?, absolute?, relative?, each_filename, descend, last, ascend, join, encoding=, mountpoint?, children, each_child, rm_f

You can’t perform that action at this time.