Sha256: eb76dc534891c38d024462dce164a687f125f911c9f510f372866a74084fc42d

Contents?: true

Size: 1.98 KB

Versions: 1

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true

require "pathname"

module Refinements
  module Pathnames
    refine Kernel do
      def Pathname object
        return super(String(object)) unless object

        super
      end
    end

    refine Pathname do
      def change_dir &block
        block ? Dir.chdir(self, &block) : (Dir.chdir self and self)
      end

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

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

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

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

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

      def make_ancestors
        dirname.mkpath
        self
      end

      def make_dir
        exist? ? self : mkdir and self
      end

      def make_path
        mkpath
        self
      end

      def mkdir
        exist? ? self : super and self
      end

      def name
        basename extname
      end

      def relative_parent root_dir
        relative_path_from(root_dir).parent
      end

      def relative_parent_from root_dir
        warn "[DEPRECATION]: Pathname#relative_parent_from is deprecated, " \
             "use Pathname#relative_parent instead."
        relative_parent root_dir
      end

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

      def remove_tree
        rmtree if exist?
        self
      end

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

      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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
refinements-7.15.1 lib/refinements/pathnames.rb