fjord/ls.rb
2024-04-26 09:07:49 +09:00

60 lines
1.3 KiB
Ruby

# frozen_string_literal: true
require 'optparse'
def options
secret_files = {}
opt = OptionParser.new
opt.on('-a') { |v| params[:a] = v }
opt.on('-r') { |v| params[:r] = v }
secret_files[:dir] = opt.parse!(ARGV)[0]
secret_files
end
SELECTED = options
def get_files(option_a: false)
if option_a
Dir.glob('*', File::FNM_DOTMATCH, base: SELECTED[:dir])
else
Dir.glob('*', base: SELECTED[:dir])
end
end
COLUMNS = 3
def run
listed_filenames = list_filenames
filenames_matrix = slice_filenames(listed_filenames)
filled_filenames = fill_filenames(filenames_matrix)
arrange_filenames(filled_filenames)
end
def list_filenames
Dir.glob('*')
end
def slice_filenames(listed_filenames)
columns_size = listed_filenames.size.ceildiv(COLUMNS)
listed_filenames.each_slice(columns_size).to_a
end
def fill_filenames(filenames_matrix)
array_size = filenames_matrix.map(&:size).max
filenames_matrix.each do |slice|
slice << '' while slice.size < array_size
end
filenames_matrix.transpose
end
def arrange_filenames(filled_filenames)
filenames_count = filled_filenames.flatten.map(&:size).max
filled_filenames.each do |arrange|
arrange.each do |arranged|
print arranged.ljust(filenames_count + 5)
end
puts
end
end
run