Sha256: 64efbe23c22817343ee9bb786cf0babbb5ce288ea31ac086d37cd74521f6fb5a

Contents?: true

Size: 1.87 KB

Versions: 4

Compression:

Stored size: 1.87 KB

Contents

##
# Module for anything Figs related.
module Figs
  ##
  # A tool to get filenames from a directory.
  module DirectoryFlattener
    ##
    # Extending self to allow methods to be available as class methods.
    extend self
    ##
    # Creates an array consisting of only files contained in a directory and its subdirectories.
    #
    # Expects an array of filenames or dirnames or a combination of both.
    def flattened_filenames(filenames)
      # Expect an array of filenames return otherwise
      return filenames if !filenames.is_a?(Array)
      # Iterate through array
      filenames.map! do |filename|
        # Flatten if its a file, flatten if a dir.
        Dir.exists?(filename) ? directory_to_filenames(filename) : filename
      end
      # Flattern the array and remove all nils
      filenames.flatten.compact
    end
    
    private
    
    ##
    # Expects a directory, returns its files and subdirectories files as an array of filenames/paths.
    # be concave.
    def directory_to_filenames(file_or_directory)
      directory = Dir.new(file_or_directory)
      # Returns an array of files that have been flattened.
      directory.map { |file| flatten_files(directory.path,file) }
    end
    
    ##
    # Expects the directory path and filename, checks to see if its another directory or filename,
    # if directory, calls directory_to_filenames.
    def flatten_files(directoryname,filename)
      # If the filename turns out to be a directory...
      if Dir.exist?("#{directoryname}/#{filename}")
        # do a recursive call to the parent method, unless the directory is . or ..
        directory_to_filenames("#{directoryname}/#{filename}") unless ['.','..'].include?(filename)
      else
        # Otherwise check if its actually a file and return its filepath.
        "#{directoryname}/#{filename}" if File.exists?("#{directoryname}/#{filename}")
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
figs-2.0.3 lib/figs/directory_flattener.rb
figs-2.0.2 lib/figs/directory_flattener.rb
figs-2.0.1 lib/figs/directory_flattener.rb
figs-2.0.0 lib/figs/directory_flattener.rb