Sha256: 2dae6e84fb5960b701b905eb6129fa5915a4f9a0bb749cc9ce389d475741e1fd

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

module CodeLister

  CustomError = Class.new(StandardError)

  class << self

    # List files base on some extension
    def files(args = {})
      opts = {
        base_dir: Dir.pwd,
        recursive: false,
        exts: [],
      }.merge(args)

      base_dir = opts[:base_dir]
      raise CustomError, "The directory #{base_dir} is not valid or or not readable!" unless File.exists?(base_dir)
      wildcard = opts[:recursive] ? '**' : ''
      exts = opts[:exts]
      patterns = File.join(base_dir, wildcard, "*.{#{exts.join(",")}}")

      Dir.glob(patterns).sort
    end

    # Filter out the list based on given list of words
    def filter(file_list, args = {})
      opts = {
        inc_words: [],
        exc_words: [],
        ignore_case: true
      }.merge(args)

      inc_words   = opts[:inc_words]
      exc_words   = opts[:exc_words]
      ignore_case = opts[:ignore_case]

      take_any!(file_list, opts)
      drop_any!(file_list, opts)

      file_list
    end

    protected

    def take_any!(file_list, args = {})
      words = args[:inc_words]
      ignore_case = args[:ignore_case]

      unless words.empty?
        file_list.select! do |f|
          words.any? do |w|
            if ignore_case
              /#{w}/i =~ File.basename(f)
            else
              /#{w}/  =~ File.basename(f)
            end
          end
        end
      end

      file_list
    end

    def drop_any!(file_list, args = {})
      words = args[:exc_words]
      ignore_case = args[:ignore_case]

      unless words.empty?
        file_list.delete_if do |f|
          words.any? do |w|
            if ignore_case
              /#{w}/i =~ File.basename(f)
            else
              /#{w}/  =~ File.basename(f)
            end
          end
        end
      end

      file_list
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
code_lister-0.0.5 lib/code_lister/code_lister.rb
code_lister-0.0.4 lib/code_lister/code_lister.rb