module Refinements::Pathname

Provides additional enhancements to the Pathname primitive.

Public Instance Methods

Pathname(object) click to toggle source
Calls superclass method
# File lib/refinements/pathname.rb, line 9
def Pathname object
  return super(String(object)) unless object

  super
end
change_dir() { |Pathname(path)| ... } click to toggle source
# File lib/refinements/pathname.rb, line 33
def change_dir
  if block_given?
    Dir.chdir(self) { |path| yield Pathname(path) }
  else
    Dir.chdir self and self
  end
end
copy(to) click to toggle source
# File lib/refinements/pathname.rb, line 41
def copy to
  destination = to.directory? ? to.join(basename) : to
  read.then { |content| destination.write content }
  self
end
deep_touch(...) click to toggle source
# File lib/refinements/pathname.rb, line 47
def deep_touch(...) = make_ancestors.touch(...)

def delete = super && self

def delete_prefix(pattern) = parent.join %(#{name.sub(/\A#{pattern}/, "")}#{extname})

def delete_suffix(pattern) = parent.join %(#{name.sub(/#{pattern}\z/, "")}#{extname})

def directories pattern = "*", flag: File::FNM_SYSCASE
  glob(pattern, flag).select(&:directory?)
end

def empty = file? ? (truncate(0) and self) : remove_tree.make_dir

def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)

def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

def make_ancestors
  dirname.mkpath
  self
end

def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super 
delete(= super && self) click to toggle source
# File lib/refinements/pathname.rb, line 49
def delete = super && self

def delete_prefix(pattern) = parent.join %(#{name.sub(/\A#{pattern}/, "")}#{extname})

def delete_suffix(pattern) = parent.join %(#{name.sub(/#{pattern}\z/, "")}#{extname})

def directories pattern = "*", flag: File::FNM_SYSCASE
  glob(pattern, flag).select(&:directory?)
end

def empty = file? ? (truncate(0) and self) : remove_tree.make_dir

def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)

def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

def make_ancestors
  dirname.mkpath
  self
end

def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super content,
delete_prefix(pattern) click to toggle source
# File lib/refinements/pathname.rb, line 51
def delete_prefix(pattern) = parent.join %(#{name.sub(/\A#{pattern}/, "")}#{extname})

def delete_suffix(pattern) = parent.join %(#{name.sub(/#{pattern}\z/, "")}#{extname})

def directories pattern = "*", flag: File::FNM_SYSCASE
  glob(pattern, flag).select(&:directory?)
end

def empty = file? ? (truncate(0) and self) : remove_tree.make_dir

def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)

def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

def make_ancestors
  dirname.mkpath
  self
end

def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super content, offset
delete_suffix(pattern) click to toggle source
# File lib/refinements/pathname.rb, line 53
def delete_suffix(pattern) = parent.join %(#{name.sub(/#{pattern}\z/, "")}#{extname})

def directories pattern = "*", flag: File::FNM_SYSCASE
  glob(pattern, flag).select(&:directory?)
end

def empty = file? ? (truncate(0) and self) : remove_tree.make_dir

def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)

def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

def make_ancestors
  dirname.mkpath
  self
end

def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super content, offset, 
directories(pattern = "*", flag: File::FNM_SYSCASE) click to toggle source
# File lib/refinements/pathname.rb, line 55
def directories pattern = "*", flag: File::FNM_SYSCASE
  glob(pattern, flag).select(&:directory?)
end
empty(= file? ? (truncate(0) and self) : remove_tree.make_dir) click to toggle source
# File lib/refinements/pathname.rb, line 59
def empty = file? ? (truncate(0) and self) : remove_tree.make_dir

def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)

def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

def make_ancestors
  dirname.mkpath
  self
end

def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super content, offset, **options
extensions(= basename.to_s.split(/(?=\.)+/).tap(&:shift)) click to toggle source
# File lib/refinements/pathname.rb, line 61
def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)

def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

def make_ancestors
  dirname.mkpath
  self
end

def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super content, offset, **options
  
files(pattern = "*", flag: File::FNM_SYSCASE) click to toggle source
# File lib/refinements/pathname.rb, line 63
def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

def make_ancestors
  dirname.mkpath
  self
end

def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super content, offset, **options
  self
gsub(pattern, replacement) click to toggle source
# File lib/refinements/pathname.rb, line 65
def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

def make_ancestors
  dirname.mkpath
  self
end

def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super content, offset, **options
  self
end
home(= new ENV.fetch("HOME", "")) click to toggle source
# File lib/refinements/pathname.rb, line 17
  def home = new ENV.fetch("HOME", "")

  def make_temp_dir prefix: "temp-", suffix: nil, root: nil
    if block_given?
      Dir.mktmpdir([prefix, suffix], root) { |path| yield new(path) }
    else
      new Dir.mktmpdir([prefix, suffix], root)
    end
  end

  def require_tree(root) = new(root).files("**/*.rb").each { |path| require path.to_s }

  def root = new(File::SEPARATOR)
end

refine ::Pathname do
  def change_dir
    if block_given?
      Dir.chdir(self) { |path| yield Pathname(path) }
    else
      Dir.chdir self and self
    end
  end

  def copy to
    destination = to.directory? ? to.join(basename) : to
    read.then { |content| destination.write content }
    self
  end

  def deep_touch(...) = make_ancestors.touch(...)

  def delete = super && self

  def delete_prefix(pattern) = parent.join %(#{name.sub(/\A#{pattern}/, "")}#{extname})

  def delete_suffix(pattern) = parent.join %(#{name.sub(/#{pattern}\z/, "")}#{extname})

  def directories pattern = "*", flag: File::FNM_SYSCASE
    glob(pattern, flag).select(&:directory?)
  end

  def empty = file? ? (truncate(0) and self) : remove_tree.make_dir

  def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)

  def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

  def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

  def make_ancestors
    dirname.mkpath
    self
  end

  def make_dir = exist? ? self : (mkdir and self)

  def make_path
    mkpath
    self
  end

  def name = basename extname

  def puts(content) = write "#{content}\n"

  def relative_parent(root_dir) = relative_path_from(root_dir).parent

  def remove_dir = exist? ? (rmdir and self) : self

  def remove_tree
    rmtree if exist?
    self
  end

  def rewrite = read.then { |content| write yield(content) if block_given? }

  def touch at = Time.now
    exist? ? utime(at, at) : write("")
    self
  end

  def write content, offset: nil, **options
make_ancestors() click to toggle source
# File lib/refinements/pathname.rb, line 67
def make_ancestors
  dirname.mkpath
  self
end
make_dir(= exist? ? self : (mkdir and self)) click to toggle source
# File lib/refinements/pathname.rb, line 72
def make_dir = exist? ? self : (mkdir and self)

def make_path
  mkpath
  self
end

def name = basename extname

def puts(content) = write "#{content}\n"

def relative_parent(root_dir) = relative_path_from(root_dir).parent

def remove_dir = exist? ? (rmdir and self) : self

def remove_tree
  rmtree if exist?
  self
end

def rewrite = read.then { |content| write yield(content) if block_given? }

def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end

def write content, offset: nil, **options
  super content, offset, **options
  self
end
    
make_path() click to toggle source
# File lib/refinements/pathname.rb, line 74
def make_path
  mkpath
  self
end
make_temp_dir(prefix: "temp-", suffix: nil, root: nil) { |new(path)| ... } click to toggle source
# File lib/refinements/pathname.rb, line 19
def make_temp_dir prefix: "temp-", suffix: nil, root: nil
  if block_given?
    Dir.mktmpdir([prefix, suffix], root) { |path| yield new(path) }
  else
    new Dir.mktmpdir([prefix, suffix], root)
  end
end
name(= basename extname) click to toggle source
# File lib/refinements/pathname.rb, line 79
  def name = basename extname

  def puts(content) = write "#{content}\n"

  def relative_parent(root_dir) = relative_path_from(root_dir).parent

  def remove_dir = exist? ? (rmdir and self) : self

  def remove_tree
    rmtree if exist?
    self
  end

  def rewrite = read.then { |content| write yield(content) if block_given? }

  def touch at = Time.now
    exist? ? utime(at, at) : write("")
    self
  end

  def write content, offset: nil, **options
    super content, offset, **options
    self
  end
end
puts(content) click to toggle source
# File lib/refinements/pathname.rb, line 81
    def puts(content) = write "#{content}\n"

    def relative_parent(root_dir) = relative_path_from(root_dir).parent

    def remove_dir = exist? ? (rmdir and self) : self

    def remove_tree
      rmtree if exist?
      self
    end

    def rewrite = read.then { |content| write yield(content) if block_given? }

    def touch at = Time.now
      exist? ? utime(at, at) : write("")
      self
    end

    def write content, offset: nil, **options
      super content, offset, **options
      self
    end
  end
end
relative_parent(root_dir) click to toggle source
# File lib/refinements/pathname.rb, line 83
      def relative_parent(root_dir) = relative_path_from(root_dir).parent

      def remove_dir = exist? ? (rmdir and self) : self

      def remove_tree
        rmtree if exist?
        self
      end

      def rewrite = read.then { |content| write yield(content) if block_given? }

      def touch at = Time.now
        exist? ? utime(at, at) : write("")
        self
      end

      def write content, offset: nil, **options
        super content, offset, **options
        self
      end
    end
  end
end
remove_dir(= exist? ? (rmdir and self) : self) click to toggle source
# File lib/refinements/pathname.rb, line 85
    def remove_dir = exist? ? (rmdir and self) : self

    def remove_tree
      rmtree if exist?
      self
    end

    def rewrite = read.then { |content| write yield(content) if block_given? }

    def touch at = Time.now
      exist? ? utime(at, at) : write("")
      self
    end

    def write content, offset: nil, **options
      super content, offset, **options
      self
    end
  end
end
remove_tree() click to toggle source
# File lib/refinements/pathname.rb, line 87
def remove_tree
  rmtree if exist?
  self
end
require_tree(root) click to toggle source
# File lib/refinements/pathname.rb, line 27
  def require_tree(root) = new(root).files("**/*.rb").each { |path| require path.to_s }

  def root = new(File::SEPARATOR)
end

refine ::Pathname do
  def change_dir
    if block_given?
      Dir.chdir(self) { |path| yield Pathname(path) }
    else
      Dir.chdir self and self
    end
  end

  def copy to
    destination = to.directory? ? to.join(basename) : to
    read.then { |content| destination.write content }
    self
  end

  def deep_touch(...) = make_ancestors.touch(...)

  def delete = super && self

  def delete_prefix(pattern) = parent.join %(#{name.sub(/\A#{pattern}/, "")}#{extname})

  def delete_suffix(pattern) = parent.join %(#{name.sub(/#{pattern}\z/, "")}#{extname})

  def directories pattern = "*", flag: File::FNM_SYSCASE
    glob(pattern, flag).select(&:directory?)
  end

  def empty = file? ? (truncate(0) and self) : remove_tree.make_dir

  def extensions = basename.to_s.split(/(?=\.)+/).tap(&:shift)

  def files(pattern = "*", flag: File::FNM_SYSCASE) = glob(pattern, flag).select(&:file?)

  def gsub(pattern, replacement) = self.class.new(to_s.gsub(pattern, replacement))

  def make_ancestors
    dirname.mkpath
    self
  end

  def make_dir = exist? ? self : (mkdir and self)

  def make_path
    mkpath
    self
  end

  def name = basename extname

  def puts(content) = write "#{content}\n"

  def relative_parent(root_dir) = relative_path_from(root_dir).parent

  def remove_dir = exist? ? (rmdir and self) : self

  def remove_tree
    rmtree if exist?
    self
  end

  def rewrite = read.then { |content| write yield(content) if block_given? }

  def touch at = Time.now
    exist? ? utime(at, at) : write("")
    self
  end

  def write content, offset: nil, **options
    
rewrite(= read.then { |content| write yield(content) if block_given? }) click to toggle source
# File lib/refinements/pathname.rb, line 92
  def rewrite = read.then { |content| write yield(content) if block_given? }

  def touch at = Time.now
    exist? ? utime(at, at) : write("")
    self
  end

  def write content, offset: nil, **options
    super content, offset, **options
    self
  end
end
root(= new(File::SEPARATOR)) click to toggle source
# File lib/refinements/pathname.rb, line 29
  def root = new(File::SEPARATOR)
end
touch(at = Time.now) click to toggle source
# File lib/refinements/pathname.rb, line 94
def touch at = Time.now
  exist? ? utime(at, at) : write("")
  self
end
write(content, offset: nil, **options) click to toggle source
Calls superclass method
# File lib/refinements/pathname.rb, line 99
def write content, offset: nil, **options
  super content, offset, **options
  self
end