53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# typed: strict
 | 
						|
# frozen_string_literal: true
 | 
						|
 | 
						|
module Cask
 | 
						|
  class DSL
 | 
						|
    # Class corresponding to the `rename` stanza.
 | 
						|
    class Rename
 | 
						|
      sig { returns(String) }
 | 
						|
      attr_reader :from, :to
 | 
						|
 | 
						|
      sig { params(from: String, to: String).void }
 | 
						|
      def initialize(from, to)
 | 
						|
        @from = from
 | 
						|
        @to = to
 | 
						|
      end
 | 
						|
 | 
						|
      sig { params(staged_path: Pathname).void }
 | 
						|
      def perform_rename(staged_path)
 | 
						|
        return unless staged_path.exist?
 | 
						|
 | 
						|
        # Find files matching the glob pattern
 | 
						|
        matching_files = if @from.include?("*")
 | 
						|
          staged_path.glob(@from)
 | 
						|
        else
 | 
						|
          [staged_path.join(@from)].select(&:exist?)
 | 
						|
        end
 | 
						|
 | 
						|
        return if matching_files.empty?
 | 
						|
 | 
						|
        # Rename the first matching file to the target path
 | 
						|
        source_file = matching_files.first
 | 
						|
        return if source_file.nil?
 | 
						|
 | 
						|
        target_file = staged_path.join(@to)
 | 
						|
 | 
						|
        # Ensure target directory exists
 | 
						|
        target_file.dirname.mkpath
 | 
						|
 | 
						|
        # Perform the rename
 | 
						|
        source_file.rename(target_file.to_s) if source_file.exist?
 | 
						|
      end
 | 
						|
 | 
						|
      sig { returns(T::Hash[Symbol, String]) }
 | 
						|
      def pairs
 | 
						|
        { from:, to: }
 | 
						|
      end
 | 
						|
 | 
						|
      sig { returns(String) }
 | 
						|
      def to_s = pairs.inspect
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |