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 |