Sha256: 51ee6d388dc4b84febd58c5627161f6042c4e18afd51a98793a3e491adc2c703

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

module FunWith
  module Files
    module Utils
      class Succession
        def self.get_successor_name( basename, digit_count )
          pieces = basename.to_s.split(".")
          
          if pieces.length == 0
            pieces = [ self.format_counter( 0, digit_count ) ]
          elsif is_counter?( pieces.last, digit_count )
            pieces = self.increment_position( pieces, pieces.length - 1 )
          elsif is_counter?( pieces[-2], digit_count )
            pieces = self.increment_position( pieces, pieces.length - 2 )
          else
            pieces = self.install_counter( pieces, digit_count )
          end
          
          pieces.join(".")
        end
        
        def self.is_counter?( str, digit_count )
          return false if str.nil?
          (str =~ /^\d{#{digit_count}}$/) != nil
        end
        
        def self.format_counter( i, len )
          sprintf( "%0#{len}i", i )
        end
        
        def self.increment_position( arr, pos_to_increment )
          arr.map.each_with_index do |str, i|
            if i == pos_to_increment
              self.format_counter( str.to_i + 1, str.length )
            else
              str
            end
          end
        end
        
        def self.install_counter( arr, count )
          counter = self.format_counter( 0, count )
          arr[0..-2] + [counter] + [arr[-1]]
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fun_with_files-0.0.18 ./lib/fun_with/files/utils/succession.rb